ql_zip.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. /*================================================================
  2. Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
  3. Quectel Wireless Solutions Proprietary and Confidential.
  4. =================================================================*/
  5. /*=================================================================
  6. EDIT HISTORY FOR MODULE
  7. This section contains comments describing changes made to the module.
  8. Notice that changes are listed in reverse chronological order.
  9. WHEN WHO WHAT, WHERE, WHY
  10. ------------ ------- -------------------------------------------------------------------------------
  11. =================================================================*/
  12. #ifndef QL_ZIP_H
  13. #define QL_ZIP_H
  14. #include "ql_api_common.h"
  15. #include "ql_uart.h"
  16. #include "time.h"
  17. #include <time.h>
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. /*===========================================================================
  22. * Macro Definition
  23. ===========================================================================*/
  24. typedef enum
  25. {
  26. QL_FILE_ZIP_OK = 0,
  27. QL_FILE_ZIP_INVALID_FILE_NAME = (QL_COMPONENT_STORAGE_ZIP << 16) | 400,
  28. QL_FILE_ZIP_FILE_NOT_FOUND = (QL_COMPONENT_STORAGE_ZIP << 16) | 401,
  29. QL_FILE_ZIP_DEL_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 402,
  30. QL_FILE_ZIP_UNZIP_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 403,
  31. QL_FILE_ZIP_CREATE_ZIP_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 404,
  32. QL_FILE_ZIP_ADD_FILE_ZIP_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 405,
  33. QL_FILE_ZIP_ADD_FOLDER_ZIP_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 406,
  34. QL_FILE_ZIP_CLOSE_ERROR = (QL_COMPONENT_STORAGE_ZIP << 16) | 407,
  35. QL_FILE_ZIP_UNZIP_NOSPACE = (QL_COMPONENT_STORAGE_ZIP << 16) | 408,
  36. QL_FILE_ZIP_PARAM_ERR = (QL_COMPONENT_STORAGE_ZIP << 16) | 409,
  37. }ql_zip_errcode_e;
  38. /*===========================================================================
  39. * Typedef
  40. ===========================================================================*/
  41. typedef unsigned long DWORD;
  42. typedef DWORD ZRESULT;
  43. typedef struct HZIP
  44. {
  45. int unused;
  46. }*HZIP;
  47. typedef enum
  48. {
  49. DELETE_COMPRESS_ENABLE,
  50. DELETE_COMPRESS_DISABLE
  51. }ql_unzip_del_type_e;
  52. typedef struct
  53. {
  54. ql_unzip_del_type_e delete_compress;
  55. }ql_zip_option_t;
  56. #define QL_UNZIP_ITEM_SIZE 32
  57. #define QL_UNZIP_FILE_PATH_LEN 128
  58. typedef enum
  59. {
  60. QL_UNZIP_FILE = 0, //当前的item是文件
  61. QL_UNZIP_DIR, //当前的item是目录
  62. }ql_unzip_file_type_e;
  63. typedef struct
  64. {
  65. void *item_data; //实际指向客户传入的内存地址
  66. int item_len; //当前item的长度
  67. char file_path[QL_UNZIP_FILE_PATH_LEN]; //当前文件的文件路径名称
  68. ql_unzip_file_type_e file_type; //item文件类型
  69. }ql_unzip_item_data_s;
  70. typedef enum
  71. {
  72. QL_UNZIP_TO_FILE = 0, //解压到文件系统里
  73. QL_UNZIP_TO_MEMERY, //解压到内存里
  74. }ql_unzip_type_e;
  75. //用来存储unzip过程中,解压数据到内存里
  76. typedef struct
  77. {
  78. void *data; //输入:使用解码到内存时,内存地址
  79. int total_len; //输入:内存总大小
  80. int used_len; //输出:当前内存已使用的长度
  81. ql_unzip_item_data_s item[QL_UNZIP_ITEM_SIZE]; //输出:保存的item信息,
  82. int item_num; //输出:实际item个数
  83. }ql_unzip_mem_data_s;
  84. typedef struct
  85. {
  86. char *path_name; //解压文件存放目录,默认解压到同级目录.
  87. int mode; //0不覆盖 1 覆盖.
  88. }ql_unzip_file_data_s;
  89. typedef enum
  90. {
  91. QL_FILE_ZIP_DELETE_COMPRESS_FILE=0,//设置解压完成后是否删除压缩文件
  92. }QL_ZIP_OPT_E;
  93. /*===========================================================================
  94. * Functions declaration
  95. ===========================================================================*/
  96. /*****************************************************************
  97. * Function: ql_fs_unzip
  98. *
  99. * Description: 对文件系统中的压缩文件进行解压
  100. *
  101. * Parameters:
  102. * unZipPath [in] 待解压的文件名.
  103. * path_name [in] 解压文件存放目录,默认解压到同级目录.
  104. * mode [in] 解压后有同名文件时是否覆盖
  105. 0不覆盖 1 覆盖.
  106. *
  107. * Return:
  108. * 0 解压成功。
  109. * other 错误码。
  110. *
  111. *****************************************************************/
  112. int ql_fs_unzip(const char *unZipPath,char *path_name,int mode);
  113. /*****************************************************************
  114. * Function: ql_fs_unzip_ex
  115. *
  116. * Description: 对文件系统中的压缩文件进行解压
  117. *
  118. * Parameters:
  119. * unZipPath [in] 待解压的文件名.
  120. * unzip_type [in] 为QL_UNZIP_TO_FILE时,unzip_data为ql_unzip_file_data_s结构体指针。为QL_UNZIP_TO_MEMERY,unzip_data为ql_unzip_mem_data_s结构体指针
  121. * unzip_data [in] 根据unzip_type的类型,传入不同的参数
  122. *
  123. * Return:
  124. * 0 解压成功。
  125. * other 错误码。
  126. *
  127. *****************************************************************/
  128. int ql_fs_unzip_ex(const char *unZipPath,ql_unzip_type_e unzip_type,void *unzip_data);
  129. /*****************************************************************
  130. * Function: ql_fs_zip_create
  131. *
  132. * Description:
  133. * 创建一个空的zip。
  134. *
  135. * Parameters:
  136. * fn [in] 某路径下压缩文件名,无路径默认当前工作目录。
  137. * password [in] password默认无效,无需关注。
  138. * errcode [in] 错误码。
  139. *
  140. * Return:
  141. * HZIP:zip的文件指针。
  142. *
  143. *****************************************************************/
  144. HZIP ql_fs_zip_create(const char *unZipPath,const char *password,int *errcode);
  145. /*****************************************************************
  146. * Function: ql_fs_zip_add_file
  147. *
  148. * Description:
  149. * 将一个文件添加进行压缩。
  150. *
  151. * Parameters:
  152. * hz [in] 创建或者打开zip的文件指针。
  153. * dstzn [in] 在zip文件中显示的文件名。
  154. * fn [in] 想要压缩的文件名。
  155. *
  156. * Return:
  157. * 0 成功。
  158. * other 错误码。
  159. *
  160. *****************************************************************/
  161. int ql_fs_zip_add_file(HZIP hz,const TCHAR *dstzn, const TCHAR *fn);
  162. /*****************************************************************
  163. * Function: ql_fs_zip_add_folder
  164. *
  165. * Description:
  166. * 将整个文件夹添加进行压缩。
  167. *
  168. * Parameters:
  169. * hz [in] 创建或者打开zip的文件指针。
  170. * dstzn [in] 添加压缩的文件夹名。
  171. *
  172. * Return:
  173. * 0 成功。
  174. * other 错误码。
  175. *
  176. *****************************************************************/
  177. int ql_fs_zip_add_folder(HZIP hz,const TCHAR *dstzn);
  178. /*****************************************************************
  179. * Function: ql_fs_zip_setopt
  180. *
  181. * Description:
  182. * 配置压缩功能参数。
  183. *
  184. * Parameters:
  185. * opt_tag [in] zip中配置的参数处理类型。
  186. * opt_val [in] 配置的参数。
  187. *
  188. * Return:
  189. * 0 成功。
  190. * other 错误码。
  191. *
  192. *****************************************************************/
  193. int ql_fs_zip_setopt(QL_ZIP_OPT_E opt_tag, void *opt_val);
  194. /*****************************************************************
  195. * Function: ql_fs_zip_close
  196. *
  197. * Description:
  198. * 关闭压缩文件。
  199. * 不可重复调用该函数去关闭一个已经成功关闭的hz。
  200. *
  201. * Parameters:
  202. * hz [in] 要操作的zip文件指针。
  203. *
  204. * Return:
  205. * 0 成功。
  206. * other 错误码。
  207. *
  208. *****************************************************************/
  209. int ql_fs_zip_close(HZIP hz);
  210. /*****************************************************************
  211. * Function: ql_fs_zip_close_ex
  212. *
  213. * Description:
  214. * 关闭压缩文件。
  215. * 不可重复调用该函数去关闭一个已经成功关闭的hz。
  216. *
  217. * Parameters:
  218. * hz [in] 要操作的zip文件指针的指针。
  219. *
  220. * Return:
  221. * 0 成功。
  222. * other 错误码。
  223. *
  224. *****************************************************************/
  225. int ql_fs_zip_close_ex(HZIP *hz);
  226. #ifdef __cplusplus
  227. } /*"C" */
  228. #endif
  229. #endif /* QL_ZIP_H */