os_stat.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_stat.c,v 11.22 2002/07/12 18:56:56 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <sys/stat.h>
  14. #include <string.h>
  15. #endif
  16. #include "db_int.h"
  17. /*
  18.  * __os_exists --
  19.  * Return if the file exists.
  20.  *
  21.  * PUBLIC: int __os_exists __P((const char *, int *));
  22.  */
  23. int
  24. __os_exists(path, isdirp)
  25. const char *path;
  26. int *isdirp;
  27. {
  28. int ret;
  29. DWORD attrs;
  30. if (DB_GLOBAL(j_exists) != NULL)
  31. return (DB_GLOBAL(j_exists)(path, isdirp));
  32. ret = 0;
  33. do {
  34. attrs = GetFileAttributes(path);
  35. if (attrs == (DWORD)-1)
  36. ret = __os_win32_errno();
  37. } while (ret == EINTR);
  38. if (ret != 0)
  39. return (ret);
  40. if (isdirp != NULL)
  41. *isdirp = (attrs & FILE_ATTRIBUTE_DIRECTORY);
  42. return (0);
  43. }
  44. /*
  45.  * __os_ioinfo --
  46.  * Return file size and I/O size; abstracted to make it easier
  47.  * to replace.
  48.  *
  49.  * PUBLIC: int __os_ioinfo __P((DB_ENV *, const char *,
  50.  * PUBLIC:    DB_FH *, u_int32_t *, u_int32_t *, u_int32_t *));
  51.  */
  52. int
  53. __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
  54. DB_ENV *dbenv;
  55. const char *path;
  56. DB_FH *fhp;
  57. u_int32_t *mbytesp, *bytesp, *iosizep;
  58. {
  59. int ret;
  60. BY_HANDLE_FILE_INFORMATION bhfi;
  61. unsigned __int64 filesize;
  62. if (DB_GLOBAL(j_ioinfo) != NULL)
  63. return (DB_GLOBAL(j_ioinfo)(path,
  64.     fhp->fd, mbytesp, bytesp, iosizep));
  65. retry: if (!GetFileInformationByHandle(fhp->handle, &bhfi)) {
  66. if ((ret = __os_win32_errno()) == EINTR)
  67. goto retry;
  68. __db_err(dbenv,
  69.     "GetFileInformationByHandle: %s", strerror(ret));
  70. return (ret);
  71. }
  72. filesize = ((unsigned __int64)bhfi.nFileSizeHigh << 32) +
  73.     bhfi.nFileSizeLow;
  74. /* Return the size of the file. */
  75. if (mbytesp != NULL)
  76. *mbytesp = (u_int32_t)(filesize / MEGABYTE);
  77. if (bytesp != NULL)
  78. *bytesp = (u_int32_t)(filesize % MEGABYTE);
  79. /* The filesystem blocksize is not easily available. */
  80. if (iosizep != NULL)
  81. *iosizep = DB_DEF_IOSIZE;
  82. return (0);
  83. }