/contrib/bind9/lib/isc/unix/include/isc/dir.h

https://bitbucket.org/freebsd/freebsd-head/ · C++ Header · 94 lines · 37 code · 20 blank · 37 comment · 0 complexity · 007afad6dca5904dae095e70976b6602 MD5 · raw file

  1. /*
  2. * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
  3. * Copyright (C) 1999-2001 Internet Software Consortium.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  10. * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  11. * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  12. * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  13. * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  14. * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15. * PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. /* $Id: dir.h,v 1.21 2007/06/19 23:47:19 tbox Exp $ */
  18. /* Principal Authors: DCL */
  19. #ifndef ISC_DIR_H
  20. #define ISC_DIR_H 1
  21. /*! \file */
  22. #include <sys/types.h> /* Required on some systems. */
  23. #include <dirent.h>
  24. #include <isc/lang.h>
  25. #include <isc/result.h>
  26. #define ISC_DIR_NAMEMAX 256
  27. #define ISC_DIR_PATHMAX 1024
  28. /*% Directory Entry */
  29. typedef struct isc_direntry {
  30. /*!
  31. * Ideally, this should be NAME_MAX, but AIX does not define it by
  32. * default and dynamically allocating the space based on pathconf()
  33. * complicates things undesirably, as does adding special conditionals
  34. * just for AIX. So a comfortably sized buffer is chosen instead.
  35. */
  36. char name[ISC_DIR_NAMEMAX];
  37. unsigned int length;
  38. } isc_direntry_t;
  39. /*% Directory */
  40. typedef struct isc_dir {
  41. unsigned int magic;
  42. /*!
  43. * As with isc_direntry_t->name, making this "right" for all systems
  44. * is slightly problematic because AIX does not define PATH_MAX.
  45. */
  46. char dirname[ISC_DIR_PATHMAX];
  47. isc_direntry_t entry;
  48. DIR * handle;
  49. } isc_dir_t;
  50. ISC_LANG_BEGINDECLS
  51. void
  52. isc_dir_init(isc_dir_t *dir);
  53. isc_result_t
  54. isc_dir_open(isc_dir_t *dir, const char *dirname);
  55. isc_result_t
  56. isc_dir_read(isc_dir_t *dir);
  57. isc_result_t
  58. isc_dir_reset(isc_dir_t *dir);
  59. void
  60. isc_dir_close(isc_dir_t *dir);
  61. isc_result_t
  62. isc_dir_chdir(const char *dirname);
  63. isc_result_t
  64. isc_dir_chroot(const char *dirname);
  65. isc_result_t
  66. isc_dir_createunique(char *templet);
  67. /*!<
  68. * Use a templet (such as from isc_file_mktemplate()) to create a uniquely
  69. * named, empty directory. The templet string is modified in place.
  70. * If result == ISC_R_SUCCESS, it is the name of the directory that was
  71. * created.
  72. */
  73. ISC_LANG_ENDDECLS
  74. #endif /* ISC_DIR_H */