Revision 1 (by moose, 2006/07/23 19:04:20) initial import
#include <stdio.h>
#include <string.h>

void vfs_rem_dotdot_v2(char *path)
{

}

void vfs_rem_dotdot_v1(char *path)
{
	char *ptr = path, *ptr2 = NULL, *tmp = NULL, *back = NULL;
	//Assert(path);

	for(; *ptr && *(ptr+1) && *(ptr+2); ptr++) {
//		printf("*ptr: %c\n", *ptr);

		if(strncmp(ptr, "/..", 3) == 0) {
//			printf("Scan back: ");
			for(tmp = ptr-1; tmp >= path && *tmp != '/'; tmp--) /*putchar(*tmp)*/;

//			printf("\nCopy forward: ");
			if(tmp < path)
				tmp = path;

			back = tmp-1;

			for(ptr2=ptr+3; *tmp && *ptr2; tmp++, ptr2++) {
				*tmp = *ptr2;
//				putchar(*tmp);
			}

			*tmp = '\0';

			ptr = back;
//			putchar('\n');
		} else
		if(strncmp(ptr, "../", 3) == 0) {
//			printf("Scan back: ");
			for(tmp = ptr-1; tmp >= path && *(tmp-1) != '/'; tmp--) /*putchar(*tmp)*/;

//			printf("\nCopy forward: ");
			if(tmp < path)
				tmp = path;

			back = tmp-1;

			for(ptr2=ptr+2; *tmp && *ptr2; tmp++, ptr2++) {
				*tmp = *ptr2;
//				putchar(*tmp);
			}

			*tmp = '\0';

			ptr = back;
//			putchar('\n');
		}

	}

	// ensure theres something in 'path'
	if(path[0] == '\0') {
		path[0] = '/';
		path[1] = '\0';
	}
}

int main(int argc, char **argv)
{
	int i;
	for(i = 1; i < argc; i++) {
		char *tmp = strdup(argv[i]);
		vfs_rem_dotdot_v1(tmp);
		printf("rem v1: '%s' ==> '%s'\n", argv[i], tmp);
		free(tmp);
	}
	return 0;
}