| 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;
}