#include <com.h>\r
\r
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
+\r
/*#include <stdlib.h>\r
#include <string.h>\r
\r
else \r
p1[1] = '\0';\r
\r
- \r
- \r
if (buffer1[0] == '~') \r
{\r
for (p2 = buffer2, p1 = buffer1 + 1; *p1 && (*p1 != '/'); *(p2++) = *(p1++));\r
return len;\r
}\r
#else\r
-int\r
+/*int\r
getpath(const char* file, char** path)\r
{\r
DWORD len;\r
char* part = NULL;\r
char buffer[PATH_MAX + 1] = {0}; \r
struct stat info = {0};\r
+\r
\r
len = GetFullPathName(file, PATH_MAX, buffer, &part );\r
\r
*path = NULL;\r
return -1;\r
}\r
-\r
\r
if(stat(buffer, &info) || !S_ISREG(info.st_mode))\r
{\r
*path = strncpy(*path, buffer, strlen(buffer) - strlen(part) - 1);\r
\r
return (int)(strlen(buffer) - strlen(part) -1);\r
+}*/\r
+\r
+int\r
+getpath(const char* file, char** path)\r
+{\r
+ char buf1[PATH_MAX + 1] = {0};\r
+ char buf2[PATH_MAX + 1] = {0};\r
+ struct stat info = {0};\r
+\r
+ char* delimiter;\r
+ \r
+ if(!file)\r
+ {\r
+ *path = NULL;\r
+ return -1;\r
+ }\r
+\r
+ delimiter = strrchr(file,'/');\r
+\r
+ if(!delimiter)\r
+ delimiter = strrchr(file,'\\');\r
+\r
+ if(!delimiter)\r
+ {\r
+ *path = getcwd(NULL,0);\r
+ }\r
+ else\r
+ {\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
+ free(*path);\r
+ *path = NULL;\r
+ errno = ENOENT;\r
+ return -1;\r
+ } \r
+ \r
+ return (int) strlen(*path);\r
}\r
\r
+\r
int\r
translatepath(const char* totranslate, char** translated)\r
{\r
+ char buffer1[PATH_MAX + 1] = {0}; \r
+ char buffer2[PATH_MAX + 1] = {0};\r
+ char *p1;\r
+ int i, len;\r
+ \r
+ struct stat stat_buf = {0};\r
\r
- return 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
+ *translated = getcwd(NULL,0);\r
+ return (int)strlen(*translated);\r
+ }\r
+ /* return the previous directory */\r
+ else if(!strcmp(totranslate,"..") || !strcmp(totranslate,"../"))\r
+ {\r
+ getcwd(buffer1, PATH_MAX + 1);\r
+ p1 = strrchr(buffer1, '\\');\r
+ *translated = (char*) calloc((p1 - buffer1) + 1, sizeof(char));\r
+ strncpy(*translated, buffer1, (p1 - buffer1));\r
+ \r
+ return (int)strlen(*translated);\r
+ }\r
+ /* return the root directory */\r
+ else if(!strcmp(totranslate, "/"))\r
+ {\r
+ *translated = getcwd(NULL,0);\r
+ (*translated)[2] = '\0';\r
+\r
+ return (int)strlen(*translated);\r
+ }\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,buffer2);\r
+ \r
+ *translated = (char*) calloc(strlen(buffer1) + 1, sizeof(char));\r
+ strcpy(*translated, buffer1);\r
+\r
+ return (int)strlen(*translated);\r
+ }\r
+ else if(buffer1[0] == '~') \r
+ {\r
+ /* TODO */\r
+ *translated = NULL;\r
+ errno = ENOSYS;\r
+ return -1;\r
+ }\r
+ else if (*buffer1 == '.') \r
+ {\r
+ _fullpath(buffer2, buffer1, sizeof(buffer1));\r
+ } \r
+ else \r
+ strcpy(buffer2, buffer1);\r
+ \r
+ if(stat(buffer2, &stat_buf) || !S_ISDIR(stat_buf.st_mode))\r
+ {\r
+ *translated = NULL;\r
+ errno = ENOTDIR;\r
+ return -1;\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
+ if(!(*translated))\r
+ {\r
+ *translated = NULL;\r
+ return -1;\r
+ }\r
\r
+ return len;\r
+}\r
#endif\r
\r
\r