char buf2[PATH_MAX + 1] = {0};\r
struct stat info = {0};\r
\r
- char* delimiter;
-
+ char* delimiter;\r
+ \r
if(!file)\r
{\r
*path = NULL;\r
return -1;\r
- }
-
- delimiter = strrchr(file,'/');
-
- if(!delimiter)
+ }\r
+\r
+ delimiter = strrchr(file,'/');\r
+\r
+ if(!delimiter)\r
delimiter = strrchr(file,'\\');\r
\r
if(!delimiter)\r
strncpy(buf2, file, (delimiter - file));\r
\r
if(translatepath(buf2, path) < 0)\r
+ {\r
+ if(errno == ENOTDIR)\r
+ errno = ENOENT;\r
+\r
return -1;\r
+ }\r
}\r
\r
sprintf(buf1,"%s\\%s", *path, delimiter ? delimiter + 1 : file);\r
+\r
\r
if(stat(buf1, &info) || !S_ISREG(info.st_mode))\r
{\r
char buffer1[PATH_MAX + 1] = {0}; \r
char buffer2[PATH_MAX + 1] = {0};\r
char *p1;\r
- int i, j, len;\r
+ int i, len;\r
\r
struct stat stat_buf = {0};\r
+\r
+ len = (int)strlen(totranslate); \r
+ \r
+ strncpy(buffer1, totranslate, len);\r
+\r
+ while((p1 = strstr(buffer1, "//"))) \r
+ if(p1[2]) \r
+ strcpy(p1, p1 + 1); \r
+ else \r
+ p1[1] = '\0';\r
+\r
+ if(buffer1[strlen(buffer1) - 1] == '/' || buffer1[strlen(buffer1) - 1] == '\\')\r
+ buffer1[strlen(buffer1) - 1] = '\0';\r
\r
/* return the current directory */\r
if(!strcmp(totranslate,".") || !strcmp(totranslate,"./"))\r
\r
return (int)strlen(*translated);\r
}\r
- /* it's a relative directory name build the full directory name */\r
- else if(!strchr(totranslate, '/') && !strchr(totranslate, '\\') && !stat(totranslate, &stat_buf) && S_ISDIR(stat_buf.st_mode))\r
+ /* it's a relative directory name build the full directory name (directory)*/\r
+ else if( buffer1[0] != '.' && buffer1[0] != '/' && buffer1[1] != ':' && !stat(totranslate, &stat_buf) && S_ISDIR(stat_buf.st_mode))\r
{\r
+ for(i = 0; buffer1[i] !='\0'; i++)\r
+ {\r
+ if(buffer1[i] == '/')\r
+ buffer2[i] = '\\';\r
+ else\r
+ buffer2[i] = buffer1[i];\r
+ }\r
+ \r
+ memset(buffer1, 0, PATH_MAX + 1);\r
getcwd(buffer1, PATH_MAX + 1);\r
strcat(buffer1,"\\");\r
- strcat(buffer1,totranslate);\r
+ strcat(buffer1,buffer2);\r
\r
*translated = (char*) calloc(strlen(buffer1) + 1, sizeof(char));\r
strcpy(*translated, buffer1);\r
\r
return (int)strlen(*translated);\r
}\r
- \r
- len = (int)strlen(totranslate); \r
- \r
- strncpy(buffer1, totranslate, len); \r
- \r
- if(buffer1[strlen(buffer1) - 1] == '/' || buffer1[strlen(buffer1) - 1] == '\\')\r
- buffer1[strlen(buffer1) - 1] = '\0';\r
- \r
- while((p1 = strstr(buffer1, "//"))) \r
- if(p1[2]) \r
- strcpy(p1, p1 + 1); \r
- else \r
- p1[1] = '\0';\r
- \r
- for(i = 0, j = 0; buffer1[i] !='\0'; i++)\r
- {\r
- if(buffer1[i] == '/')\r
- {\r
- j++;\r
- \r
- if(j > 1)\r
- break;\r
- }\r
- }\r
-\r
- if(j == 1 && buffer1[i - 1] == '/')\r
- {\r
- /* perhaps it's a relative directory : `dir/' */\r
- strncpy(buffer2, buffer1, strlen(buffer1) - 1);\r
- \r
- if(!stat(buffer2, &stat_buf) && S_ISDIR(stat_buf.st_mode))\r
- {\r
- getcwd(buffer1, PATH_MAX + 1);\r
- strcat(buffer1,"\\");\r
- strcat(buffer1,buffer2);\r
-\r
- *translated = (char*) calloc(strlen(buffer1) + 1, sizeof(char));\r
- strcpy(*translated, buffer1);\r
-\r
- return (int)strlen(*translated);\r
- }\r
- else\r
- memset(buffer2, 0, PATH_MAX + 1);\r
- \r
- }\r
- \r
- if(buffer1[0] == '~') \r
+ else if(buffer1[0] == '~') \r
{\r
/* TODO */\r
*translated = NULL;\r
}\r
else if (*buffer1 == '.') \r
{\r
- _fullpath(buffer2, buffer1, sizeof(buffer1)); \r
+ _fullpath(buffer2, buffer1, sizeof(buffer1));\r
} \r
else \r
strcpy(buffer2, buffer1);\r
errno = ENOTDIR;\r
return -1;\r
}\r
- \r
+ \r
+\r
+ \r
len = (int)strlen(buffer2);\r
\r
+\r
+ \r
*translated = (char*) calloc(len + 1, sizeof(char));\r
strcpy(*translated, buffer2);\r
\r