From 58eec3c0fba2c0785febf50589249535df6ee301 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Sat, 20 Nov 2010 22:06:27 +0000 Subject: [PATCH] Optimize time range filtering Filtering of the log entries based on a time or time range passed with command line option -t is done using numerical values instead of strings. --- log.c | 59 ++++++++++++++++++++++------------------------------------- 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/log.c b/log.c index bfc6f43..e5868ed 100644 --- a/log.c +++ b/log.c @@ -95,8 +95,8 @@ int main(int argc,char *argv[]) char date[255]; char arq[255]; char arq_log[255]; - char hm[15], hmf[15], hmr[15]; - int chm=0; + int hm, hmf, hmr; + char hm_str[15]; char uagent[MAXLEN]; char hexclude[MAXLEN]; char csort[MAXLEN]; @@ -304,8 +304,8 @@ int main(int argc,char *argv[]) uagent[0]='\0'; hexclude[0]='\0'; addr[0]='\0'; - hm[0]='\0'; - hmf[0]='\0'; + hm=-1; + hmf=-1; site[0]='\0'; outdir[0]='\0'; elap[0]='\0'; @@ -438,28 +438,25 @@ int main(int argc,char *argv[]) break; case 't': { - int h,m; + int h1,m1,h2,m2; if(strstr(optarg,"-") == 0) { - strcpy(hm,optarg); - strcpy(hmf,optarg); + if(sscanf(optarg,"%d:%d",&h1,&m1)!=2) { + debuga(_("Time period passed on the command line with option -t must be MM:SS\n")); + exit(EXIT_FAILURE); + } + hm=h1*100+m1; + hmf=hm; + snprintf(hm_str,sizeof(hm_str),"%02d:%02d",h1,m1); } else { - getword_start(&gwarea,optarg); - if (getword(hm,sizeof(hm),&gwarea,'-')<0 || getword(hmf,sizeof(hmf),&gwarea,'\0')<0) { - debuga(_("The time range passed on the command line with option -t is invalid\n")); + if(sscanf(optarg,"%d:%d-%d:%d",&h1,&m1,&h2,&m2)!=4) { + debuga(_("Time range passed on the command line with option -t must be MM:SS-MM:SS\n")); exit(EXIT_FAILURE); } + hm=h1*100+m1; + hmf=h2*100+m2; + snprintf(hm_str,sizeof(hm_str),"%02d:%02d-%02d:%02d",h1,m1,h2,m2); } - if(sscanf(hm,"%d:%d",&h,&m)!=2) { - debuga(_("Time period must be MM or MM:SS. Exit\n")); - exit(EXIT_FAILURE); - } - sprintf(hm,"%02d%02d",h,m); - if(sscanf(hmf,"%d:%d",&h,&m)!=2) { - debuga(_("Time period must be MM or MM:SS. Exit\n")); - exit(EXIT_FAILURE); - } - sprintf(hmf,"%02d%02d",h,m); break; } case 'u': @@ -664,7 +661,7 @@ int main(int argc,char *argv[]) debuga(_(" Output dir (-o) = %s\n"),outdir); debuga(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No")); debuga(_(" Accessed site (-s) = %s\n"),site); - debuga(_(" Time (-t) = %s\n"),hm); + debuga(_(" Time (-t) = %s\n"),hm_str); debuga(_(" User (-u) = %s\n"),us); debuga(_(" Temporary dir (-w) = %s\n"),tmp); debuga(_(" Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No")); @@ -695,7 +692,7 @@ int main(int argc,char *argv[]) printf(_(" Output dir (-o) = %s\n"),outdir); printf(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No")); printf(_(" Accessed site (-s) = %s\n"),site); - printf(_(" Time (-t) = %s\n"),hm); + printf(_(" Time (-t) = %s\n"),hm_str); printf(_(" User (-u) = %s\n"),us); printf(_(" Temporary dir (-w) = %s\n"),tmp); printf(_(" Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No")); @@ -1330,21 +1327,9 @@ int main(int argc,char *argv[]) } } - if(hm[0] != '\0') { - hmr[0]='\0'; - chm++; - getword_start(&gwarea,hora); - while(chm) { - if (getword_multisep(warea,sizeof(warea),&gwarea,':')<0){ - debuga(_("Maybe you have a broken time in your %s file\n"),arq); - exit(EXIT_FAILURE); - } - strncat(hmr,warea,2); - chm--; - } - strncat(hmr,gwarea.current,2); - - if(atoi(hmr) < atoi(hm) || atoi(hmr) > atoi(hmf)) continue; + if(hm >= 0 && hmf >= 0) { + hmr=t->tm_hour*100+t->tm_min; + if(hmr < hm || hmr > hmf) continue; } if(site[0] != '\0'){ -- 2.47.2