diff --git a/src/sbbs3/filedat.c b/src/sbbs3/filedat.c index 4081c92c82b87af9315a7b17c4be044e6514103a..b9e121141288d84cd8c93077c80cbb7921f9baae 100644 --- a/src/sbbs3/filedat.c +++ b/src/sbbs3/filedat.c @@ -700,111 +700,6 @@ int archive_type(const char* archive, char* str, size_t size) return result; } -str_list_t list_archive_contents(const char* filename, const char* pattern, bool hash, bool sort, char* error, size_t maxerrlen) -{ - int result; - struct archive *ar; - struct archive_entry *entry; - - if((ar = archive_read_new()) == NULL) { - safe_snprintf(error, maxerrlen, "archive_read_new() returned NULL"); - return NULL; - } - archive_read_support_filter_all(ar); - archive_read_support_format_all(ar); - if((result = archive_read_open_filename(ar, filename, 10240)) != ARCHIVE_OK) { - safe_snprintf(error, maxerrlen, "archive_read_open_filename() returned %d: %s" - ,result, archive_error_string(ar)); - archive_read_free(ar); - return NULL; - } - - str_list_t list = strListInit(); - if(list == NULL) { - safe_snprintf(error, maxerrlen, "strListInit() returned NULL"); - archive_read_free(ar); - return NULL; - } - - while(1) { - result = archive_read_next_header(ar, &entry); - if(result != ARCHIVE_OK) { - if(result != ARCHIVE_EOF) { - safe_snprintf(error, maxerrlen, "archive_read_next_header() returned %d: %s" - ,result, archive_error_string(ar)); - archive_read_free(ar); - strListFree(&list); - return NULL; - } - break; - } - - const char* pathname = archive_entry_pathname(entry); - if(pathname == NULL) - continue; - - if(pattern != NULL && *pattern && !wildmatch(pathname, pattern, /* path: */false, /* case-sensitive: */false)) - continue; - - const char* type; - switch(archive_entry_filetype(entry)) { - case AE_IFREG: - type = "file"; - break; - case AE_IFLNK: - type = "link"; - break; - case AE_IFDIR: - type = "directory"; - break; - default: - continue; - } - - strListAppendFormat(&list, "[%s]", pathname); - strListAppendFormat(&list, "type=%s", type); - strListAppendFormat(&list, "size=%"PRId64, archive_entry_size(entry)); - strListAppendFormat(&list, "time=%"PRId64,archive_entry_mtime(entry)); - strListAppendFormat(&list, "mode=%d", archive_entry_mode(entry)); - strListAppendFormat(&list, "format=%s", archive_format_name(ar)); - strListAppendFormat(&list, "compression=%s", archive_filter_name(ar, 0)); - - if(hash && archive_entry_filetype(entry) == AE_IFREG) { - MD5 md5_ctx; - SHA1_CTX sha1_ctx; - uint8_t md5[MD5_DIGEST_SIZE]; - uint8_t sha1[SHA1_DIGEST_SIZE]; - uint32_t crc32 = 0; - - MD5_open(&md5_ctx); - SHA1Init(&sha1_ctx); - - const void *buff; - size_t size; - la_int64_t offset; - - for(;;) { - result = archive_read_data_block(ar, &buff, &size, &offset); - if(result != ARCHIVE_OK) - break; - crc32 = crc32i(~crc32, buff, size); - MD5_digest(&md5_ctx, buff, size); - SHA1Update(&sha1_ctx, buff, size); - } - MD5_close(&md5_ctx, md5); - SHA1Final(&sha1_ctx, sha1); - strListAppendFormat(&list, "crc32=0x%lx", crc32); - char hex[128]; - strListAppendFormat(&list, "md5=%s", MD5_hex(hex, md5)); - strListAppendFormat(&list, "sha1=%s", SHA1_hex(hex, sha1)); - } - } - archive_read_free(ar); - if(sort) - iniSortSections(&list, /* sort_keys: */FALSE); - return list; -} - str_list_t directory(const char* path) { int flags = GLOB_MARK; diff --git a/src/sbbs3/filedat.h b/src/sbbs3/filedat.h index 39bdd09908cd0ecb4f9f0d308a754f72cf502cbc..c478d93436201030b66cd374dfdaed170fd62c50 100644 --- a/src/sbbs3/filedat.h +++ b/src/sbbs3/filedat.h @@ -67,7 +67,6 @@ DLLEXPORT int file_sauce_hfields(file_t*, struct sauce_charinfo*); DLLEXPORT str_list_t directory(const char* path); DLLEXPORT long create_archive(const char* archive, const char* format ,bool with_path, str_list_t file_list, char* error, size_t maxerrlen); -DLLEXPORT str_list_t list_archive_contents(const char* archive, const char* pattern, bool hash, bool sort, char* error, size_t maxerrlen); DLLEXPORT char* cmdstr(scfg_t*, user_t*, const char* instr, const char* fpath, const char* fspec, char* cmd, size_t); DLLEXPORT long extract_files_from_archive(const char* archive, const char* outdir, const char* allowed_filename_chars ,bool with_path, long max_files, str_list_t file_list, char* error, size_t);