// 递归创建路径:直接从 ilog移植过来 int iposix_path_mkdir(const char *path, int mode) { int i, len; char str[IPOSIX_MAXBUFF]; len = (int)strlen(path); if (len > IPOSIX_MAXPATH) len = IPOSIX_MAXPATH; memcpy(str, path, len); str[len] = 0; #ifdef _WIN32 for (i = 0; i < len; i++) { if (str[i] == '/') str[i] = '\\'; } #endif for (i = 0; i < len; i++) { if (str[i] == '/' || str[i] == '\\') { str[i] = '\0'; if (iposix_access(str, F_OK) != 0) { iposix_mkdir(str, mode); } str[i] = IPATHSEP; } } if (len > 0 && iposix_access(str, 0) != 0) { iposix_mkdir(str, mode); } return 0; }
int install_mkdir (const char *dir, unsigned int mode) { #if INSTALL_OS_TYPE == INSTALL_OS_POSIX return iposix_mkdir (dir, mode); #endif #if INSTALL_OS_TYPE == INSTALL_OS_WIN32 return iwin32_mkdir (dir, mode); #endif }