diff -r -u webalizer-2.01-10.init/Makefile.in webalizer-2.01-10/Makefile.in --- webalizer-2.01-10.init/Makefile.in 2000-10-16 21:15:53.000000000 -0700 +++ webalizer-2.01-10/Makefile.in 2007-01-23 23:02:18.000000000 -0800 @@ -23,8 +23,8 @@ MANDIR = @mandir@/man1 ETCDIR = @ETCDIR@ CC = @CC@ -CFLAGS = @CFLAGS@ -LIBS = @LIBS@ +CFLAGS = @CFLAGS@ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DMODIFY_LOG_LINES -Wall -Werror +LIBS = @LIBS@ -lpcre DEFS = -DETCDIR=\"@ETCDIR@\" @DEFS@ @OPTS@ LDFLAGS= @LDFLAGS@ INSTALL= @INSTALL@ diff -r -u webalizer-2.01-10.init/Makefile.std webalizer-2.01-10/Makefile.std --- webalizer-2.01-10.init/Makefile.std 2000-10-16 21:15:53.000000000 -0700 +++ webalizer-2.01-10/Makefile.std 2007-01-23 23:02:18.000000000 -0800 @@ -24,7 +24,7 @@ MANDIR = ${prefix}/man/man1 ETCDIR = /etc CC = gcc -CFLAGS = -Wall -O2 +CFLAGS = -Wall -O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DMODIFY_LOG_LINES LIBS = -lgd -lpng -lz -lm LDFLAGS= -L/usr/local/lib diff -r -u webalizer-2.01-10.init/country-codes.txt webalizer-2.01-10/country-codes.txt --- webalizer-2.01-10.init/country-codes.txt 2000-09-28 20:49:25.000000000 -0700 +++ webalizer-2.01-10/country-codes.txt 2007-01-23 23:02:18.000000000 -0800 @@ -1,7 +1,8 @@ +AC Ascension Island AD Andorra AE United Arab Emirates AF Afghanistan -AG Antigua and Barbuda +AG Antigua & Barbuda AI Anguilla AL Albania AM Armenia @@ -14,7 +15,7 @@ AU Australia AW Aruba AZ Azerbaijan -BA Bosnia and Herzegovina +BA Bosnia & Herzegovina BB Barbados BD Bangladesh BE Belgium @@ -35,10 +36,11 @@ BZ Belize CA Canada CC Cocos (Keeling) Islands +CD Congo, Dem. Rep. of the CF Central African Republic -CG Congo +CG Congo, Republic of CH Switzerland -CI Cote D'Ivoire (Ivory Coast) +CI Cote D'Ivoire CK Cook Islands CL Chile CM Cameroon @@ -67,7 +69,7 @@ FI Finland FJ Fiji FK Falkland Islands (Malvinas) -FM Micronesia +FM Micronesia, Fed. State of FO Faroe Islands FR France FX France, Metropolitan @@ -76,6 +78,7 @@ GD Grenada GE Georgia GF French Guiana +GG Guernsey GH Ghana GI Gibraltar GL Greenland @@ -84,13 +87,13 @@ GP Guadeloupe GQ Equatorial Guinea GR Greece -GS S. Georgia and S. Sandwich Isls. +GS S.Georgia & S.Sandwich Isls. GT Guatemala GU Guam GW Guinea-Bissau GY Guyana HK Hong Kong -HM Heard and McDonald Islands +HM Heard & McDonald Islands HN Honduras HR Croatia (Hrvatska) HT Haiti @@ -98,12 +101,14 @@ ID Indonesia IE Ireland IL Israel +IM Isle of Man IN India -IO British Indian Ocean Territory +IO British Indian Ocean Terr. IQ Iraq IR Iran IS Iceland IT Italy +JE Jersey JM Jamaica JO Jordan JP Japan @@ -112,12 +117,13 @@ KH Cambodia KI Kiribati KM Comoros -KN Saint Kitts and Nevis +KN Saint Kitts & Nevis KP Korea (North) KR Korea (South) KW Kuwait KY Cayman Islands KZ Kazakhstan +LA Lao People's Dem. Republic LA Laos LB Lebanon LC Saint Lucia @@ -128,15 +134,15 @@ LT Lithuania LU Luxembourg LV Latvia -LY Libya +LY Libyan Arab Jamahiriya MA Morocco MC Monaco -MD Moldova +MD Moldova, Republic of MG Madagascar MH Marshall Islands -MK Macedonia +MK Macedonia, Republic of ML Mali -MM Myanmar +MM Burma (Myanmar) MN Mongolia MO Macau MP Northern Mariana Islands @@ -162,7 +168,7 @@ NR Nauru NT Neutral Zone NU Niue -NZ New Zealand (Aotearoa) +NZ New Zealand OM Oman PA Panama PE Peru @@ -171,38 +177,39 @@ PH Philippines PK Pakistan PL Poland -PM St. Pierre and Miquelon -PN Pitcairn +PM St. Pierre & Miquelon +PN Pitcairn Island PR Puerto Rico +PS Palestinian Territories PT Portugal PW Palau PY Paraguay QA Qatar -RE Reunion +RE Reunion Island RO Romania RU Russian Federation RW Rwanda SA Saudi Arabia -Sb Solomon Islands +SB Solomon Islands SC Seychelles SD Sudan SE Sweden SG Singapore SH St. Helena SI Slovenia -SJ Svalbard and Jan Mayen Islands +SJ Svalbard & Jan Mayen Isls. SK Slovak Republic SL Sierra Leone SM San Marino SN Senegal SO Somalia SR Suriname -ST Sao Tome and Principe +ST Sao Tome & Principe SU USSR (former) SV El Salvador -SY Syria +SY Syrian Arab Republic SZ Swaziland -TC Turks and Caicos Islands +TC Turks & Caicos Islands TD Chad TF French Southern Territories TG Togo @@ -214,7 +221,7 @@ TO Tonga TP East Timor TR Turkey -TT Trinidad and Tobago +TT Trinidad & Tobago TV Tuvalu TW Taiwan TZ Tanzania @@ -225,14 +232,14 @@ US United States UY Uruguay UZ Uzbekistan -VA Vatican City State (Holy See) -VC Saint Vincent and the Grenadines +VA Holy See (Vatican City) +VC Saint Vincent & the Grenadines VE Venezuela -VG Virgin Islands (British) -VI Virgin Islands (U.S.) -VN Viet Nam +VG Virgin Islands (UK) +VI Virgin Islands (US) +VN Vietnam VU Vanuatu -WF Wallis and Futuna Islands +WF Wallis & Futuna Islands WS Samoa YE Yemen YT Mayotte @@ -241,12 +248,20 @@ ZM Zambia ZR Zaire ZW Zimbabwe -COM US Commercial -EDU US Educational -GOV US Government -INT International -MIL US Military -NET Network -ORG Non-Profit Organization -ARPA Old style Arpanet -NATO Nato field +BIZ Business (biz) +COM Commercial (com) +EDU Educational (edu) +GOV US Government (gov) +INT International (int) +MIL US Military (mil) +NET Network (net) +ORG Non-Profit Organization (org) +PRO Professional firm (pro) +ARPA Old style Arpanet (arpa) +INFO Information (info) +NAME Family name (name) +NATO Nato field (nato) +A1 Anonymous Proxy +A2 Satellite Provider +AP Asia/Pacific Region +EU Europe Region diff -r -u webalizer-2.01-10.init/dns_resolv.c webalizer-2.01-10/dns_resolv.c --- webalizer-2.01-10.init/dns_resolv.c 2002-04-16 13:46:20.000000000 -0700 +++ webalizer-2.01-10/dns_resolv.c 2007-01-23 23:02:18.000000000 -0800 @@ -178,7 +178,7 @@ int i; int save_verbose=verbose; - u_long listEntries = 0; + u_int64_t listEntries = 0; struct sigaction sigPipeAction; struct stat dbStat; @@ -338,7 +338,7 @@ if (time_me || (verbose>1)) { if (verbose<2 && time_me) printf("DNS: "); - printf("%lu %s ",listEntries, msg_addresses); + printf("%lld %s ",listEntries, msg_addresses); /* get processing time (end-start) */ temp_time = (float)(end_time-start_time)/CLK_TCK; diff -r -u webalizer-2.01-10.init/dns_resolv.h webalizer-2.01-10/dns_resolv.h --- webalizer-2.01-10.init/dns_resolv.h 2000-09-28 20:51:02.000000000 -0700 +++ webalizer-2.01-10/dns_resolv.h 2007-01-23 23:02:18.000000000 -0800 @@ -33,7 +33,7 @@ #define DNS_CHILD_RUNNING 0x2 #define MAXCHILD 100 /* Maximum number of DNS children */ -#define DNS_CACHE_TTL 86400*3 /* TTL of an Entry in the DNS cache */ +#define DNS_CACHE_TTL 86400*32 /* TTL of an Entry in the DNS cache */ #endif /* USE_DNS */ #endif /* _DNS_RESOLV_H */ diff -r -u webalizer-2.01-10.init/graphs.c webalizer-2.01-10/graphs.c --- webalizer-2.01-10.init/graphs.c 2001-06-15 01:34:24.000000000 -0700 +++ webalizer-2.01-10/graphs.c 2007-01-23 23:02:18.000000000 -0800 @@ -71,7 +71,7 @@ FILE *out; /* output file for PNG */ char maxvaltxt[32]; /* graph values */ float percent; /* percent storage */ -u_long julday; /* julday value */ +u_int64_t julday; /* julday value */ struct pie_data { int x; int y; /* line x,y */ int mx; int my; }; /* midpoint x,y */ @@ -88,19 +88,19 @@ int year_graph6x( char *fname, /* file name use */ char *title, /* title for graph */ int fmonth, /* begin month number */ - u_long data1[12], /* data1 (hits) */ - u_long data2[12], /* data2 (files) */ - u_long data3[12], /* data3 (sites) */ - double data4[12], /* data4 (kbytes) */ - u_long data5[12], /* data5 (views) */ - u_long data6[12]) /* data6 (visits) */ + u_int64_t data1[MH], /* data1 (hits) */ + u_int64_t data2[MH], /* data2 (files) */ + u_int64_t data3[MH], /* data3 (sites) */ + u_int64_t data4[MH], /* data4 (kbytes) */ + u_int64_t data5[MH], /* data5 (views) */ + u_int64_t data6[MH]) /* data6 (visits) */ { /* local variables */ int i,j,x1,y1,x2; int s_mth; - u_long maxval=1; + u_int64_t maxval=1; double fmaxval=0.0; /* initalize the graph */ @@ -132,12 +132,12 @@ 238,s_month[s_mth-1],black); /* specific array */ s_mth++; if (s_mth > 12) s_mth = 1; - if (data1[i] > maxval) maxval = data1[i]; /* get max val */ - if (data2[i] > maxval) maxval = data2[i]; - if (data5[i] > maxval) maxval = data5[i]; + if (data1[MH-12+i] > maxval) maxval = data1[MH-12+i]; /* get max val */ + if (data2[MH-12+i] > maxval) maxval = data2[MH-12+i]; + if (data5[MH-12+i] > maxval) maxval = data5[MH-12+i]; } if (maxval <= 0) maxval = 1; - sprintf(maxvaltxt, "%lu", maxval); + sprintf(maxvaltxt, "%lld", maxval); gdImageStringUp(im,gdFontSmall,8,26+(strlen(maxvaltxt)*6),maxvaltxt,black); if (graph_legend) /* print color coded legends? */ @@ -177,7 +177,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data1[s_mth++ -1] / (float)maxval); + percent = ((float)data1[MH-12+s_mth++ -1] / (float)maxval); if (percent <= 0.0) continue; x1 = 26 + (i*23); x2 = x1 + 13; @@ -191,7 +191,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data2[s_mth++ -1] / (float)maxval); + percent = ((float)data2[MH-12+s_mth++ -1] / (float)maxval); if (percent <= 0.0) continue; x1 = 29 + (i*23); x2 = x1 + 13; @@ -205,7 +205,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data5[s_mth++ -1] / (float)maxval); + percent = ((float)data5[MH-12+s_mth++ -1] / (float)maxval); if (percent <= 0.0) continue; x1 = 32 + (i*23); x2 = x1 + 13; @@ -217,11 +217,11 @@ maxval=0; for (i=0; i<12; i++) { - if (data3[i] > maxval) maxval = data3[i]; /* get max val */ - if (data6[i] > maxval) maxval = data6[i]; + if (data3[MH-12+i] > maxval) maxval = data3[MH-12+i]; /* get max val */ + if (data6[MH-12+i] > maxval) maxval = data6[MH-12+i]; } if (maxval <= 0) maxval = 1; - sprintf(maxvaltxt, "%lu", maxval); + sprintf(maxvaltxt, "%lld", maxval); gdImageStringUp(im, gdFontSmall,493,26+(strlen(maxvaltxt)*6), maxvaltxt, black); @@ -230,7 +230,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data6[s_mth++ -1] / (float)maxval); + percent = ((float)data6[MH-12+s_mth++ -1] / (float)maxval); if (percent <= 0.0) continue; x1 = 310 + (i*15); x2 = x1 + 8; @@ -244,7 +244,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data3[s_mth++ -1] / (float)maxval); + percent = ((float)data3[MH-12+s_mth++ -1] / (float)maxval); if (percent <= 0.0) continue; x1 = 314 + (i*15); x2 = x1 + 7; @@ -255,7 +255,7 @@ fmaxval=0.0; for (i=0; i<12; i++) - if (data4[i] > fmaxval) fmaxval = data4[i]; /* get max val */ + if (data4[MH-12+i] > fmaxval) fmaxval = data4[MH-12+i];/* get max val */ if (fmaxval <= 0.0) fmaxval = 1.0; sprintf(maxvaltxt, "%.0f", fmaxval); gdImageStringUp(im, gdFontSmall,493,130+(strlen(maxvaltxt)*6), @@ -266,7 +266,7 @@ for (i=0; i<12; i++) { if (s_mth > 12) s_mth = 1; - percent = ((float)data4[s_mth++ -1] / (float)fmaxval); + percent = ((float)data4[MH-12+s_mth++ -1] / (float)fmaxval); if (percent <= 0.0) continue; x1 = 311 + (i*15); x2 = x1 + 9; @@ -299,17 +299,17 @@ char *title, /* graph title */ int month, /* graph month */ int year, /* graph year */ - u_long data1[31], /* data1 (hits) */ - u_long data2[31], /* data2 (files) */ - u_long data3[31], /* data3 (sites) */ - double data4[31], /* data4 (kbytes) */ - u_long data5[31], /* data5 (views) */ - u_long data6[31]) /* data6 (visits) */ + u_int64_t data1[31], /* data1 (hits) */ + u_int64_t data2[31], /* data2 (files) */ + u_int64_t data3[31], /* data3 (sites) */ + u_int64_t data4[31], /* data4 (kbytes) */ + u_int64_t data5[31], /* data5 (views) */ + u_int64_t data6[31]) /* data6 (visits) */ { /* local variables */ int i,j,s,x1,y1,x2; - u_long maxval=0; + u_int64_t maxval=0; double fmaxval=0.0; /* calc julian date for month */ @@ -354,7 +354,7 @@ if (data5[i] > maxval) maxval = data5[i]; } if (maxval <= 0) maxval = 1; - sprintf(maxvaltxt, "%lu", maxval); + sprintf(maxvaltxt, "%lld", maxval); gdImageStringUp(im, gdFontSmall,8,26+(strlen(maxvaltxt)*6), maxvaltxt,black); @@ -434,7 +434,7 @@ if (data6[i]>maxval) maxval = data6[i]; } if (maxval <= 0) maxval = 1; - sprintf(maxvaltxt, "%lu", maxval); + sprintf(maxvaltxt, "%lld", maxval); gdImageStringUp(im, gdFontSmall,8,180+(strlen(maxvaltxt)*6), maxvaltxt, black); @@ -502,14 +502,14 @@ int day_graph3( char *fname, char *title, - u_long data1[24], - u_long data2[24], - u_long data3[24]) + u_int64_t data1[24], + u_int64_t data2[24], + u_int64_t data3[24]) { /* local variables */ int i,j,s,x1,y1,x2; - u_long maxval=0; + u_int64_t maxval=0; /* initalize the graph */ init_graph(title,512,256); @@ -531,7 +531,7 @@ if (data3[i] > maxval) maxval = data3[i]; } if (maxval <= 0) maxval = 1; - sprintf(maxvaltxt, "%lu", maxval); + sprintf(maxvaltxt, "%lld", maxval); gdImageStringUp(im, gdFontSmall, 8, 26+(strlen(maxvaltxt)*6), maxvaltxt, black); @@ -607,8 +607,8 @@ /* */ /*****************************************************************/ -int pie_chart(char *fname, char *title, u_long t_val, - u_long data1[], char *legend[]) +int pie_chart(char *fname, char *title, u_int64_t t_val, + u_int64_t data1[], char *legend[]) { int i,x,percent,y=47; double s_arc=0.0; diff -r -u webalizer-2.01-10.init/graphs.h webalizer-2.01-10/graphs.h --- webalizer-2.01-10.init/graphs.h 2000-09-28 20:50:30.000000000 -0700 +++ webalizer-2.01-10/graphs.h 2007-01-23 23:02:18.000000000 -0800 @@ -1,11 +1,11 @@ #ifndef _GRAPHS_H #define _GRAPHS_H -extern int month_graph6(char *, char *, int, int, u_long *, - u_long *, u_long *, double *, u_long *, u_long *); +extern int month_graph6(char *, char *, int, int, u_int64_t *, + u_int64_t *, u_int64_t *, u_int64_t *, u_int64_t *, u_int64_t *); extern int year_graph6x(char *, char *, int, - u_long *, u_long *, u_long *, double *, u_long *, u_long *); -extern int day_graph3(char *, char *, u_long *, u_long *, u_long *); -extern int pie_chart(char *, char *, u_long, u_long *, char **); + u_int64_t *, u_int64_t *, u_int64_t *, u_int64_t *, u_int64_t *, u_int64_t *); +extern int day_graph3(char *, char *, u_int64_t *, u_int64_t *, u_int64_t *); +extern int pie_chart(char *, char *, u_int64_t, u_int64_t *, char **); #endif /* _GRAPHS_H */ diff -r -u webalizer-2.01-10.init/hashtab.c webalizer-2.01-10/hashtab.c --- webalizer-2.01-10.init/hashtab.c 2001-06-15 01:34:24.000000000 -0700 +++ webalizer-2.01-10/hashtab.c 2007-01-23 23:02:18.000000000 -0800 @@ -75,11 +75,12 @@ #ifdef USE_DNS DNODEPTR new_dnode(char *); /* new DNS node */ #endif /* USE_DNS */ +PNODEPTR new_pnode(char *); /* new dir node */ void update_entry(char *); /* update entry/exit */ void update_exit(char *); /* page totals */ -u_long hash(char *); /* hash function */ +u_int64_t hash(char *); /* hash function */ /* local data */ @@ -93,6 +94,7 @@ #ifdef USE_DNS DNODEPTR host_table[MAXHASH]; /* DNS hash table */ #endif /* USE_DNS */ +PNODEPTR di_htab[MAXHASH]; /* for URL dir stats */ /*********************************************/ @@ -111,6 +113,7 @@ #ifdef USE_DNS /* del_dlist(host_table); */ /* delete DNS hash table */ #endif /* USE_DNS */ + del_plist(di_htab); } /*********************************************/ @@ -154,12 +157,12 @@ int put_hnode( char *str, /* Hostname */ int type, /* obj type */ - u_long count, /* hit count */ - u_long file, /* File flag */ - double xfer, /* xfer size */ - u_long *ctr, /* counter */ - u_long visit, /* visits */ - u_long tstamp,/* timestamp */ + u_int64_t count, /* hit count */ + u_int64_t file, /* File flag */ + u_int64_t xfer, /* xfer size */ + u_int64_t *ctr, /* counter */ + u_int64_t visit, /* visits */ + u_int64_t tstamp,/* timestamp */ char *lasturl, /* lasturl */ HNODEPTR *htab) /* ptr>next */ { @@ -341,8 +344,8 @@ /* PUT_UNODE - insert/update URL node */ /*********************************************/ -int put_unode(char *str, int type, u_long count, double xfer, - u_long *ctr, u_long entry, u_long exit, UNODEPTR *htab) +int put_unode(char *str, int type, u_int64_t count, u_int64_t xfer, + u_int64_t *ctr, u_int64_t entry, u_int64_t exit, UNODEPTR *htab) { UNODEPTR cptr,nptr; @@ -468,7 +471,7 @@ /* PUT_RNODE - insert/update referrer node */ /*********************************************/ -int put_rnode(char *str, int type, u_long count, u_long *ctr, RNODEPTR *htab) +int put_rnode(char *str, int type, u_int64_t count, u_int64_t *ctr, RNODEPTR *htab) { RNODEPTR cptr,nptr; @@ -516,7 +519,7 @@ if (nptr!=NULL) { if (type==OBJ_GRP) nptr->flag=OBJ_GRP; - else if (isinlist(hidden_refs,nptr->string)!=NULL) + else if (isinlist(hidden_refs,skip_proto(nptr->string))!=NULL) nptr->flag=OBJ_HIDE; } return nptr==NULL; @@ -587,7 +590,7 @@ /* PUT_ANODE - insert/update user agent node */ /*********************************************/ -int put_anode(char *str, int type, u_long count, u_long *ctr, ANODEPTR *htab) +int put_anode(char *str, int type, u_int64_t count, u_int64_t *ctr, ANODEPTR *htab) { ANODEPTR cptr,nptr; @@ -702,7 +705,7 @@ /* PUT_SNODE - insert/update search str node */ /*********************************************/ -int put_snode(char *str, u_long count, SNODEPTR *htab) +int put_snode(char *str, u_int64_t count, SNODEPTR *htab) { SNODEPTR cptr,nptr; @@ -810,12 +813,12 @@ int put_inode( char *str, /* ident str */ int type, /* obj type */ - u_long count, /* hit count */ - u_long file, /* File flag */ - double xfer, /* xfer size */ - u_long *ctr, /* counter */ - u_long visit, /* visits */ - u_long tstamp,/* timestamp */ + u_int64_t count, /* hit count */ + u_int64_t file, /* File flag */ + u_int64_t xfer, /* xfer size */ + u_int64_t *ctr, /* counter */ + u_int64_t visit, /* visits */ + u_int64_t tstamp,/* timestamp */ INODEPTR *htab) /* hashtable */ { INODEPTR cptr,nptr; @@ -1044,14 +1047,148 @@ #endif /* USE_DNS */ /*********************************************/ -/* HASH - return hash value for string */ +/* NEW_PNODE - dir node creation */ /*********************************************/ -u_long hash(char *str) +PNODEPTR new_pnode(char *str) { - u_long hashval; - for (hashval = 0; *str != '\0'; str++) - hashval = *str + 31 * hashval; + PNODEPTR newptr; + char *sptr; + + if (strlen(str) >= MAXURLH) + { + if (verbose) + { + fprintf(stderr,"[new_pnode] %s (%d)",msg_big_one,strlen(str)); + if (debug_mode) + fprintf(stderr,":\n--> %s",str); + fprintf(stderr,"\n"); + } + str[MAXURLH-1]=0; + } + + if ( (sptr=malloc(strlen(str)+1))==NULL) return (PNODEPTR)NULL; + strcpy(sptr,str); + + if (( newptr = malloc(sizeof(struct pnode))) != NULL) + { + newptr->string=sptr; + newptr->count = 0; + newptr->flag = OBJ_REG; + } + else free(sptr); + return newptr; +} + +/*********************************************/ +/* PUT_PNODE - insert/update dir node */ +/*********************************************/ + +int put_pnode(char *str, int type, u_int64_t count, u_int64_t xfer, + u_int64_t *ctr, PNODEPTR *htab) +{ + PNODEPTR cptr,nptr; + + if (str[0]=='-') return 0; + + /* check if hashed */ + if ( (cptr = htab[hash(str)]) == NULL) + { + /* not hashed */ + if ( (nptr=new_pnode(str)) != NULL) + { + nptr->flag = type; + nptr->count= count; + nptr->xfer = xfer; + nptr->next = NULL; + htab[hash(str)] = nptr; + (*ctr)++; + } + } + else + { + /* hashed */ + while (cptr != NULL) + { + if (strcmp(cptr->string,str)==0) + { + if (type==cptr->flag) + { + /* found... bump counter */ + cptr->count+=count; + cptr->xfer += xfer; + return 0; + } + } + cptr = cptr->next; + } + /* not found... */ + if ( (nptr = new_pnode(str)) != NULL) + { + nptr->flag = type; + nptr->count= count; + nptr->xfer = xfer; + nptr->next = htab[hash(str)]; + htab[hash(str)]=nptr; + (*ctr)++; + } + } + if (nptr!=NULL) + { + if (isinlist(hidden_dirs,nptr->string)!=NULL) + nptr->flag=OBJ_HIDE; + } + return nptr==NULL; +} + +/*********************************************/ +/* DEL_PLIST - delete dir hash table */ +/*********************************************/ + +void del_plist(PNODEPTR *htab) +{ + /* free memory used by hash table */ + PNODEPTR aptr,temp; + int i; + + for (i=0;inext; + free (aptr->string); /* free up dir string memory */ + free (aptr); /* free up dir struct node */ + aptr = temp; + } + htab[i]=NULL; + } + } +} + +/************************************************************/ +/* HASH - return 64 bit FNV hash value for string */ +/* */ +/* See http://www.isthe.com/chongo/tech/comp/fnv/index.html */ +/************************************************************/ + +u_int64_t hash(char *str) +{ + u_int64_t hashval; + + /* perform a 64 bit Fowler/Noll/Vo FNV-1a hash onb the string */ + for (hashval = FNV1A_64_INIT; *str != '\0'; str++) { + /* xor the bottom with the current octet */ + hashval ^= (u_int64_t)*str; +#if defined(NO_FNV_GCC_OPTIMIZATION) + hashval *= FNV_64_PRIME; +#else + hashval += (hashval << 1) + (hashval << 4) + (hashval << 5) + + (hashval << 7) + (hashval << 8) + (hashval << 40); +#endif + } return hashval % MAXHASH; } @@ -1133,7 +1270,7 @@ /* MONTH_UPDATE_EXIT - eom exit page update */ /*********************************************/ -void month_update_exit(u_long tstamp) +void month_update_exit(u_int64_t tstamp) { HNODEPTR nptr; int i; @@ -1157,10 +1294,10 @@ /* TOT_VISIT - calculate total visits */ /*********************************************/ -u_long tot_visit(HNODEPTR *list) +u_int64_t tot_visit(HNODEPTR *list) { HNODEPTR hptr; - u_long tot=0; + u_int64_t tot=0; int i; for (i=0;i