os_dir.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: os_dir.c,v 11.12 2002/07/12 18:56:54 bostic Exp $";
  10. #endif /* not lint */
  11. #include "db_int.h"
  12. /*
  13.  * __os_dirlist --
  14.  * Return a list of the files in a directory.
  15.  */
  16. int
  17. __os_dirlist(dbenv, dir, namesp, cntp)
  18. DB_ENV *dbenv;
  19. const char *dir;
  20. char ***namesp;
  21. int *cntp;
  22. {
  23. struct _finddata_t fdata;
  24. #ifdef _WIN64
  25. intptr_t dirhandle;
  26. #else
  27. long dirhandle;
  28. #endif
  29. int arraysz, cnt, finished, ret;
  30. char **names, filespec[MAXPATHLEN];
  31. if (DB_GLOBAL(j_dirlist) != NULL)
  32. return (DB_GLOBAL(j_dirlist)(dir, namesp, cntp));
  33. (void)snprintf(filespec, sizeof(filespec), "%s/*", dir);
  34. if ((dirhandle = _findfirst(filespec, &fdata)) == -1)
  35. return (__os_get_errno());
  36. names = NULL;
  37. finished = 0;
  38. for (arraysz = cnt = 0; finished != 1; ++cnt) {
  39. if (cnt >= arraysz) {
  40. arraysz += 100;
  41. if ((ret = __os_realloc(dbenv,
  42.     arraysz * sizeof(names[0]), &names)) != 0)
  43. goto nomem;
  44. }
  45. if ((ret = __os_strdup(dbenv, fdata.name, &names[cnt])) != 0)
  46. goto nomem;
  47. if (_findnext(dirhandle, &fdata) != 0)
  48. finished = 1;
  49. }
  50. _findclose(dirhandle);
  51. *namesp = names;
  52. *cntp = cnt;
  53. return (0);
  54. nomem: if (names != NULL)
  55. __os_dirfree(dbenv, names, cnt);
  56. return (ret);
  57. }
  58. /*
  59.  * __os_dirfree --
  60.  * Free the list of files.
  61.  */
  62. void
  63. __os_dirfree(dbenv, names, cnt)
  64. DB_ENV *dbenv;
  65. char **names;
  66. int cnt;
  67. {
  68. if (DB_GLOBAL(j_dirfree) != NULL) {
  69. DB_GLOBAL(j_dirfree)(names, cnt);
  70. return;
  71. }
  72. while (cnt > 0)
  73. __os_free(dbenv, names[--cnt]);
  74. __os_free(dbenv, names);
  75. }