From c758772f93b2f74acfaacbe09f71d3b6e94a382a Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 27 Mar 2004 04:37:47 +0000 Subject: 0.2-alpha --- README | 37 ++ gui/Makefile | 3 + src/main.c | 34 +- tgeb/Makefile | 2 +- tgeb/anbieter.c | 60 +- tgeb/ausland.c | 41 +- tgeb/common.c | 102 ++-- tgeb/shlib_version | 2 +- tgeb/tarife.c | 91 ++- tgeb/tgebdat.h | 63 +- tgeb/tgebup.h | 2 +- tgeb/unzip.c | 1647 ++++++++++++++++++++++++++-------------------------- tgeb/unzip.h | 501 ++++++++-------- tgeb/update.c | 44 +- 14 files changed, 1400 insertions(+), 1229 deletions(-) create mode 100644 README create mode 100644 gui/Makefile diff --git a/README b/README new file mode 100644 index 0000000..f0edfcc --- /dev/null +++ b/README @@ -0,0 +1,37 @@ +$Id$ + +TGeb parasite 1.0 + +About: + Select the cheapest phone provider in Germany. + +Install: + make + make install + +Usage: + tgeb [-CRP9nrfo12O] [-h ] [-q ] [-u] [-?] + + -C Call-by-Call (default) + -R Call-by-Call with registration + -P Preselect + -9 with 0190 (default - without) + -n Nah + -r Reg. 50km + -f Fern (default) + -o Ort + -1 D1 + -2 D2 + -e E+ + -O o2 + -h hour (default - now) + -q output quantity (default - 3) + -u update db + -? usage + +Aknowlegments: + http://www.billiger-telefonieren.de/ + - databases + + http://www.winimage.com/zLibDll/unzip.html + - Unzip library diff --git a/gui/Makefile b/gui/Makefile new file mode 100644 index 0000000..6ae99fb --- /dev/null +++ b/gui/Makefile @@ -0,0 +1,3 @@ +# $Id$ + +.include diff --git a/src/main.c b/src/main.c index f7fc417..3b2fcc0 100644 --- a/src/main.c +++ b/src/main.c @@ -25,27 +25,27 @@ #include extern char *__progname; -const char *copyright = "$ TGeb parasite 0.1 -" \ +const char *copyright = "$ TGeb parasite 0.2 -" \ " Copyright (c) 2004 demon $"; void usage(void); -void prdt(struct an_d *, struct ta_d *); +void prdt(AN_D *, TA_D *); int main(int argc, char **argv) { - struct an *an; - struct ta *ta; - struct au *au; - struct sorted sd; + AN *an; + TA *ta; + AU *au; + SORTED *sd; char ch; int reg = 0; int flags = 0; time_t tval = time(NULL); struct tm *tm = localtime(&tval); int time = tm->tm_hour; - int quant = 3; - int i; + int quant = 3; + int i; while ((ch = getopt(argc, argv, "CRP9nrfo12eONE?h:q:u")) != -1) switch (ch) { @@ -124,23 +124,29 @@ main(int argc, char **argv) au = tgeb_read_au("ausland.dat"); ta = tgeb_read_ta("tarife.dat", au); - if (an->e_q != ta->q) + if (an->e_q != ta->q) { errx(1, "database missmatch - obtain new files"); - + } sd = tgeb_select(ta, an, reg, flags, time); - for (i = 0; i < sd.q; i++) { - prdt(&an->e[sd.id[i]], sd.data[i]); + for (i = 0; i < sd->q; i++) { + prdt(&an->e[sd->id[i]], sd->data[i]); if ((i + 1) >= quant) break; } + tgeb_free_sd(sd); + + tgeb_free_ta(ta); + tgeb_free_au(au); + tgeb_free_an(an); + exit(0); return 0; } void -prdt(struct an_d * an_d, struct ta_d * ta_d) +prdt(AN_D * an_d, TA_D * ta_d) { printf("(%.2u)\tPrefix:\t%s\n" "\tName:\t%s" @@ -150,7 +156,7 @@ prdt(struct an_d * an_d, struct ta_d * ta_d) an_d->h->name, an_d->serv); printf("\tValid:\t%.2u:00 - %.2u:00 h\n", - ta_d->prev ? ta_d->prev->time : (char)NULL, + ta_d->prev ? ta_d->prev->time : (char) NULL, ta_d->time); printf("\tFee:\t%.2f ct/min" " + %.2f ct\n" diff --git a/tgeb/Makefile b/tgeb/Makefile index 42630c3..c4b5a34 100644 --- a/tgeb/Makefile +++ b/tgeb/Makefile @@ -3,7 +3,7 @@ LIB= tgeb SRCS= anbieter.c ausland.c tarife.c common.c update.c unzip.c HDRS= tgebdat.h tgebup.h -#CFLAGS+= -I../unzip +CFLAGS+= -Wall -DDEBUG NOMAN= NOPROFILE= NOPIC= diff --git a/tgeb/anbieter.c b/tgeb/anbieter.c index 575ed03..2e56a8d 100644 --- a/tgeb/anbieter.c +++ b/tgeb/anbieter.c @@ -18,23 +18,25 @@ #include #include #include +#include #include "tgebdat.h" -static void rhdr_an(struct an *, FILE *); /* read header */ -static void rent_an(struct an *, FILE *); /* read entries */ -static void resort_an(struct an *); +static void rhdr_an(AN *, FILE *); /* read header */ +static void rent_an(AN *, FILE *); /* read entries */ +static void resort_an(AN *); -struct an * +AN * tgeb_read_an(char *file) { - struct an *an; + AN *an; FILE *fd; if (!(fd = fopen(file, "r"))) err(1, "fopen %s", file); - if (!(an = (struct an *) malloc(sizeof(struct an)))) + if (!(an = malloc(sizeof(AN)))) err(1, "malloc"); + bzero(an, sizeof(AN)); rhdr_an(an, fd); rent_an(an, fd); @@ -44,12 +46,12 @@ tgeb_read_an(char *file) } void -rhdr_an(struct an * an, FILE * fd) +rhdr_an(AN * an, FILE * fd) { int i; fread(&an->q, sizeof(an->q), 1, fd); - if (!(an->h = (struct an_hdr *) calloc(an->q, sizeof(struct an_hdr)))) + if (!(an->h = calloc(an->q, sizeof(AN_HDR)))) err(1, "malloc"); fseek(fd, 2, SEEK_SET); @@ -64,7 +66,7 @@ rhdr_an(struct an * an, FILE * fd) } void -rent_an(struct an * an, FILE * fd) +rent_an(AN * an, FILE * fd) { int i, j; @@ -72,8 +74,7 @@ rent_an(struct an * an, FILE * fd) for (i = 0; i < an->q; i++) { fseek(fd, an->h[i].off, SEEK_SET); fread(&an->h[i].q, sizeof(an->h[i].q), 1, fd); - if (!(an->h[i].d = (struct an_d *) - calloc(an->h[i].q, sizeof(struct an_d)))) + if (!(an->h[i].d = calloc(an->h[i].q, sizeof(AN_D)))) err(1, "malloc"); for (j = 0; j < an->h[i].q; j++) { an->h[i].d[j].h = &an->h[i]; @@ -109,16 +110,45 @@ rent_an(struct an * an, FILE * fd) } void -resort_an(struct an * an) +resort_an(AN * an) { int i, j; - - if (!(an->e = (struct an_d *) calloc(an->e_q, sizeof(struct an_d)))) + if (!(an->e = calloc(an->e_q, sizeof(AN_D)))) err(1, "malloc"); - for (i = 0; i < an->e_q; i++) { + for (i = 0; i < an->q; i++) { for (j = 0; j < an->h[i].q; j++) { an->e[an->h[i].d[j].id - 1] = an->h[i].d[j]; } } return; } + +void +tgeb_free_an(AN * an) +{ + int i, j; + + free(an->e); + for (i = 0; i < an->q; i++) { + for (j = 0; j < an->h[i].q; j++) { + free(an->h[i].d[j].serv); + free(an->h[i].d[j].pref); + free(an->h[i].d[j].valf); + free(an->h[i].d[j].valt); + free(an->h[i].d[j].url); + free(an->h[i].d[j].url2); + free(an->h[i].d[j].phone); + free(an->h[i].d[j].mail); + free(an->h[i].d[j].x); + free(an->h[i].d[j].rurl); + free(an->h[i].d[j].rfax); + } + free(an->h[i].name); + free(an->h[i].mail); + free(an->h[i].url); + free(an->h[i].d); + } + free(an->h); + free(an); + return; +} diff --git a/tgeb/ausland.c b/tgeb/ausland.c index f7e32a3..0a6deb3 100644 --- a/tgeb/ausland.c +++ b/tgeb/ausland.c @@ -18,22 +18,24 @@ #include #include #include +#include #include "tgebdat.h" -static void rhdr_au(struct au *, FILE *); /* read header */ -static void rent_au(struct au *, FILE *); /* read entries */ +static void rhdr_au(AU *, FILE *); /* read header */ +static void rent_au(AU *, FILE *); /* read entries */ -struct au * +AU * tgeb_read_au(char *file) { - struct au *au; + AU *au; FILE *fd; if (!(fd = fopen(file, "r"))) err(1, "fopen %s", file); - if (!(au = (struct au *) malloc(sizeof(struct au)))) + if (!(au = malloc(sizeof(AU)))) err(1, "malloc"); + bzero(au, sizeof(AU)); rhdr_au(au, fd); rent_au(au, fd); @@ -43,7 +45,7 @@ tgeb_read_au(char *file) } void -rhdr_au(struct au * au, FILE * fd) +rhdr_au(AU * au, FILE * fd) { fread(&au->l, sizeof(au->l), 1, fd); fread(&au->q, sizeof(au->q), 1, fd); @@ -51,21 +53,18 @@ rhdr_au(struct au * au, FILE * fd) } void -rent_au(struct au * au, FILE * fd) +rent_au(AU * au, FILE * fd) { int i, j; - if (!(au->d = (struct au_d *) - calloc(au->l, sizeof(struct au_d)))) + if (!(au->d = calloc(au->l, sizeof(AU_D)))) err(1, "malloc"); - if (!(au->max = (unsigned short *) - calloc(au->q, sizeof(unsigned short)))) + if (!(au->max = calloc(au->q, sizeof(unsigned short)))) err(1, "malloc"); fseek(fd, 4, SEEK_SET); for (i = 0; i < au->l; i++) { - au->d[i].id = (unsigned short *) - calloc(au->q, sizeof(unsigned short)); + au->d[i].id = calloc(au->q, sizeof(unsigned short)); for (j = 0; j < au->q; j++) { fread(&au->d[i].id[j], sizeof(au->d[i].id[j]), 1, fd); if (au->d[i].id[j] > au->max[j]) @@ -79,3 +78,19 @@ rent_au(struct au * au, FILE * fd) } return; } + +void +tgeb_free_au(AU * au) +{ + int i; + + for (i = 0; i < au->l; i++) { + free(au->d[i].id); + free(au->d[i].land); + free(au->d[i].dial); + } + free(au->d); + free(au->max); + free(au); + return; +} diff --git a/tgeb/common.c b/tgeb/common.c index 22625c8..baf8a8a 100644 --- a/tgeb/common.c +++ b/tgeb/common.c @@ -21,14 +21,13 @@ #include #include "tgebdat.h" -struct sort { - int id; - float fee; -}; +typedef struct tosort { + int id; + float fee; +} TOSORT; static int compare(const void *val1, const void *val2); -static struct ta_d * selectdt(struct ta_d * d, int time); -static void prdt(struct an_d * an_d, struct ta_d * ta_d); +static TA_D *selectdt(TA_D * d, int time); void _tgeb_sread(char **data, FILE * fd) @@ -36,60 +35,85 @@ _tgeb_sread(char **data, FILE * fd) unsigned short len; fread(&len, sizeof(len), 1, fd); - if (!(*data = (char *) calloc(len + 1, sizeof(**data)))) + if (!(*data = calloc(len + 1, sizeof(**data)))) err(1, "malloc"); fread(*data, sizeof(**data), len, fd); return; } -struct sorted -tgeb_select(struct ta * ta, struct an * an, +SORTED * +tgeb_select(TA * ta, AN * an, int reg, int flags, int time) { - int i; - int q = 0; - struct sort *s = (struct sort *) calloc(an->e_q, sizeof(struct sort)); - struct sorted sd; - - for (i = 0; i < an->e_q; i++) { - if (!(flags & an->e[i].type)) - continue; - if (!((flags & T_0190) || strncmp("0190", an->e[i].pref, 4))) - continue; - if (ta->h[i].in[reg].off) { - s[q].id = i; - s[q].fee = (selectdt(ta->h[i].in[reg].data, time))->fee; - q++; - } - } - qsort(s, q, sizeof(*s), compare); - sd.q = q; - if (!(sd.id = calloc(q, sizeof(sd.id)))) + int i; + int q = 0; + TOSORT *s; + SORTED *sd; + + if (!(s = calloc(an->e_q, sizeof(TOSORT)))) + err(1, "malloc"); + + for (i = 0; i < an->e_q; i++) { + if (!(flags & an->e[i].type)) + continue; + if (!((flags & T_0190) || strncmp("0190", an->e[i].pref, 4))) + continue; + if (ta->h[i].in[reg].off) { + s[q].id = i; + s[q].fee = (selectdt(ta->h[i].in[reg].data, time))->fee; + q++; + } + } + qsort(s, q, sizeof(TOSORT), compare); + + if (!(sd = malloc(sizeof(SORTED)))) err(1, "malloc"); - if (!(sd.data = calloc(q, sizeof(sd.data)))) + bzero(sd, sizeof(SORTED)); + + sd->q = q; + if (!(sd->id = calloc(q, sizeof(sd->id)))) + err(1, "malloc"); + if (!(sd->data = calloc(q, sizeof(sd->data)))) err(1, "malloc"); - for (i = 0; i < q; i++) { - sd.id[i] = s[i].id; - sd.data[i] = selectdt(ta->h[s[i].id].in[reg].data, time); - } + for (i = 0; i < q; i++) { + sd->id[i] = s[i].id; + sd->data[i] = selectdt(ta->h[s[i].id].in[reg].data, time); + } - free(s); - return sd; + free(s); + return sd; } int compare(const void *val1, const void *val2) { - struct sort *s1 = (struct sort *) val1; - struct sort *s2 = (struct sort *) val2; + TOSORT *s1 = (TOSORT *) val1; + TOSORT *s2 = (TOSORT *) val2; return ((s1->fee > s2->fee) ? 1 : (s1->fee < s2->fee) ? -1 : 0); } -struct ta_d * -selectdt(struct ta_d * d, int time) +TA_D * +selectdt(TA_D * d, int time) { if (time >= d->time) return (selectdt(d->next, time)); return d; } + +void +tgeb_free_mem(AN * an, AU * au, TA * ta) +{ + tgeb_free_ta(ta); + tgeb_free_au(au); + tgeb_free_an(an); + return; +} + +void +tgeb_free_sd(SORTED * sd) +{ + free(sd->id); + free(sd->data); + free(sd); +} diff --git a/tgeb/shlib_version b/tgeb/shlib_version index 3d7c908..dea2b62 100644 --- a/tgeb/shlib_version +++ b/tgeb/shlib_version @@ -1,2 +1,2 @@ major=0 -minor=1 +minor=2 diff --git a/tgeb/tarife.c b/tgeb/tarife.c index f73a7b5..79b9ae9 100644 --- a/tgeb/tarife.c +++ b/tgeb/tarife.c @@ -18,25 +18,28 @@ #include #include #include +#include #include "tgebdat.h" -static void rhdr_ta(struct ta *, FILE *); /* read header */ -static void ridx_ta(struct ta *, FILE *); /* read index */ -static void rdat_ta(struct ta *, FILE *); /* read data */ -static void rdat2_ta(struct ta_d *, FILE *); /* read chain */ -static void maxtoq(struct au *, struct ta *); +static void rhdr_ta(TA *, FILE *); /* read header */ +static void ridx_ta(TA *, FILE *); /* read index */ +static void rdat_ta(TA *, FILE *); /* read data */ +static void rdat_ta2(TA_D *, FILE *); /* read chain */ +static void maxtoq(AU *, TA *); +static void free_ta2(TA_D *); -struct ta * -tgeb_read_ta(char *file, struct au * au) +TA * +tgeb_read_ta(char *file, AU * au) { - struct ta *ta; + TA *ta; FILE *fd; if (!(fd = fopen(file, "r"))) err(1, "fopen %s", file); - if (!(ta = (struct ta *) malloc(sizeof(struct ta)))) + if (!(ta = malloc(sizeof(TA)))) err(1, "malloc"); + bzero(ta, sizeof(TA)); maxtoq(au, ta); rhdr_ta(ta, fd); @@ -48,12 +51,12 @@ tgeb_read_ta(char *file, struct au * au) } void -rhdr_ta(struct ta * ta, FILE * fd) +rhdr_ta(TA * ta, FILE * fd) { int i; fread(&ta->q, sizeof(ta->q), 1, fd); - if (!(ta->h = (struct ta_hdr *) calloc(ta->q, sizeof(struct ta_hdr)))) + if (!(ta->h = calloc(ta->q, sizeof(TA_HDR)))) err(1, "malloc"); fseek(fd, 2, SEEK_SET); @@ -67,14 +70,13 @@ rhdr_ta(struct ta * ta, FILE * fd) } void -ridx_ta(struct ta * ta, FILE * fd) +ridx_ta(TA * ta, FILE * fd) { int i, j; for (i = 0; i < ta->q; i++) { /* read inland offsets */ - if (!(ta->h[i].in = (struct ta_idx *) - calloc(Q_IN, sizeof(struct ta_idx)))) + if (!(ta->h[i].in = calloc(Q_IN, sizeof(TA_IDX)))) err(1, "malloc"); fseek(fd, ta->h[i].off_in, SEEK_SET); for (j = 0; j < Q_IN; j++) { @@ -84,8 +86,7 @@ ridx_ta(struct ta * ta, FILE * fd) ta->h[i].in[j].off--; } /* read ausland offsets */ - if (!(ta->h[i].aus = (struct ta_idx *) - calloc(ta->q_aus[i], sizeof(struct ta_idx)))) + if (!(ta->h[i].aus = calloc(ta->q_aus[i], sizeof(TA_IDX)))) err(1, "malloc"); fseek(fd, ta->h[i].off_aus, SEEK_SET); for (j = 0; j < ta->q_aus[i]; j++) { @@ -99,7 +100,7 @@ ridx_ta(struct ta * ta, FILE * fd) } void -rdat_ta(struct ta * ta, FILE * fd) +rdat_ta(TA * ta, FILE * fd) { int i, j; @@ -109,10 +110,10 @@ rdat_ta(struct ta * ta, FILE * fd) if (ta->h[i].in[j].off) { fseek(fd, ta->h[i].in[j].off, SEEK_SET); - if (!(ta->h[i].in[j].data = (struct ta_d *) - malloc(sizeof(struct ta_d)))) + if (!(ta->h[i].in[j].data = malloc(sizeof(TA_D)))) err(1, "malloc"); - rdat2_ta(ta->h[i].in[j].data, fd); + bzero(ta->h[i].in[j].data, sizeof(TA_D)); + rdat_ta2(ta->h[i].in[j].data, fd); } } /* read ausland data */ @@ -120,10 +121,10 @@ rdat_ta(struct ta * ta, FILE * fd) if (ta->h[i].aus[j].off) { fseek(fd, ta->h[i].aus[j].off, SEEK_SET); - if (!(ta->h[i].aus[j].data = (struct ta_d *) - malloc(sizeof(struct ta_d)))) + if (!(ta->h[i].aus[j].data = malloc(sizeof(TA_D)))) err(1, "malloc"); - rdat2_ta(ta->h[i].aus[j].data, fd); + bzero(ta->h[i].aus[j].data, sizeof(TA_D)); + rdat_ta2(ta->h[i].aus[j].data, fd); } } } @@ -131,7 +132,7 @@ rdat_ta(struct ta * ta, FILE * fd) } void -rdat2_ta(struct ta_d * data, FILE * fd) +rdat_ta2(TA_D * data, FILE * fd) { fread(&data->time, sizeof(data->time), 1, fd); fread(&data->dfee, sizeof(data->dfee), 1, fd); @@ -139,23 +140,55 @@ rdat2_ta(struct ta_d * data, FILE * fd) fread(&data->t1, sizeof(data->t1), 1, fd); fread(&data->t2, sizeof(data->t2), 1, fd); if (data->time != 24) { - if (!(data->next = malloc(sizeof(struct ta_d)))) + if (!(data->next = malloc(sizeof(TA_D)))) err(1, "malloc"); + bzero(data->next, sizeof(TA_D)); data->next->prev = data; - rdat2_ta(data->next, fd); + rdat_ta2(data->next, fd); } return; } void -maxtoq(struct au * au, struct ta * ta) +maxtoq(AU * au, TA * ta) { int i; - if (!(ta->q_aus = (unsigned short *) - calloc(au->q, sizeof(unsigned short)))) + if (!(ta->q_aus = calloc(au->q, sizeof(unsigned short)))) err(1, "malloc"); for (i = 0; i < au->q; i++) ta->q_aus[i] = au->max[i] * 2; return; } + +void +tgeb_free_ta(TA * ta) +{ + int i, j; + + for (i = 0; i < ta->q; i++) { + for (j = 0; j < Q_IN; j++) { + free_ta2(ta->h[i].in[j].data); + } + free(ta->h[i].in); + for (j = 0; j < ta->q_aus[i]; j++) { + free_ta2(ta->h[i].aus[j].data); + } + free(ta->h[i].aus); + } + free(ta->q_aus); + free(ta->h); + free(ta); + return; +} + +void +free_ta2(TA_D * data) +{ + if (data) { + if (data->next) + free_ta2(data->next); + free(data); + } + return; +} diff --git a/tgeb/tgebdat.h b/tgeb/tgebdat.h index 20f09f8..c0a3dfd 100644 --- a/tgeb/tgebdat.h +++ b/tgeb/tgebdat.h @@ -15,6 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#define TGEB_PATH "/.tgeb" + /* * anbieter.c */ @@ -28,7 +30,7 @@ #define T_TDI 0x06 /* deutsche telekom isdn */ #define T_0190 0x08 /* 0190 */ -struct an_d { +typedef struct an_d { struct an_hdr *h; /* back-pointer to header */ char *serv; /* service (e.g. string "call by call") */ char *pref; /* prefix */ @@ -47,50 +49,52 @@ struct an_d { unsigned short reg; /* registration (TRUE/FALSE) */ char *rurl; /* registration url */ char *rfax; /* registration fax */ -}; +} AN_D; -struct an_hdr { +typedef struct an_hdr { unsigned int off; /* offset */ unsigned short q; /* entry quantity */ char *name; /* name */ char *mail; /* e-mail */ char *url; /* url */ struct an_d *d; -}; +} AN_HDR; -struct an { +typedef struct an { unsigned short q; /* provider quantity */ struct an_hdr *h; /* header */ unsigned short e_q; /* entries qantity */ struct an_d *e; /* entries (id-sorted) */ -}; +} AN; -struct an *tgeb_read_an(char *file); +AN *tgeb_read_an(char *file); +void tgeb_free_an(AN *); /* * ausland.c */ -struct au_d { +typedef struct au_d { unsigned short *id; char *land; char *dial; -}; +} AU_D; -struct au_hdr { +typedef struct au_hdr { struct an_d *d; char *land; char *dial; -}; +} AU_HDR; -struct au { +typedef struct au { unsigned short q; /* quantity */ unsigned short l; struct au_d *d; unsigned short *max; -}; +} AU; -struct au *tgeb_read_au(char *file); +AU *tgeb_read_au(char *file); +void tgeb_free_au(AU *); /* * tarife.c @@ -117,7 +121,7 @@ struct au *tgeb_read_au(char *file); #define AUS_E 0x01 #define Q_IN 16 -struct ta_d { +typedef struct ta_d { unsigned short time; /* valid till */ float dfee; /* dial-in fee */ float fee; /* fee (Brutto) */ @@ -125,37 +129,40 @@ struct ta_d { unsigned short t2; /* timing 2 */ struct ta_d *next; /* next data block in chain */ struct ta_d *prev; /* prevision data block in chain */ -}; +} TA_D; -struct ta_idx { +typedef struct ta_idx { unsigned int off; /* region / day-of-week offset */ struct ta_d *data; -}; +} TA_IDX; -struct ta_hdr { +typedef struct ta_hdr { struct ta_idx *in; unsigned int off_in; struct ta_idx *aus; unsigned int off_aus; -}; +} TA_HDR; -struct ta { /* file offset 0 */ +typedef struct ta { /* file offset 0 */ unsigned short q; /* quantity provider */ unsigned short *q_aus; /* entrys quantity per provider */ struct ta_hdr *h; -}; +} TA; -struct ta *tgeb_read_ta(char *file, struct au *); +TA *tgeb_read_ta(char *file, struct au *); +void tgeb_free_ta(TA *); /* *common.c */ -struct sorted { - int q; - int *id; +typedef struct sorted { + int q; + int *id; struct ta_d **data; -}; +} SORTED; void _tgeb_sread(char **, FILE *); /* read string */ -struct sorted tgeb_select(struct ta *, struct an *, int reg, int flags, int time); +SORTED *tgeb_select(TA *, AN *, int reg, int flags, int time); +void tgeb_free_mem(AN *, AU *, TA *); +void tgeb_free_sd(SORTED *); diff --git a/tgeb/tgebup.h b/tgeb/tgebup.h index 0d2f15e..74fbf96 100644 --- a/tgeb/tgebup.h +++ b/tgeb/tgebup.h @@ -15,4 +15,4 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void tgeb_update(struct tm *); +void tgeb_update(struct tm *); diff --git a/tgeb/unzip.c b/tgeb/unzip.c index 30a9371..ad587b1 100644 --- a/tgeb/unzip.c +++ b/tgeb/unzip.c @@ -1,8 +1,9 @@ -/* unzip.c -- IO on .zip files using zlib - Version 0.15 beta, Mar 19th, 1998, - - Read unzip.h for more info -*/ +/* $Id$ */ +/* + * unzip.c -- IO on .zip files using zlib Version 0.15 beta, Mar 19th, 1998, + * + * Read unzip.h for more info + */ #include @@ -12,19 +13,19 @@ #include "unzip.h" #ifdef STDC -# include -# include -# include +#include +#include +#include #endif #ifdef NO_ERRNO_H - extern int errno; +extern int errno; #else -# include +#include #endif #ifndef local -# define local static +#define local static #endif /* compile with -Dlocal if your debugger can't find static symbols */ @@ -45,10 +46,10 @@ #endif #ifndef ALLOC -# define ALLOC(size) (malloc(size)) +#define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} +#define TRYFREE(p) {if (p) free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) @@ -70,166 +71,182 @@ #endif const char unz_copyright[] = - " unzip 0.15 Copyright 1998 Gilles Vollant "; +" unzip 0.15 Copyright 1998 Gilles Vollant "; -/* unz_file_info_interntal contain internal info about a file in zipfile*/ -typedef struct unz_file_info_internal_s -{ - uLong offset_curfile;/* relative offset of local header 4 bytes */ -} unz_file_info_internal; +/* unz_file_info_interntal contain internal info about a file in zipfile */ +typedef struct unz_file_info_internal_s { + uLong offset_curfile; /* relative offset of local header 4 bytes */ +} unz_file_info_internal; -/* file_in_zip_read_info_s contain internal information about a file in zipfile, - when reading and decompress it */ -typedef struct -{ - char *read_buffer; /* internal buffer for compressed data */ - z_stream stream; /* zLib stream structure for inflate */ +/* + * file_in_zip_read_info_s contain internal information about a file in + * zipfile, when reading and decompress it + */ +typedef struct { + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek */ + uLong stream_initialised; /* flag set if stream structure is + * initialised */ + + uLong offset_local_extrafield; /* offset of the local extra + * field */ + uInt size_local_extrafield; /* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field + * in read */ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed; /* number of byte to be obtained + * after decomp */ + FILE *file; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile; /* byte before the zipfile, + * (>0 for sfx) */ +} file_in_zip_read_info_s; + - uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ - uLong stream_initialised; /* flag set if stream structure is initialised*/ +/* + * unz_s contain internal information about the zipfile + */ +typedef struct { + FILE *file; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile; /* byte before the zipfile, + * (>0 for sfx) */ + uLong num_file; /* number of the current file in the zipfile */ + uLong pos_in_central_dir; /* pos of the current file in the + * central dir */ + uLong current_file_ok;/* flag about the usability of the current + * file */ + uLong central_pos; /* position of the beginning of the central + * dir */ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central + * directory with respect to the + * starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file + * in zip */ + unz_file_info_internal cur_file_info_internal; /* private info about it */ + file_in_zip_read_info_s *pfile_in_zip_read; /* structure about the + * current file if we + * are decompressing it */ +} unz_s; - uLong offset_local_extrafield;/* offset of the local extra field */ - uInt size_local_extrafield;/* size of the local extra field */ - uLong pos_local_extrafield; /* position in the local extra field in read*/ - uLong crc32; /* crc32 of all data uncompressed */ - uLong crc32_wait; /* crc32 we must obtain after decompress all */ - uLong rest_read_compressed; /* number of byte to be decompressed */ - uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ - FILE* file; /* io structore of the zipfile */ - uLong compression_method; /* compression method (0==store) */ - uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ -} file_in_zip_read_info_s; +/* + * =========================================================================== + * Read a byte from a gz_stream; update next_in and avail_in. Return EOF for + * end of file. IN assertion: the stream s has been successfully opened for + * reading. + */ -/* unz_s contain internal information about the zipfile -*/ -typedef struct -{ - FILE* file; /* io structore of the zipfile */ - unz_global_info gi; /* public global information */ - uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ - uLong num_file; /* number of the current file in the zipfile*/ - uLong pos_in_central_dir; /* pos of the current file in the central dir*/ - uLong current_file_ok; /* flag about the usability of the current file*/ - uLong central_pos; /* position of the beginning of the central dir*/ - - uLong size_central_dir; /* size of the central directory */ - uLong offset_central_dir; /* offset of start of central directory with - respect to the starting disk number */ - - unz_file_info cur_file_info; /* public info about the current file in zip*/ - unz_file_info_internal cur_file_info_internal; /* private info about it*/ - file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current - file if we are decompressing it */ -} unz_s; - - -/* =========================================================================== - Read a byte from a gz_stream; update next_in and avail_in. Return EOF - for end of file. - IN assertion: the stream s has been successfully opened for reading. -*/ - - -local int unzlocal_getByte(fin,pi) - FILE *fin; - int *pi; +local int +unzlocal_getByte(fin, pi) + FILE *fin; + int *pi; { - unsigned char c; - int err = fread(&c, 1, 1, fin); - if (err==1) - { - *pi = (int)c; - return UNZ_OK; - } - else - { - if (ferror(fin)) - return UNZ_ERRNO; - else - return UNZ_EOF; - } + unsigned char c; + int err = fread(&c, 1, 1, fin); + if (err == 1) { + *pi = (int) c; + return UNZ_OK; + } else { + if (ferror(fin)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } } -/* =========================================================================== - Reads a long in LSB order from the given gz_stream. Sets -*/ -local int unzlocal_getShort (fin,pX) - FILE* fin; - uLong *pX; +/* + * =========================================================================== + * Reads a long in LSB order from the given gz_stream. Sets + */ +local int +unzlocal_getShort(fin, pX) + FILE *fin; + uLong *pX; { - uLong x ; - int i; - int err; - - err = unzlocal_getByte(fin,&i); - x = (uLong)i; - - if (err==UNZ_OK) - err = unzlocal_getByte(fin,&i); - x += ((uLong)i)<<8; - - if (err==UNZ_OK) - *pX = x; - else - *pX = 0; - return err; + uLong x; + int i; + int err; + + err = unzlocal_getByte(fin, &i); + x = (uLong) i; + + if (err == UNZ_OK) + err = unzlocal_getByte(fin, &i); + x += ((uLong) i) << 8; + + if (err == UNZ_OK) + *pX = x; + else + *pX = 0; + return err; } -local int unzlocal_getLong (fin,pX) - FILE* fin; - uLong *pX; +local int +unzlocal_getLong(fin, pX) + FILE *fin; + uLong *pX; { - uLong x ; - int i; - int err; - - err = unzlocal_getByte(fin,&i); - x = (uLong)i; - - if (err==UNZ_OK) - err = unzlocal_getByte(fin,&i); - x += ((uLong)i)<<8; - - if (err==UNZ_OK) - err = unzlocal_getByte(fin,&i); - x += ((uLong)i)<<16; - - if (err==UNZ_OK) - err = unzlocal_getByte(fin,&i); - x += ((uLong)i)<<24; - - if (err==UNZ_OK) - *pX = x; - else - *pX = 0; - return err; + uLong x; + int i; + int err; + + err = unzlocal_getByte(fin, &i); + x = (uLong) i; + + if (err == UNZ_OK) + err = unzlocal_getByte(fin, &i); + x += ((uLong) i) << 8; + + if (err == UNZ_OK) + err = unzlocal_getByte(fin, &i); + x += ((uLong) i) << 16; + + if (err == UNZ_OK) + err = unzlocal_getByte(fin, &i); + x += ((uLong) i) << 24; + + if (err == UNZ_OK) + *pX = x; + else + *pX = 0; + return err; } -/* My own strcmpi / strcasecmp */ -local int strcmpcasenosensitive_internal (fileName1,fileName2) - const char* fileName1; - const char* fileName2; +/* + * My own strcmpi / strcasecmp + */ +local int +strcmpcasenosensitive_internal(fileName1, fileName2) + const char *fileName1; + const char *fileName2; { - for (;;) - { - char c1=*(fileName1++); - char c2=*(fileName2++); - if ((c1>='a') && (c1<='z')) + for (;;) { + char c1 = *(fileName1++); + char c2 = *(fileName2++); + if ((c1 >= 'a') && (c1 <= 'z')) c1 -= 0x20; - if ((c2>='a') && (c2<='z')) + if ((c2 >= 'a') && (c2 <= 'z')) c2 -= 0x20; - if (c1=='\0') - return ((c2=='\0') ? 0 : -1); - if (c2=='\0') + if (c1 == '\0') + return ((c2 == '\0') ? 0 : -1); + if (c2 == '\0') return 1; - if (c1c2) + if (c1 > c2) return 1; } } @@ -245,85 +262,83 @@ local int strcmpcasenosensitive_internal (fileName1,fileName2) #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal #endif -/* - Compare two filename (fileName1,fileName2). - If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) - If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi - or strcasecmp) - If iCaseSenisivity = 0, case sensitivity is defaut of your operating system - (like 1 on Unix, 2 on Windows) - -*/ -extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) - const char* fileName1; - const char* fileName2; - int iCaseSensitivity; +/* + * Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, + * comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, + * comparision is not case sensitivity (like strcmpi or strcasecmp) If + * iCaseSenisivity = 0, case sensitivity is defaut of your operating system + * (like 1 on Unix, 2 on Windows) + * + */ +extern int ZEXPORT +unzStringFileNameCompare(fileName1, fileName2, iCaseSensitivity) + const char *fileName1; + const char *fileName2; + int iCaseSensitivity; { - if (iCaseSensitivity==0) - iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + if (iCaseSensitivity == 0) + iCaseSensitivity = CASESENSITIVITYDEFAULTVALUE; - if (iCaseSensitivity==1) - return strcmp(fileName1,fileName2); + if (iCaseSensitivity == 1) + return strcmp(fileName1, fileName2); - return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); -} + return STRCMPCASENOSENTIVEFUNCTION(fileName1, fileName2); +} #define BUFREADCOMMENT (0x400) /* - Locate the Central directory of a zipfile (at the end, just before - the global comment) -*/ -local uLong unzlocal_SearchCentralDir(fin) - FILE *fin; + * Locate the Central directory of a zipfile (at the end, just before the + * global comment) + */ +local uLong +unzlocal_SearchCentralDir(fin) + FILE *fin; { - unsigned char* buf; - uLong uSizeFile; - uLong uBackRead; - uLong uMaxBack=0xffff; /* maximum size of global comment */ - uLong uPosFound=0; - - if (fseek(fin,0,SEEK_END) != 0) + unsigned char *buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack = 0xffff; /* maximum size of global comment */ + uLong uPosFound = 0; + + if (fseek(fin, 0, SEEK_END) != 0) return 0; - uSizeFile = ftell( fin ); - - if (uMaxBack>uSizeFile) + uSizeFile = ftell(fin); + + if (uMaxBack > uSizeFile) uMaxBack = uSizeFile; - buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); - if (buf==NULL) + buf = (unsigned char *) ALLOC(BUFREADCOMMENT + 4); + if (buf == NULL) return 0; uBackRead = 4; - while (uBackReaduMaxBack) + while (uBackRead < uMaxBack) { + uLong uReadSize, uReadPos; + int i; + if (uBackRead + BUFREADCOMMENT > uMaxBack) uBackRead = uMaxBack; else - uBackRead+=BUFREADCOMMENT; - uReadPos = uSizeFile-uBackRead ; - - uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? - (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); - if (fseek(fin,uReadPos,SEEK_SET)!=0) + uBackRead += BUFREADCOMMENT; + uReadPos = uSizeFile - uBackRead; + + uReadSize = ((BUFREADCOMMENT + 4) < (uSizeFile - uReadPos)) ? + (BUFREADCOMMENT + 4) : (uSizeFile - uReadPos); + if (fseek(fin, uReadPos, SEEK_SET) != 0) break; - if (fread(buf,(uInt)uReadSize,1,fin)!=1) + if (fread(buf, (uInt) uReadSize, 1, fin) != 1) break; - for (i=(int)uReadSize-3; (i--)>0;) - if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && - ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) - { - uPosFound = uReadPos+i; + for (i = (int) uReadSize - 3; (i--) > 0;) + if (((*(buf + i)) == 0x50) && ((*(buf + i + 1)) == 0x4b) && + ((*(buf + i + 2)) == 0x05) && ((*(buf + i + 3)) == 0x06)) { + uPosFound = uReadPos + i; break; } - - if (uPosFound!=0) + if (uPosFound != 0) break; } TRYFREE(buf); @@ -331,123 +346,124 @@ local uLong unzlocal_SearchCentralDir(fin) } /* - Open a Zip file. path contain the full pathname (by example, - on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer - "zlib/zlib109.zip". - If the zipfile cannot be opened (file don't exist or in not valid), the - return value is NULL. - Else, the return value is a unzFile Handle, usable with other function - of this unzip package. -*/ -extern unzFile ZEXPORT unzOpen (path) + * Open a Zip file. path contain the full pathname (by example, on a Windows + * NT computer "c:\\test\\zlib109.zip" or on an Unix computer + * "zlib/zlib109.zip". If the zipfile cannot be opened (file don't exist or + * in not valid), the return value is NULL. Else, the return value is a + * unzFile Handle, usable with other function of this unzip package. + */ +extern unzFile ZEXPORT +unzOpen(path) const char *path; { - unz_s us; - unz_s *s; - uLong central_pos,uL; - FILE * fin ; - - uLong number_disk; /* number of the current dist, used for - spaning ZIP, unsupported, always 0*/ - uLong number_disk_with_CD; /* number the the disk with central dir, used - for spaning ZIP, unsupported, always 0*/ - uLong number_entry_CD; /* total number of entries in - the central dir - (same than number_entry on nospan) */ - - int err=UNZ_OK; - - if (unz_copyright[0]!=' ') - return NULL; - - fin=fopen(path,"rb"); - if (fin==NULL) + unz_s us; + unz_s *s; + uLong central_pos, uL; + FILE *fin; + + uLong number_disk; /* number of the current dist, used for + * spaning ZIP, unsupported, always 0 */ + uLong number_disk_with_CD; /* number the the disk with central + * dir, used for spaning ZIP, + * unsupported, always 0 */ + uLong number_entry_CD;/* total number of entries in the central dir + * (same than number_entry on nospan) */ + + int err = UNZ_OK; + + if (unz_copyright[0] != ' ') + return NULL; + + fin = fopen(path, "rb"); + if (fin == NULL) return NULL; central_pos = unzlocal_SearchCentralDir(fin); - if (central_pos==0) - err=UNZ_ERRNO; + if (central_pos == 0) + err = UNZ_ERRNO; - if (fseek(fin,central_pos,SEEK_SET)!=0) - err=UNZ_ERRNO; + if (fseek(fin, central_pos, SEEK_SET) != 0) + err = UNZ_ERRNO; /* the signature, already checked */ - if (unzlocal_getLong(fin,&uL)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(fin, &uL) != UNZ_OK) + err = UNZ_ERRNO; /* number of this disk */ - if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(fin, &number_disk) != UNZ_OK) + err = UNZ_ERRNO; /* number of the disk with the start of the central directory */ - if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(fin, &number_disk_with_CD) != UNZ_OK) + err = UNZ_ERRNO; /* total number of entries in the central dir on this disk */ - if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(fin, &us.gi.number_entry) != UNZ_OK) + err = UNZ_ERRNO; /* total number of entries in the central dir */ - if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(fin, &number_entry_CD) != UNZ_OK) + err = UNZ_ERRNO; - if ((number_entry_CD!=us.gi.number_entry) || - (number_disk_with_CD!=0) || - (number_disk!=0)) - err=UNZ_BADZIPFILE; + if ((number_entry_CD != us.gi.number_entry) || + (number_disk_with_CD != 0) || + (number_disk != 0)) + err = UNZ_BADZIPFILE; /* size of the central directory */ - if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(fin, &us.size_central_dir) != UNZ_OK) + err = UNZ_ERRNO; - /* offset of start of central directory with respect to the - starting disk number */ - if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) - err=UNZ_ERRNO; + /* + * offset of start of central directory with respect to the starting + * disk number + */ + if (unzlocal_getLong(fin, &us.offset_central_dir) != UNZ_OK) + err = UNZ_ERRNO; /* zipfile comment length */ - if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(fin, &us.gi.size_comment) != UNZ_OK) + err = UNZ_ERRNO; - if ((central_pospfile_in_zip_read!=NULL) - unzCloseCurrentFile(file); + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); fclose(s->file); TRYFREE(s); @@ -456,208 +472,203 @@ extern int ZEXPORT unzClose (file) /* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) + * Write info about the ZipFile in the *pglobal_info structure. No + * preparation of the structure is needed return UNZ_OK if there is no + * problem. + */ +extern int ZEXPORT +unzGetGlobalInfo(file, pglobal_info) unzFile file; unz_global_info *pglobal_info; { - unz_s* s; - if (file==NULL) + unz_s *s; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - *pglobal_info=s->gi; + s = (unz_s *) file; + *pglobal_info = s->gi; return UNZ_OK; } /* - Translate date/time from Dos format to tm_unz (readable more easilty) -*/ -local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) - uLong ulDosDate; - tm_unz* ptm; + * Translate date/time from Dos format to tm_unz (readable more easilty) + */ +local void +unzlocal_DosDateToTmuDate(ulDosDate, ptm) + uLong ulDosDate; + tm_unz *ptm; { - uLong uDate; - uDate = (uLong)(ulDosDate>>16); - ptm->tm_mday = (uInt)(uDate&0x1f) ; - ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; - ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; - - ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); - ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; - ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; + uLong uDate; + uDate = (uLong) (ulDosDate >> 16); + ptm->tm_mday = (uInt) (uDate & 0x1f); + ptm->tm_mon = (uInt) ((((uDate) & 0x1E0) / 0x20) - 1); + ptm->tm_year = (uInt) (((uDate & 0x0FE00) / 0x0200) + 1980); + + ptm->tm_hour = (uInt) ((ulDosDate & 0xF800) / 0x800); + ptm->tm_min = (uInt) ((ulDosDate & 0x7E0) / 0x20); + ptm->tm_sec = (uInt) (2 * (ulDosDate & 0x1f)); } /* - Get Info about the current file in the zipfile, with internal only info -*/ -local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, - unz_file_info *pfile_info, - unz_file_info_internal - *pfile_info_internal, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); - -local int unzlocal_GetCurrentFileInfoInternal (file, - pfile_info, - pfile_info_internal, - szFileName, fileNameBufferSize, - extraField, extraFieldBufferSize, - szComment, commentBufferSize) + * Get Info about the current file in the zipfile, with internal only info + */ +local int unzlocal_GetCurrentFileInfoInternal +OF((unzFile file, + unz_file_info * pfile_info, + unz_file_info_internal + * pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + + local int unzlocal_GetCurrentFileInfoInternal(file, + pfile_info, + pfile_info_internal, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; unz_file_info_internal *pfile_info_internal; - char *szFileName; - uLong fileNameBufferSize; - void *extraField; - uLong extraFieldBufferSize; - char *szComment; - uLong commentBufferSize; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; { - unz_s* s; + unz_s *s; unz_file_info file_info; unz_file_info_internal file_info_internal; - int err=UNZ_OK; - uLong uMagic; - long lSeek=0; + int err = UNZ_OK; + uLong uMagic; + long lSeek = 0; - if (file==NULL) + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) - err=UNZ_ERRNO; + s = (unz_s *) file; + if (fseek(s->file, s->pos_in_central_dir + s->byte_before_the_zipfile, SEEK_SET) != 0) + err = UNZ_ERRNO; /* we check the magic */ - if (err==UNZ_OK) - if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) - err=UNZ_ERRNO; - else if (uMagic!=0x02014b50) - err=UNZ_BADZIPFILE; - - if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) - err=UNZ_ERRNO; + if (err == UNZ_OK) { + if (unzlocal_getLong(s->file, &uMagic) != UNZ_OK) + err = UNZ_ERRNO; + else if (uMagic != 0x02014b50) + err = UNZ_BADZIPFILE; + } + if (unzlocal_getShort(s->file, &file_info.version) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.version_needed) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.flag) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.compression_method) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info.dosDate) != UNZ_OK) + err = UNZ_ERRNO; - unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + unzlocal_DosDateToTmuDate(file_info.dosDate, &file_info.tmu_date); - if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info.crc) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info.compressed_size) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info.uncompressed_size) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.size_filename) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.size_file_extra) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.size_file_comment) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.disk_num_start) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getShort(s->file, &file_info.internal_fa) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info.external_fa) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK) - err=UNZ_ERRNO; + if (unzlocal_getLong(s->file, &file_info_internal.offset_curfile) != UNZ_OK) + err = UNZ_ERRNO; - lSeek+=file_info.size_filename; - if ((err==UNZ_OK) && (szFileName!=NULL)) - { - uLong uSizeRead ; - if (file_info.size_filename0) && (fileNameBufferSize>0)) - if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; + if ((file_info.size_filename > 0) && (fileNameBufferSize > 0)) + if (fread(szFileName, (uInt) uSizeRead, 1, s->file) != 1) + err = UNZ_ERRNO; lSeek -= uSizeRead; } - - - if ((err==UNZ_OK) && (extraField!=NULL)) - { - uLong uSizeRead ; - if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0) - lSeek=0; + if (lSeek != 0) { + if (fseek(s->file, lSeek, SEEK_CUR) == 0) + lSeek = 0; else - err=UNZ_ERRNO; - if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) - if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; + err = UNZ_ERRNO; + } + if ((file_info.size_file_extra > 0) && (extraFieldBufferSize > 0)) + if (fread(extraField, (uInt) uSizeRead, 1, s->file) != 1) + err = UNZ_ERRNO; lSeek += file_info.size_file_extra - uSizeRead; - } - else - lSeek+=file_info.size_file_extra; - - - if ((err==UNZ_OK) && (szComment!=NULL)) - { - uLong uSizeRead ; - if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0) - lSeek=0; + if (lSeek != 0) { + if (fseek(s->file, lSeek, SEEK_CUR) == 0) + lSeek = 0; else - err=UNZ_ERRNO; - if ((file_info.size_file_comment>0) && (commentBufferSize>0)) - if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) - err=UNZ_ERRNO; - lSeek+=file_info.size_file_comment - uSizeRead; - } - else - lSeek+=file_info.size_file_comment; + err = UNZ_ERRNO; + } + if ((file_info.size_file_comment > 0) && (commentBufferSize > 0)) + if (fread(szComment, (uInt) uSizeRead, 1, s->file) != 1) + err = UNZ_ERRNO; + lSeek += file_info.size_file_comment - uSizeRead; + } else + lSeek += file_info.size_file_comment; - if ((err==UNZ_OK) && (pfile_info!=NULL)) - *pfile_info=file_info; + if ((err == UNZ_OK) && (pfile_info != NULL)) + *pfile_info = file_info; - if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) - *pfile_info_internal=file_info_internal; + if ((err == UNZ_OK) && (pfile_info_internal != NULL)) + *pfile_info_internal = file_info_internal; return err; } @@ -665,110 +676,113 @@ local int unzlocal_GetCurrentFileInfoInternal (file, /* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. -*/ -extern int ZEXPORT unzGetCurrentFileInfo (file, - pfile_info, - szFileName, fileNameBufferSize, - extraField, extraFieldBufferSize, - szComment, commentBufferSize) + * Write info about the ZipFile in the *pglobal_info structure. No + * preparation of the structure is needed return UNZ_OK if there is no + * problem. + */ +extern int ZEXPORT +unzGetCurrentFileInfo(file, + pfile_info, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; - char *szFileName; - uLong fileNameBufferSize; - void *extraField; - uLong extraFieldBufferSize; - char *szComment; - uLong commentBufferSize; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; { - return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, - szFileName,fileNameBufferSize, - extraField,extraFieldBufferSize, - szComment,commentBufferSize); + return unzlocal_GetCurrentFileInfoInternal(file, pfile_info, NULL, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize); } /* - Set the current file of the zipfile to the first file. - return UNZ_OK if there is no problem -*/ -extern int ZEXPORT unzGoToFirstFile (file) + * Set the current file of the zipfile to the first file. return UNZ_OK if + * there is no problem + */ +extern int ZEXPORT +unzGoToFirstFile(file) unzFile file; { - int err=UNZ_OK; - unz_s* s; - if (file==NULL) + int err = UNZ_OK; + unz_s *s; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - s->pos_in_central_dir=s->offset_central_dir; - s->num_file=0; - err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, - &s->cur_file_info_internal, - NULL,0,NULL,0,NULL,0); + s = (unz_s *) file; + s->pos_in_central_dir = s->offset_central_dir; + s->num_file = 0; + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); s->current_file_ok = (err == UNZ_OK); return err; } /* - Set the current file of the zipfile to the next file. - return UNZ_OK if there is no problem - return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. -*/ -extern int ZEXPORT unzGoToNextFile (file) + * Set the current file of the zipfile to the next file. return UNZ_OK if + * there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was + * the latest. + */ +extern int ZEXPORT +unzGoToNextFile(file) unzFile file; { - unz_s* s; - int err; + unz_s *s; + int err; - if (file==NULL) + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s = (unz_s *) file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; - if (s->num_file+1==s->gi.number_entry) + if (s->num_file + 1 == s->gi.number_entry) return UNZ_END_OF_LIST_OF_FILE; s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + - s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment; s->num_file++; - err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, - &s->cur_file_info_internal, - NULL,0,NULL,0,NULL,0); + err = unzlocal_GetCurrentFileInfoInternal(file, &s->cur_file_info, + &s->cur_file_info_internal, + NULL, 0, NULL, 0, NULL, 0); s->current_file_ok = (err == UNZ_OK); return err; } /* - Try locate the file szFileName in the zipfile. - For the iCaseSensitivity signification, see unzipStringFileNameCompare - - return value : - UNZ_OK if the file is found. It becomes the current file. - UNZ_END_OF_LIST_OF_FILE if the file is not found -*/ -extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) + * Try locate the file szFileName in the zipfile. For the iCaseSensitivity + * signification, see unzipStringFileNameCompare + * + * return value : UNZ_OK if the file is found. It becomes the current file. + * UNZ_END_OF_LIST_OF_FILE if the file is not found + */ +extern int ZEXPORT +unzLocateFile(file, szFileName, iCaseSensitivity) unzFile file; const char *szFileName; - int iCaseSensitivity; + int iCaseSensitivity; { - unz_s* s; - int err; + unz_s *s; + int err; + - - uLong num_fileSaved; - uLong pos_in_central_dirSaved; + uLong num_fileSaved; + uLong pos_in_central_dirSaved; - if (file==NULL) + if (file == NULL) return UNZ_PARAMERROR; - if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) - return UNZ_PARAMERROR; + if (strlen(szFileName) >= UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; - s=(unz_s*)file; + s = (unz_s *) file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; @@ -777,309 +791,301 @@ extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) err = unzGoToFirstFile(file); - while (err == UNZ_OK) - { - char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; - unzGetCurrentFileInfo(file,NULL, - szCurrentFileName,sizeof(szCurrentFileName)-1, - NULL,0,NULL,0); + while (err == UNZ_OK) { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP + 1]; + unzGetCurrentFileInfo(file, NULL, + szCurrentFileName, sizeof(szCurrentFileName) - 1, + NULL, 0, NULL, 0); if (unzStringFileNameCompare(szCurrentFileName, - szFileName,iCaseSensitivity)==0) + szFileName, iCaseSensitivity) == 0) return UNZ_OK; err = unzGoToNextFile(file); } - s->num_file = num_fileSaved ; - s->pos_in_central_dir = pos_in_central_dirSaved ; + s->num_file = num_fileSaved; + s->pos_in_central_dir = pos_in_central_dirSaved; return err; } /* - Read the local header of the current zipfile - Check the coherency of the local header and info in the end of central - directory about this file - store in *piSizeVar the size of extra info in local header - (filename and size of extra field data) -*/ -local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, - poffset_local_extrafield, - psize_local_extrafield) - unz_s* s; - uInt* piSizeVar; - uLong *poffset_local_extrafield; - uInt *psize_local_extrafield; + * Read the local header of the current zipfile Check the coherency of the + * local header and info in the end of central directory about this file + * store in *piSizeVar the size of extra info in local header (filename and + * size of extra field data) + */ +local int +unzlocal_CheckCurrentFileCoherencyHeader(s, piSizeVar, + poffset_local_extrafield, + psize_local_extrafield) + unz_s *s; + uInt *piSizeVar; + uLong *poffset_local_extrafield; + uInt *psize_local_extrafield; { - uLong uMagic,uData,uFlags; - uLong size_filename; - uLong size_extra_field; - int err=UNZ_OK; + uLong uMagic, uData, uFlags; + uLong size_filename; + uLong size_extra_field; + int err = UNZ_OK; *piSizeVar = 0; *poffset_local_extrafield = 0; *psize_local_extrafield = 0; - if (fseek(s->file,s->cur_file_info_internal.offset_curfile + - s->byte_before_the_zipfile,SEEK_SET)!=0) + if (fseek(s->file, s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile, SEEK_SET) != 0) return UNZ_ERRNO; - if (err==UNZ_OK) - if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) - err=UNZ_ERRNO; - else if (uMagic!=0x04034b50) + if (err == UNZ_OK) { + if (unzlocal_getLong(s->file, &uMagic) != UNZ_OK) + err = UNZ_ERRNO; + else if (uMagic != 0x04034b50) + err = UNZ_BADZIPFILE; + } + if (unzlocal_getShort(s->file, &uData) != UNZ_OK) + err = UNZ_ERRNO; + /* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; + */ + if (unzlocal_getShort(s->file, &uFlags) != UNZ_OK) + err = UNZ_ERRNO; - if (unzlocal_getShort(s->file,&uData) != UNZ_OK) - err=UNZ_ERRNO; -/* - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) - err=UNZ_BADZIPFILE; -*/ - if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK) - err=UNZ_ERRNO; - - if (unzlocal_getShort(s->file,&uData) != UNZ_OK) - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) - err=UNZ_BADZIPFILE; - - if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && - (s->cur_file_info.compression_method!=Z_DEFLATED)) - err=UNZ_BADZIPFILE; - - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */ - err=UNZ_ERRNO; - - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; - - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; - - if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */ - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && - ((uFlags & 8)==0)) - err=UNZ_BADZIPFILE; - - - if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK) - err=UNZ_ERRNO; - else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) - err=UNZ_BADZIPFILE; - - *piSizeVar += (uInt)size_filename; - - if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK) - err=UNZ_ERRNO; - *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + - SIZEZIPLOCALHEADER + size_filename; - *psize_local_extrafield = (uInt)size_extra_field; - - *piSizeVar += (uInt)size_extra_field; + if (unzlocal_getShort(s->file, &uData) != UNZ_OK) + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.compression_method)) + err = UNZ_BADZIPFILE; + + if ((err == UNZ_OK) && (s->cur_file_info.compression_method != 0) && + (s->cur_file_info.compression_method != Z_DEFLATED)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file, &uData) != UNZ_OK) /* date/time */ + err = UNZ_ERRNO; + + if (unzlocal_getLong(s->file, &uData) != UNZ_OK) /* crc */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.crc) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file, &uData) != UNZ_OK) /* size compr */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.compressed_size) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file, &uData) != UNZ_OK) /* size uncompr */ + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (uData != s->cur_file_info.uncompressed_size) && + ((uFlags & 8) == 0)) + err = UNZ_BADZIPFILE; + + + if (unzlocal_getShort(s->file, &size_filename) != UNZ_OK) + err = UNZ_ERRNO; + else if ((err == UNZ_OK) && (size_filename != s->cur_file_info.size_filename)) + err = UNZ_BADZIPFILE; + + *piSizeVar += (uInt) size_filename; + + if (unzlocal_getShort(s->file, &size_extra_field) != UNZ_OK) + err = UNZ_ERRNO; + *poffset_local_extrafield = s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt) size_extra_field; + + *piSizeVar += (uInt) size_extra_field; return err; } - + /* - Open for reading data the current file in the zipfile. - If there is no error and the file is opened, the return value is UNZ_OK. -*/ -extern int ZEXPORT unzOpenCurrentFile (file) + * Open for reading data the current file in the zipfile. If there is no + * error and the file is opened, the return value is UNZ_OK. + */ +extern int ZEXPORT +unzOpenCurrentFile(file) unzFile file; { - int err=UNZ_OK; - int Store; - uInt iSizeVar; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - uLong offset_local_extrafield; /* offset of the local extra field */ - uInt size_local_extrafield; /* size of the local extra field */ - - if (file==NULL) + int err = UNZ_OK; + int Store; + uInt iSizeVar; + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra + * field */ + uInt size_local_extrafield; /* size of the local extra field */ + + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s = (unz_s *) file; if (!s->current_file_ok) return UNZ_PARAMERROR; - if (s->pfile_in_zip_read != NULL) - unzCloseCurrentFile(file); + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); - if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, - &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + if (unzlocal_CheckCurrentFileCoherencyHeader(s, &iSizeVar, + &offset_local_extrafield, &size_local_extrafield) != UNZ_OK) return UNZ_BADZIPFILE; - pfile_in_zip_read_info = (file_in_zip_read_info_s*) - ALLOC(sizeof(file_in_zip_read_info_s)); - if (pfile_in_zip_read_info==NULL) + pfile_in_zip_read_info = (file_in_zip_read_info_s *) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info == NULL) return UNZ_INTERNALERROR; - pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->read_buffer = (char *) ALLOC(UNZ_BUFSIZE); pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; - pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->pos_local_extrafield = 0; - if (pfile_in_zip_read_info->read_buffer==NULL) - { + if (pfile_in_zip_read_info->read_buffer == NULL) { TRYFREE(pfile_in_zip_read_info); return UNZ_INTERNALERROR; } + pfile_in_zip_read_info->stream_initialised = 0; - pfile_in_zip_read_info->stream_initialised=0; - - if ((s->cur_file_info.compression_method!=0) && - (s->cur_file_info.compression_method!=Z_DEFLATED)) - err=UNZ_BADZIPFILE; - Store = s->cur_file_info.compression_method==0; + if ((s->cur_file_info.compression_method != 0) && + (s->cur_file_info.compression_method != Z_DEFLATED)) + err = UNZ_BADZIPFILE; + Store = s->cur_file_info.compression_method == 0; - pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; - pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->crc32_wait = s->cur_file_info.crc; + pfile_in_zip_read_info->crc32 = 0; pfile_in_zip_read_info->compression_method = - s->cur_file_info.compression_method; - pfile_in_zip_read_info->file=s->file; - pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; - - pfile_in_zip_read_info->stream.total_out = 0; - - if (!Store) - { - pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; - pfile_in_zip_read_info->stream.zfree = (free_func)0; - pfile_in_zip_read_info->stream.opaque = (voidpf)0; - - err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); - if (err == Z_OK) - pfile_in_zip_read_info->stream_initialised=1; - /* windowBits is passed < 0 to tell that there is no zlib header. - * Note that in this case inflate *requires* an extra "dummy" byte - * after the compressed stream in order to complete decompression and - * return Z_STREAM_END. - * In unzip, i don't wait absolutely Z_STREAM_END because I known the - * size of both compressed and uncompressed data - */ + s->cur_file_info.compression_method; + pfile_in_zip_read_info->file = s->file; + pfile_in_zip_read_info->byte_before_the_zipfile = s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if (!Store) { + pfile_in_zip_read_info->stream.zalloc = (alloc_func) 0; + pfile_in_zip_read_info->stream.zfree = (free_func) 0; + pfile_in_zip_read_info->stream.opaque = (voidpf) 0; + + err = inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised = 1; + /* + * windowBits is passed < 0 to tell that there is no zlib + * header. Note that in this case inflate *requires* an extra + * "dummy" byte after the compressed stream in order to + * complete decompression and return Z_STREAM_END. In unzip, + * i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ } - pfile_in_zip_read_info->rest_read_compressed = - s->cur_file_info.compressed_size ; - pfile_in_zip_read_info->rest_read_uncompressed = - s->cur_file_info.uncompressed_size ; + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size; - - pfile_in_zip_read_info->pos_in_zipfile = - s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + - iSizeVar; - - pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt) 0; s->pfile_in_zip_read = pfile_in_zip_read_info; - return UNZ_OK; + return UNZ_OK; } /* - Read bytes from the current file. - buf contain buffer where data must be copied - len the size of buf. - - return the number of byte copied if somes bytes are copied - return 0 if the end of file was reached - return <0 with error code if there is an error - (UNZ_ERRNO for IO error, or zLib error for uncompress error) -*/ -extern int ZEXPORT unzReadCurrentFile (file, buf, len) + * Read bytes from the current file. buf contain buffer where data must be + * copied len the size of buf. + * + * return the number of byte copied if somes bytes are copied return 0 if the + * end of file was reached return <0 with error code if there is an error + * (UNZ_ERRNO for IO error, or zLib error for uncompress error) + */ +extern int ZEXPORT +unzReadCurrentFile(file, buf, len) unzFile file; - voidp buf; + voidp buf; unsigned len; { - int err=UNZ_OK; - uInt iRead = 0; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + int err = UNZ_OK; + uInt iRead = 0; + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if (pfile_in_zip_read_info == NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE; - if (len==0) + if (len == 0) return 0; - pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; - - pfile_in_zip_read_info->stream.avail_out = (uInt)len; - - if (len>pfile_in_zip_read_info->rest_read_uncompressed) - pfile_in_zip_read_info->stream.avail_out = - (uInt)pfile_in_zip_read_info->rest_read_uncompressed; - - while (pfile_in_zip_read_info->stream.avail_out>0) - { - if ((pfile_in_zip_read_info->stream.avail_in==0) && - (pfile_in_zip_read_info->rest_read_compressed>0)) - { - uInt uReadThis = UNZ_BUFSIZE; - if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + pfile_in_zip_read_info->stream.next_out = (Bytef *) buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt) len; + + if (len > pfile_in_zip_read_info->rest_read_uncompressed) + pfile_in_zip_read_info->stream.avail_out = + (uInt) pfile_in_zip_read_info->rest_read_uncompressed; + + while (pfile_in_zip_read_info->stream.avail_out > 0) { + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed > 0)) { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressed < uReadThis) + uReadThis = (uInt) pfile_in_zip_read_info->rest_read_compressed; if (uReadThis == 0) return UNZ_EOF; if (fseek(pfile_in_zip_read_info->file, - pfile_in_zip_read_info->pos_in_zipfile + - pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, SEEK_SET) != 0) return UNZ_ERRNO; - if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, - pfile_in_zip_read_info->file)!=1) + if (fread(pfile_in_zip_read_info->read_buffer, uReadThis, 1, + pfile_in_zip_read_info->file) != 1) return UNZ_ERRNO; pfile_in_zip_read_info->pos_in_zipfile += uReadThis; - pfile_in_zip_read_info->rest_read_compressed-=uReadThis; - - pfile_in_zip_read_info->stream.next_in = - (Bytef*)pfile_in_zip_read_info->read_buffer; - pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; - } + pfile_in_zip_read_info->rest_read_compressed -= uReadThis; - if (pfile_in_zip_read_info->compression_method==0) - { - uInt uDoCopy,i ; - if (pfile_in_zip_read_info->stream.avail_out < - pfile_in_zip_read_info->stream.avail_in) - uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + pfile_in_zip_read_info->stream.next_in = + (Bytef *) pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt) uReadThis; + } + if (pfile_in_zip_read_info->compression_method == 0) { + uInt uDoCopy, i; + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out; else - uDoCopy = pfile_in_zip_read_info->stream.avail_in ; - - for (i=0;istream.next_out+i) = - *(pfile_in_zip_read_info->stream.next_in+i); - + uDoCopy = pfile_in_zip_read_info->stream.avail_in; + + for (i = 0; i < uDoCopy; i++) + *(pfile_in_zip_read_info->stream.next_out + i) = + *(pfile_in_zip_read_info->stream.next_in + i); + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, - pfile_in_zip_read_info->stream.next_out, - uDoCopy); - pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed -= uDoCopy; pfile_in_zip_read_info->stream.avail_in -= uDoCopy; pfile_in_zip_read_info->stream.avail_out -= uDoCopy; pfile_in_zip_read_info->stream.next_out += uDoCopy; pfile_in_zip_read_info->stream.next_in += uDoCopy; - pfile_in_zip_read_info->stream.total_out += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; - } - else - { - uLong uTotalOutBefore,uTotalOutAfter; + } else { + uLong uTotalOutBefore, uTotalOutAfter; const Bytef *bufBefore; - uLong uOutThis; - int flush=Z_SYNC_FLUSH; + uLong uOutThis; + int flush = Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; bufBefore = pfile_in_zip_read_info->stream.next_out; @@ -1090,69 +1096,71 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len) (pfile_in_zip_read_info->rest_read_compressed == 0)) flush = Z_FINISH; */ - err=inflate(&pfile_in_zip_read_info->stream,flush); + err = inflate(&pfile_in_zip_read_info->stream, flush); uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; - uOutThis = uTotalOutAfter-uTotalOutBefore; - - pfile_in_zip_read_info->crc32 = - crc32(pfile_in_zip_read_info->crc32,bufBefore, - (uInt)(uOutThis)); + uOutThis = uTotalOutAfter - uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32, bufBefore, + (uInt) (uOutThis)); pfile_in_zip_read_info->rest_read_uncompressed -= - uOutThis; + uOutThis; + + iRead += (uInt) (uTotalOutAfter - uTotalOutBefore); - iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); - - if (err==Z_STREAM_END) - return (iRead==0) ? UNZ_EOF : iRead; - if (err!=Z_OK) + if (err == Z_STREAM_END) + return (iRead == 0) ? UNZ_EOF : iRead; + if (err != Z_OK) break; } } - if (err==Z_OK) + if (err == Z_OK) return iRead; return err; } /* - Give the current position in uncompressed data -*/ -extern z_off_t ZEXPORT unztell (file) + * Give the current position in uncompressed data + */ +extern z_off_t ZEXPORT +unztell(file) unzFile file; { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if (pfile_in_zip_read_info == NULL) return UNZ_PARAMERROR; - return (z_off_t)pfile_in_zip_read_info->stream.total_out; + return (z_off_t) pfile_in_zip_read_info->stream.total_out; } /* - return 1 if the end of file was reached, 0 elsewhere -*/ -extern int ZEXPORT unzeof (file) + * return 1 if the end of file was reached, 0 elsewhere + */ +extern int ZEXPORT +unzeof(file) unzFile file; { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if (pfile_in_zip_read_info == NULL) return UNZ_PARAMERROR; - + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) return 1; else @@ -1162,87 +1170,85 @@ extern int ZEXPORT unzeof (file) /* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the local-header version of the extra field (sometimes, there is - more info in the local-header version than in the central-header) - - if buf==NULL, it return the size of the local extra field that can be read - - if buf!=NULL, len is the size of the buffer, the extra header is copied in - buf. - the return value is the number of bytes copied in buf, or (if <0) - the error code -*/ -extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) + * Read extra field from the current file (opened by unzOpenCurrentFile) This + * is the local-header version of the extra field (sometimes, there is more + * info in the local-header version than in the central-header) + * + * if buf==NULL, it return the size of the local extra field that can be read + * + * if buf!=NULL, len is the size of the buffer, the extra header is copied in + * buf. the return value is the number of bytes copied in buf, or (if <0) the + * error code + */ +extern int ZEXPORT +unzGetLocalExtrafield(file, buf, len) unzFile file; - voidp buf; + voidp buf; unsigned len; { - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - uInt read_now; - uLong size_to_read; + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; - if (file==NULL) + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if (pfile_in_zip_read_info == NULL) return UNZ_PARAMERROR; - size_to_read = (pfile_in_zip_read_info->size_local_extrafield - - pfile_in_zip_read_info->pos_local_extrafield); + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); - if (buf==NULL) - return (int)size_to_read; - - if (len>size_to_read) - read_now = (uInt)size_to_read; + if (buf == NULL) + return (int) size_to_read; + + if (len > size_to_read) + read_now = (uInt) size_to_read; else - read_now = (uInt)len ; + read_now = (uInt) len; - if (read_now==0) + if (read_now == 0) return 0; - + if (fseek(pfile_in_zip_read_info->file, - pfile_in_zip_read_info->offset_local_extrafield + - pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, SEEK_SET) != 0) return UNZ_ERRNO; - if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) + if (fread(buf, (uInt) size_to_read, 1, pfile_in_zip_read_info->file) != 1) return UNZ_ERRNO; - return (int)read_now; + return (int) read_now; } /* - Close the file in zip opened with unzipOpenCurrentFile - Return UNZ_CRCERROR if all the file was read but the CRC is not good -*/ -extern int ZEXPORT unzCloseCurrentFile (file) + * Close the file in zip opened with unzipOpenCurrentFile Return UNZ_CRCERROR + * if all the file was read but the CRC is not good + */ +extern int ZEXPORT +unzCloseCurrentFile(file) unzFile file; { - int err=UNZ_OK; + int err = UNZ_OK; - unz_s* s; - file_in_zip_read_info_s* pfile_in_zip_read_info; - if (file==NULL) + unz_s *s; + file_in_zip_read_info_s *pfile_in_zip_read_info; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; - pfile_in_zip_read_info=s->pfile_in_zip_read; + s = (unz_s *) file; + pfile_in_zip_read_info = s->pfile_in_zip_read; - if (pfile_in_zip_read_info==NULL) + if (pfile_in_zip_read_info == NULL) return UNZ_PARAMERROR; - if (pfile_in_zip_read_info->rest_read_uncompressed == 0) - { + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) { if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) - err=UNZ_CRCERROR; + err = UNZ_CRCERROR; } - - TRYFREE(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; if (pfile_in_zip_read_info->stream_initialised) @@ -1251,44 +1257,43 @@ extern int ZEXPORT unzCloseCurrentFile (file) pfile_in_zip_read_info->stream_initialised = 0; TRYFREE(pfile_in_zip_read_info); - s->pfile_in_zip_read=NULL; + s->pfile_in_zip_read = NULL; return err; } /* - Get the global comment string of the ZipFile, in the szComment buffer. - uSizeBuf is the size of the szComment buffer. - return the number of byte copied or an error code <0 -*/ -extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) + * Get the global comment string of the ZipFile, in the szComment buffer. + * uSizeBuf is the size of the szComment buffer. return the number of byte + * copied or an error code <0 + */ +extern int ZEXPORT +unzGetGlobalComment(file, szComment, uSizeBuf) unzFile file; - char *szComment; - uLong uSizeBuf; + char *szComment; + uLong uSizeBuf; { - int err=UNZ_OK; - unz_s* s; - uLong uReadThis ; - if (file==NULL) + //int err = UNZ_OK; /* unused */ + unz_s *s; + uLong uReadThis; + if (file == NULL) return UNZ_PARAMERROR; - s=(unz_s*)file; + s = (unz_s *) file; uReadThis = uSizeBuf; - if (uReadThis>s->gi.size_comment) + if (uReadThis > s->gi.size_comment) uReadThis = s->gi.size_comment; - if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0) + if (fseek(s->file, s->central_pos + 22, SEEK_SET) != 0) return UNZ_ERRNO; - if (uReadThis>0) - { - *szComment='\0'; - if (fread(szComment,(uInt)uReadThis,1,s->file)!=1) - return UNZ_ERRNO; - } - + if (uReadThis > 0) { + *szComment = '\0'; + if (fread(szComment, (uInt) uReadThis, 1, s->file) != 1) + return UNZ_ERRNO; + } if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) - *(szComment+s->gi.size_comment)='\0'; - return (int)uReadThis; + *(szComment + s->gi.size_comment) = '\0'; + return (int) uReadThis; } diff --git a/tgeb/unzip.h b/tgeb/unzip.h index 76692cb..fa17e7c 100644 --- a/tgeb/unzip.h +++ b/tgeb/unzip.h @@ -1,48 +1,51 @@ -/* unzip.h -- IO for uncompress .zip files using zlib - Version 0.15 beta, Mar 19th, 1998, - - Copyright (C) 1998 Gilles Vollant - - This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g - WinZip, InfoZip tools and compatible. - Encryption and multi volume ZipFile (span) are not supported. - Old compressions used by old PKZip 1.x are not supported - - THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE - CAN CHANGE IN FUTURE VERSION !! - I WAIT FEEDBACK at mail info@winimage.com - Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution - - Condition of use and distribution are the same than zlib : - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - -*/ -/* for more info about .ZIP format, see - ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip - PkWare has also a specification at : - ftp://ftp.pkware.com/probdesc.zip */ +/* $Id$ */ +/* + * unzip.h -- IO for uncompress .zip files using zlib Version 0.15 beta, Mar + * 19th, 1998, + * + * Copyright (C) 1998 Gilles Vollant + * + * This unzip package allow extract file from .ZIP file, compatible with PKZip + * 2.04g WinZip, InfoZip tools and compatible. Encryption and multi volume + * ZipFile (span) are not supported. Old compressions used by old PKZip 1.x + * are not supported + * + * THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR + * STRUCTURE CAN CHANGE IN FUTURE VERSION !! I WAIT FEEDBACK at mail + * info@winimage.com Visit also http://www.winimage.com/zLibDll/unzip.htm for + * evolution + * + * Condition of use and distribution are the same than zlib : + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not claim + * that you wrote the original software. If you use this software in a + * product, an acknowledgment in the product documentation would be + * appreciated but is not required. 2. Altered source versions must be + * plainly marked as such, and must not be misrepresented as being the + * original software. 3. This notice may not be removed or altered from any + * source distribution. + * + * + */ +/* + * for more info about .ZIP format, see + * ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip PkWare has also + * a specification at : ftp://ftp.pkware.com/probdesc.zip + */ #ifndef _unz_H #define _unz_H #ifdef __cplusplus -extern "C" { +extern "C" { #endif #ifndef _ZLIB_H @@ -50,12 +53,16 @@ extern "C" { #endif #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) -/* like the STRICT of WIN32, we define a pointer that cannot be converted - from (void*) without cast */ -typedef struct TagunzFile__ { int unused; } unzFile__; -typedef unzFile__ *unzFile; + /* + * like the STRICT of WIN32, we define a pointer that cannot be + * converted from (void*) without cast + */ + typedef struct TagunzFile__ { + int unused; + } unzFile__; + typedef unzFile__ *unzFile; #else -typedef voidp unzFile; + typedef voidp unzFile; #endif @@ -68,208 +75,212 @@ typedef voidp unzFile; #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) -/* tm_unz contain date/time info */ -typedef struct tm_unz_s -{ - uInt tm_sec; /* seconds after the minute - [0,59] */ - uInt tm_min; /* minutes after the hour - [0,59] */ - uInt tm_hour; /* hours since midnight - [0,23] */ - uInt tm_mday; /* day of the month - [1,31] */ - uInt tm_mon; /* months since January - [0,11] */ - uInt tm_year; /* years - [1980..2044] */ -} tm_unz; - -/* unz_global_info structure contain global data about the ZIPfile - These data comes from the end of central dir */ -typedef struct unz_global_info_s -{ - uLong number_entry; /* total number of entries in - the central dir on this disk */ - uLong size_comment; /* size of the global comment of the zipfile */ -} unz_global_info; - - -/* unz_file_info contain information about a file in the zipfile */ -typedef struct unz_file_info_s -{ - uLong version; /* version made by 2 bytes */ - uLong version_needed; /* version needed to extract 2 bytes */ - uLong flag; /* general purpose bit flag 2 bytes */ - uLong compression_method; /* compression method 2 bytes */ - uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ - uLong crc; /* crc-32 4 bytes */ - uLong compressed_size; /* compressed size 4 bytes */ - uLong uncompressed_size; /* uncompressed size 4 bytes */ - uLong size_filename; /* filename length 2 bytes */ - uLong size_file_extra; /* extra field length 2 bytes */ - uLong size_file_comment; /* file comment length 2 bytes */ - - uLong disk_num_start; /* disk number start 2 bytes */ - uLong internal_fa; /* internal file attributes 2 bytes */ - uLong external_fa; /* external file attributes 4 bytes */ - - tm_unz tmu_date; -} unz_file_info; - -extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, - const char* fileName2, - int iCaseSensitivity)); -/* - Compare two filename (fileName1,fileName2). - If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) - If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi - or strcasecmp) - If iCaseSenisivity = 0, case sensitivity is defaut of your operating system - (like 1 on Unix, 2 on Windows) -*/ - - -extern unzFile ZEXPORT unzOpen OF((const char *path)); -/* - Open a Zip file. path contain the full pathname (by example, - on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer - "zlib/zlib111.zip". - If the zipfile cannot be opened (file don't exist or in not valid), the - return value is NULL. - Else, the return value is a unzFile Handle, usable with other function - of this unzip package. -*/ - -extern int ZEXPORT unzClose OF((unzFile file)); -/* - Close a ZipFile opened with unzipOpen. - If there is files inside the .Zip opened with unzOpenCurrentFile (see later), - these files MUST be closed with unzipCloseCurrentFile before call unzipClose. - return UNZ_OK if there is no problem. */ - -extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, - unz_global_info *pglobal_info)); -/* - Write info about the ZipFile in the *pglobal_info structure. - No preparation of the structure is needed - return UNZ_OK if there is no problem. */ - - -extern int ZEXPORT unzGetGlobalComment OF((unzFile file, - char *szComment, - uLong uSizeBuf)); -/* - Get the global comment string of the ZipFile, in the szComment buffer. - uSizeBuf is the size of the szComment buffer. - return the number of byte copied or an error code <0 -*/ - - -/***************************************************************************/ -/* Unzip package allow you browse the directory of the zipfile */ - -extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); -/* - Set the current file of the zipfile to the first file. - return UNZ_OK if there is no problem -*/ - -extern int ZEXPORT unzGoToNextFile OF((unzFile file)); -/* - Set the current file of the zipfile to the next file. - return UNZ_OK if there is no problem - return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. -*/ - -extern int ZEXPORT unzLocateFile OF((unzFile file, - const char *szFileName, - int iCaseSensitivity)); -/* - Try locate the file szFileName in the zipfile. - For the iCaseSensitivity signification, see unzStringFileNameCompare - - return value : - UNZ_OK if the file is found. It becomes the current file. - UNZ_END_OF_LIST_OF_FILE if the file is not found -*/ - - -extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, - unz_file_info *pfile_info, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); -/* - Get Info about the current file - if pfile_info!=NULL, the *pfile_info structure will contain somes info about - the current file - if szFileName!=NULL, the filemane string will be copied in szFileName - (fileNameBufferSize is the size of the buffer) - if extraField!=NULL, the extra field information will be copied in extraField - (extraFieldBufferSize is the size of the buffer). - This is the Central-header version of the extra field - if szComment!=NULL, the comment string of the file will be copied in szComment - (commentBufferSize is the size of the buffer) -*/ - -/***************************************************************************/ -/* for reading the content of the current zipfile, you can open it, read data - from it, and close it (you can close it before reading all the file) - */ - -extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); -/* - Open for reading data the current file in the zipfile. - If there is no error, the return value is UNZ_OK. -*/ - -extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); -/* - Close the file in zip opened with unzOpenCurrentFile - Return UNZ_CRCERROR if all the file was read but the CRC is not good -*/ - - -extern int ZEXPORT unzReadCurrentFile OF((unzFile file, - voidp buf, - unsigned len)); -/* - Read bytes from the current file (opened by unzOpenCurrentFile) - buf contain buffer where data must be copied - len the size of buf. - - return the number of byte copied if somes bytes are copied - return 0 if the end of file was reached - return <0 with error code if there is an error - (UNZ_ERRNO for IO error, or zLib error for uncompress error) -*/ - -extern z_off_t ZEXPORT unztell OF((unzFile file)); -/* - Give the current position in uncompressed data -*/ - -extern int ZEXPORT unzeof OF((unzFile file)); -/* - return 1 if the end of file was reached, 0 elsewhere -*/ - -extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, - voidp buf, - unsigned len)); -/* - Read extra field from the current file (opened by unzOpenCurrentFile) - This is the local-header version of the extra field (sometimes, there is - more info in the local-header version than in the central-header) - - if buf==NULL, it return the size of the local extra field - - if buf!=NULL, len is the size of the buffer, the extra header is copied in - buf. - the return value is the number of bytes copied in buf, or (if <0) - the error code -*/ + /* tm_unz contain date/time info */ + typedef struct tm_unz_s { + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour;/* hours since midnight - [0,23] */ + uInt tm_mday;/* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year;/* years - [1980..2044] */ + } tm_unz; + + /* + * unz_global_info structure contain global data about the ZIPfile + * These data comes from the end of central dir + */ + typedef struct unz_global_info_s { + uLong number_entry; /* total number of entries in the + * central dir on this disk */ + uLong size_comment; /* size of the global comment of the + * zipfile */ + } unz_global_info; + + + /* unz_file_info contain information about a file in the zipfile */ + typedef struct unz_file_info_s { + uLong version;/* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 + * bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate;/* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 + * bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 + * bytes */ + + uLong disk_num_start; /* disk number start 2 + * bytes */ + uLong internal_fa; /* internal file attributes 2 + * bytes */ + uLong external_fa; /* external file attributes 4 + * bytes */ + + tm_unz tmu_date; + } unz_file_info; + + extern int ZEXPORT unzStringFileNameCompare OF((const char *fileName1, + const char *fileName2, + int iCaseSensitivity)); + /* + * Compare two filename (fileName1,fileName2). If iCaseSenisivity = + * 1, comparision is case sensitivity (like strcmp) If + * iCaseSenisivity = 2, comparision is not case sensitivity (like + * strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is + * defaut of your operating system (like 1 on Unix, 2 on Windows) + */ + + + extern unzFile ZEXPORT unzOpen OF((const char *path)); + /* + * Open a Zip file. path contain the full pathname (by example, on a + * Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer + * "zlib/zlib111.zip". If the zipfile cannot be opened (file don't + * exist or in not valid), the return value is NULL. Else, the return + * value is a unzFile Handle, usable with other function of this + * unzip package. + */ + + extern int ZEXPORT unzClose OF((unzFile file)); + /* + * Close a ZipFile opened with unzipOpen. If there is files inside + * the .Zip opened with unzOpenCurrentFile (see later), these files + * MUST be closed with unzipCloseCurrentFile before call unzipClose. + * return UNZ_OK if there is no problem. + */ + + extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info * pglobal_info)); + /* + * Write info about the ZipFile in the *pglobal_info structure. No + * preparation of the structure is needed return UNZ_OK if there is + * no problem. + */ + + extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); + /* + * Get the global comment string of the ZipFile, in the szComment + * buffer. uSizeBuf is the size of the szComment buffer. return the + * number of byte copied or an error code <0 + */ + + + /***************************************************************************/ + /* Unzip package allow you browse the directory of the zipfile */ + + extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); + /* + * Set the current file of the zipfile to the first file. return + * UNZ_OK if there is no problem + */ + + extern int ZEXPORT unzGoToNextFile OF((unzFile file)); + /* + * Set the current file of the zipfile to the next file. return + * UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if + * the actual file was the latest. + */ + + extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); + /* + * Try locate the file szFileName in the zipfile. For the + * iCaseSensitivity signification, see unzStringFileNameCompare + * + * return value : UNZ_OK if the file is found. It becomes the current + * file. UNZ_END_OF_LIST_OF_FILE if the file is not found + */ + + + extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info * pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + /* + * Get Info about the current file if pfile_info!=NULL, the + * *pfile_info structure will contain somes info about the current + * file if szFileName!=NULL, the filemane string will be copied in + * szFileName (fileNameBufferSize is the size of the buffer) if + * extraField!=NULL, the extra field information will be copied in + * extraField (extraFieldBufferSize is the size of the buffer). This + * is the Central-header version of the extra field if + * szComment!=NULL, the comment string of the file will be copied in + * szComment (commentBufferSize is the size of the buffer) + */ + + /***************************************************************************/ + /* + * for reading the content of the current zipfile, you can open it, + * read data from it, and close it (you can close it before reading + * all the file) + */ + + extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); + /* + * Open for reading data the current file in the zipfile. If there is + * no error, the return value is UNZ_OK. + */ + + extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); + /* + * Close the file in zip opened with unzOpenCurrentFile Return + * UNZ_CRCERROR if all the file was read but the CRC is not good + */ + + + extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); + /* + * Read bytes from the current file (opened by unzOpenCurrentFile) + * buf contain buffer where data must be copied len the size of buf. + * + * return the number of byte copied if somes bytes are copied return 0 + * if the end of file was reached return <0 with error code if there + * is an error (UNZ_ERRNO for IO error, or zLib error for uncompress + * error) + */ + + extern z_off_t ZEXPORT unztell OF((unzFile file)); + /* + * Give the current position in uncompressed data + */ + + extern int ZEXPORT unzeof OF((unzFile file)); + /* + * return 1 if the end of file was reached, 0 elsewhere + */ + + extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); + /* + * Read extra field from the current file (opened by + * unzOpenCurrentFile) This is the local-header version of the extra + * field (sometimes, there is more info in the local-header version + * than in the central-header) + * + * if buf==NULL, it return the size of the local extra field + * + * if buf!=NULL, len is the size of the buffer, the extra header is + * copied in buf. the return value is the number of bytes copied in + * buf, or (if <0) the error code + */ #ifdef __cplusplus } #endif -#endif /* _unz_H */ +#endif /* _unz_H */ diff --git a/tgeb/update.c b/tgeb/update.c index 307fb75..ea1d38b 100644 --- a/tgeb/update.c +++ b/tgeb/update.c @@ -30,25 +30,25 @@ #include "unzip.h" #include "tgebup.h" -#define DATFILE "/tmp/tarife.zip" +#define DATFILE "tarife" const char *TGebURL = "www.billiger-telefonieren.de"; const char *TGebGET = "GET /downloads/tgeb/tarife_%.4i%.2i%.2i.zip HTTP/1.0\n\n"; -static void unzip(void); +static void unzip(void); void tgeb_update(struct tm * tm) { struct hostent *he; struct sockaddr_in sin; - int sockfd; - char *get; - char *buf; - FILE *fd; - char *file; - int filelen; - int offset = 0; + int sockfd; + char *get; + char *buf; + FILE *fd; + char *file; + int filelen; + int offset = 0; if (!(he = gethostbyname(TGebURL))) err(1, "gethostbyname"); @@ -58,10 +58,10 @@ tgeb_update(struct tm * tm) memset(&sin, '\0', sizeof(struct sockaddr_in)); sin.sin_family = AF_INET; sin.sin_port = htons(80); - sin.sin_addr = *((struct in_addr *)he->h_addr); + sin.sin_addr = *((struct in_addr *) he->h_addr); - if ((connect(sockfd, (struct sockaddr *)&sin, - sizeof(struct sockaddr))) == -1) + if ((connect(sockfd, (struct sockaddr *) & sin, + sizeof(struct sockaddr))) == -1) err(1, "connect"); if (!(get = malloc(sizeof(char) * strlen(TGebGET)))) @@ -74,8 +74,8 @@ tgeb_update(struct tm * tm) if (!(buf = malloc(sizeof(char) * 1024))) err(1, "malloc"); - for(;;) { - int block; + for (;;) { + int block; if ((block = recv(sockfd, &buf[offset], 1024, NULL)) == -1) err(1, "recv"); if (block == 0) @@ -100,24 +100,24 @@ tgeb_update(struct tm * tm) void unzip(void) { - FILE *fd; - unzFile *unzfd; + FILE *fd; + unzFile *unzfd; unz_global_info gi; unz_file_info fi; - char FileName[256]; - char buf[1024]; - int i, len; - + char FileName[256]; + char buf[1024]; + int i, len; + if (!(unzfd = unzOpen(DATFILE))) errx(1, "unzOpen %s", DATFILE); unzGetGlobalInfo(unzfd, &gi); for (i = 0; i < gi.number_entry; i++) { unzGetCurrentFileInfo(unzfd, &fi, FileName, sizeof(FileName), - NULL, 0, NULL, 0); + NULL, 0, NULL, 0); unzOpenCurrentFile(unzfd); if (!(fd = fopen(FileName, "wb"))) err(1, "fopen %s", FileName); - while((len = unzReadCurrentFile(unzfd, &buf, 1024))) { + while ((len = unzReadCurrentFile(unzfd, &buf, 1024))) { fwrite(buf, len, 1, fd); } fclose(fd); -- cgit v1.2.3