summaryrefslogtreecommitdiff
path: root/src/htszlib.c
diff options
context:
space:
mode:
authorXavier Roche <xroche@users.noreply.github.com>2012-03-19 12:55:42 +0000
committerXavier Roche <xroche@users.noreply.github.com>2012-03-19 12:55:42 +0000
commit844ecc37072d515513177c65a8c9dc35c9cdfc1a (patch)
tree733b1fe039c0c37095a594b66d5076f3f5a0153d /src/htszlib.c
parent25adbdabb47499fe641c7bd9595024ff82667058 (diff)
httrack 3.33.16
Diffstat (limited to 'src/htszlib.c')
-rw-r--r--src/htszlib.c68
1 files changed, 64 insertions, 4 deletions
diff --git a/src/htszlib.c b/src/htszlib.c
index faf4e88..19e3abb 100644
--- a/src/htszlib.c
+++ b/src/htszlib.c
@@ -35,13 +35,12 @@ Please visit our Website: http://www.httrack.com
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
+/* Internal engine bytecode */
+#define HTS_INTERNAL_BYTECODE
/* specific definitions */
-#include <stdio.h>
-#include <stdlib.h>
#include "htsbase.h"
#include "htscore.h"
-
#include "htszlib.h"
#if HTS_USEZLIB
@@ -65,7 +64,7 @@ int hts_zunpack(char* filename,char* newfile) {
if (fpout) {
int nr;
do {
- char buff[1024];
+ char BIGSTK buff[1024];
nr=gzread (gz, buff, 1024);
if (nr>0) {
size+=nr;
@@ -84,4 +83,65 @@ int hts_zunpack(char* filename,char* newfile) {
return -1;
}
+int hts_extract_meta(char* path) {
+ unzFile zFile = unzOpen(fconcat(path,"hts-cache/new.zip"));
+ zipFile zFileOut = zipOpen(fconcat(path,"hts-cache/meta.zip"), 0);
+ if (zFile != NULL && zFileOut != NULL) {
+ if (unzGoToFirstFile(zFile) == Z_OK) {
+ zip_fileinfo fi;
+ unz_file_info ufi;
+ char BIGSTK filename[HTS_URLMAXSIZE * 4];
+ char BIGSTK comment[8192];
+ int entries = 0;
+ memset(comment, 0, sizeof(comment)); // for truncated reads
+ memset(&fi, 0, sizeof(fi));
+ memset(&ufi, 0, sizeof(ufi));
+ do {
+ int readSizeHeader;
+ filename[0] = '\0';
+ comment[0] = '\0';
+
+ if (unzOpenCurrentFile(zFile) == Z_OK) {
+ if (
+ (readSizeHeader = unzGetLocalExtrafield(zFile, comment, sizeof(comment) - 2)) > 0
+ &&
+ unzGetCurrentFileInfo(zFile, &ufi, filename, sizeof(filename) - 2, NULL, 0, NULL, 0) == Z_OK
+ )
+ {
+ comment[readSizeHeader] = '\0';
+ fi.dosDate = ufi.dosDate;
+ fi.internal_fa = ufi.internal_fa;
+ fi.external_fa = ufi.external_fa;
+ if (zipOpenNewFileInZip(zFileOut,
+ filename,
+ &fi,
+ NULL,
+ 0,
+ NULL,
+ 0,
+ NULL, /* comment */
+ Z_DEFLATED,
+ Z_DEFAULT_COMPRESSION) == Z_OK)
+ {
+ if (zipWriteInFileInZip(zFileOut, comment, (int) strlen(comment)) != Z_OK) {
+ }
+ if (zipCloseFileInZip(zFileOut) != Z_OK) {
+ }
+ }
+ }
+ unzCloseCurrentFile(zFile);
+ }
+ } while( unzGoToNextFile(zFile) == Z_OK );
+ }
+ zipClose(zFileOut, "Meta-data extracted by HTTrack/"HTTRACK_VERSION);
+ unzClose(zFile);
+ return 1;
+ }
+ return 0;
+}
+
+#else
+
+#error HTS_USEZLIB not defined
+
#endif