/src/zziplib/zzip/mmapped.h

https://bitbucket.org/cabalistic/ogredeps/ · C++ Header · 138 lines · 86 code · 28 blank · 24 comment · 0 complexity · 8546e55c0d4f9a529d6c74aabecd299c MD5 · raw file

  1. #ifndef _ZZIP_MMAPPED_H_
  2. #define _ZZIP_MMAPPED_H_
  3. /*
  4. * NOTE: this is part of libzzipmmapped (i.e. it is not libzzip).
  5. *
  6. * simplified zip disk access using a mmapping of the whole archive.
  7. *
  8. * Author:
  9. * Guido Draheim <guidod@gmx.de>
  10. *
  11. * Copyright (c) 2003,2004 Guido Draheim
  12. * All rights reserved,
  13. * use under the restrictions of the
  14. * Lesser GNU General Public License
  15. * or alternatively the restrictions
  16. * of the Mozilla Public License 1.1
  17. */
  18. #include <zzip/types.h>
  19. #ifdef _ZZIP_DISK_FILE_STRUCT
  20. #include <zlib.h> /* z_stream */
  21. #endif
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. typedef struct zzip_disk_file ZZIP_DISK_FILE;
  26. typedef struct zzip_disk ZZIP_DISK;
  27. /* def struct zzip_disk_entry ZZIP_DISK_ENTRY; */
  28. /* we expose this structure so third party applications can augment
  29. * on them. The mmapped zip access usually just needs the two pointers
  30. * specifying the mmapped area, whereever you have that from.
  31. */
  32. struct zzip_disk
  33. {
  34. zzip_byte_t* buffer; /* start of mmapped area, the base of all seekvals */
  35. zzip_byte_t* endbuf; /* end of mmapped area, i.e. buffer + buflen */
  36. void* reserved; /* - for later extensions (might be renamed) */
  37. void* user; /* - free for applications (use this!) */
  38. long flags; /* bit 0: findfile searches case-insensitive */
  39. long mapped; /* used for mmap() wrappers of zzip/__mmap.h */
  40. long unused; /* - for later extensions (might be renamed) */
  41. long code; /* - free for applications (use this!) */
  42. };
  43. /* fnmatch search shall be case insensitive */
  44. #define ZZIP_DISK_FLAGS_MATCH_NOCASE 1
  45. #define ZZIP_DISK_FLAGS_OWNED_BUFFER 2
  46. typedef int (*zzip_strcmp_fn_t)(char*, char*);
  47. typedef int (*zzip_fnmatch_fn_t)(char*, char*, int);
  48. #define zzip_disk_extern extern
  49. zzip_disk_extern int
  50. zzip_disk_init(ZZIP_DISK* disk, void* buffer, zzip_size_t buflen);
  51. zzip_disk_extern zzip__new__ ZZIP_DISK*
  52. zzip_disk_new(void);
  53. zzip_disk_extern zzip__new__ ZZIP_DISK*
  54. zzip_disk_mmap(int fd);
  55. zzip_disk_extern int
  56. zzip_disk_munmap(ZZIP_DISK* disk);
  57. zzip_disk_extern zzip__new__ ZZIP_DISK*
  58. zzip_disk_open(char* filename);
  59. zzip_disk_extern zzip__new__ ZZIP_DISK *
  60. zzip_disk_buffer(void *buffer, size_t buflen);
  61. zzip_disk_extern int
  62. zzip_disk_close(ZZIP_DISK* disk);
  63. zzip_disk_extern ZZIP_DISK_ENTRY*
  64. zzip_disk_findfirst(ZZIP_DISK* disk);
  65. zzip_disk_extern ZZIP_DISK_ENTRY*
  66. zzip_disk_findnext(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  67. zzip_disk_extern zzip__new__ char*
  68. zzip_disk_entry_strdup_name(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  69. zzip_disk_extern zzip__new__ char*
  70. zzip_disk_entry_strdup_comment(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  71. zzip_disk_extern struct zzip_file_header*
  72. zzip_disk_entry_to_file_header(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  73. zzip_disk_extern zzip_byte_t*
  74. zzip_disk_entry_to_data(ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  75. zzip_disk_extern ZZIP_DISK_ENTRY*
  76. zzip_disk_findfile(ZZIP_DISK* disk,
  77. char* filename, ZZIP_DISK_ENTRY* after,
  78. zzip_strcmp_fn_t compare);
  79. zzip_disk_extern ZZIP_DISK_ENTRY*
  80. zzip_disk_findmatch(ZZIP_DISK* disk,
  81. char* filespec, ZZIP_DISK_ENTRY* after,
  82. zzip_fnmatch_fn_t compare, int flags);
  83. zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
  84. zzip_disk_entry_fopen (ZZIP_DISK* disk, ZZIP_DISK_ENTRY* entry);
  85. zzip_disk_extern zzip__new__ ZZIP_DISK_FILE*
  86. zzip_disk_fopen (ZZIP_DISK* disk, char* filename);
  87. zzip_disk_extern _zzip_size_t
  88. zzip_disk_fread (void* ptr, _zzip_size_t size, _zzip_size_t nmemb,
  89. ZZIP_DISK_FILE* file);
  90. zzip_disk_extern int
  91. zzip_disk_fclose (ZZIP_DISK_FILE* file);
  92. int
  93. zzip_disk_feof (ZZIP_DISK_FILE* file);
  94. #ifdef _ZZIP_DISK_FILE_STRUCT
  95. /**
  96. * typedef struct zzip_disk_file ZZIP_DISK_FILE;
  97. */
  98. struct zzip_disk_file
  99. {
  100. zzip_byte_t* buffer; /* fopen disk->buffer */
  101. zzip_byte_t* endbuf; /* fopen disk->endbuf */
  102. zzip_size_t avail; /* memorized for checks on EOF */
  103. z_stream zlib; /* for inflated blocks */
  104. zzip_byte_t* stored; /* for stored blocks */
  105. };
  106. #endif
  107. #ifdef __cplusplus
  108. }
  109. #endif
  110. #endif