file.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "__virtualmath.h"
  2. /**
  3. * @param dir 文件地址
  4. * @return 0-错误, 1-普通文件, 2-目录
  5. */
  6. int checkFileReadable(char *dir){
  7. struct stat my_stat;
  8. int status;
  9. if (dir == NULL)
  10. return 3;
  11. status = stat(dir, &my_stat);
  12. if (status != 0)
  13. return 3;
  14. else if (S_ISREG(my_stat.st_mode)) // 普通文件
  15. return 1;
  16. else if (S_ISDIR(my_stat.st_mode))
  17. return 2;
  18. else
  19. return 3;
  20. }
  21. char *splitDir(char * dir){
  22. char *slash = NULL;
  23. char *point = NULL;
  24. char *return_char = NULL;
  25. if (dir[memStrlen(dir) - 1] == SEP_CH)
  26. dir[memStrlen(dir) - 1] = NUL;
  27. if ((slash = strrchr(dir, SEP_CH)) == NULL)
  28. slash = dir;
  29. else
  30. slash ++;
  31. if ((point = strchr(dir, '.')) != NULL)
  32. *point = 0;
  33. return_char = memStrcpy(slash);
  34. if (point != NULL)
  35. *point = '.';
  36. if (!isalpha(*return_char) && *return_char != '_')
  37. return_char = memStrcat("_", return_char, false, true);
  38. for (char *tmp = return_char; *tmp != 0;tmp++)
  39. if (!isalnum(*tmp) &&'_' != *tmp)
  40. *tmp = '_';
  41. return return_char;
  42. }
  43. char *findPath(char **path, char *env, bool need_free) { // env 必须以 SEP 结尾
  44. #ifdef __linux
  45. if (**path != SEP_CH) {
  46. #else
  47. if (!(isupper(**path) && (*path)[1] == ':')) {
  48. #endif
  49. *path = memStrcat(env, *path, false, need_free); // 调整为相对路径模式
  50. }
  51. return *path;
  52. }