]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - index.c
Store the period internaly and get rid of the sarg-period file.
[thirdparty/sarg.git] / index.c
diff --git a/index.c b/index.c
index a39722c1475dacc14f81ea7bbe178c5f7cd5c601..17670996524623169e663784d6ab4ff7c5b03cf8 100644 (file)
--- a/index.c
+++ b/index.c
@@ -265,17 +265,23 @@ static void make_date_index(void)
             fprintf(fp_ou3,"<tr><td class=\"data2\"><a href=\"%s/index.html\">%s %s %s</a></td></tr>\n",daynum,yearnum,nmonth,daynum);
          }
          fputs("</table></div>\n",fp_ou3);
-         write_html_trailer(fp_ou3);
-         fclose(fp_ou3);
+         if (write_html_trailer(fp_ou3)<0)
+            debuga(_("Write error in the index %s\n"),dayindex);
+         if (fclose(fp_ou3)==EOF)
+            debuga(_("Failed to close the index file %s - %s\n"),dayindex,strerror(errno));
       }
       fputs("</table></div>\n",fp_ou2);
-      write_html_trailer(fp_ou2);
-      fclose(fp_ou2);
+      if (write_html_trailer(fp_ou2)<0)
+         debuga(_("Write error in the index %s\n"),monthindex);
+      if (fclose(fp_ou2)==EOF)
+         debuga(_("Failed to close the index file %s - %s\n"),monthindex,strerror(errno));
    }
 
    fputs("</table></div>\n",fp_ou);
-   write_html_trailer(fp_ou);
-   fclose(fp_ou);
+   if (write_html_trailer(fp_ou)<0)
+      debuga(_("Write error in the index %s\n"),yearindex);
+   if (fclose(fp_ou)==EOF)
+      debuga(_("Failed to close the index file %s - %s\n"),yearindex,strerror(errno));
 }
 
 static void make_file_index(void)
@@ -286,7 +292,6 @@ static void make_file_index(void)
    DIR *dirp;
    struct dirent *direntp;
    char wdir[MAXLEN];
-   char month[4];
    char data[80];
    char tbytes[20];
    char media[20];
@@ -297,12 +302,11 @@ static void make_file_index(void)
    int nallocated;
    int order;
    int i;
-   int cmp;
    int tuser;
    struct getwordstruct gwarea;
    struct sortstruct
    {
-      char sortname[9];
+      int year, month, day, sortnum;
       char creationdate[MAX_CREATION_DATE];
       char dirname[MAX_DIR_NAME];
       char date[60];
@@ -329,18 +333,15 @@ static void make_file_index(void)
          exit(EXIT_FAILURE);
       }
       if(strcmp(df,"u") == 0) {
-         strncpy(item->sortname,direntp->d_name,4);
-         strncpy(month,direntp->d_name+4,3);
+         item->year=atoi(direntp->d_name);
+         item->month=conv_month(direntp->d_name+4);
+         item->day=atoi(direntp->d_name+7);
       } else {
-         strncpy(item->sortname,direntp->d_name+5,4);
-         strncpy(month,direntp->d_name+2,3);
+         item->year=atoi(direntp->d_name+5);
+         item->month=conv_month(direntp->d_name+2);
+         item->day=atoi(direntp->d_name);
       }
-      item->sortname[4]='\0';
-      month[3]='\0';
-      conv_month(month);
-      strcat(item->sortname,month);
-      if(strcmp(df,"u") == 0) strncat(item->sortname,direntp->d_name+7,2);
-      else strncat(item->sortname,direntp->d_name,2);
+      item->sortnum=(item->year*16+item->month)*32+item->day;
       obtdate(outdir,direntp->d_name,data);
       if (sscanf(data,"%d-%d-%d %d:%d:%d %d",&iyear,&imonth,&iday,&ihour,&iminute,&isecond,&idst)==7) {
          formatdate(data,sizeof(data),iyear,imonth,iday,ihour,iminute,isecond,idst);
@@ -391,10 +392,9 @@ static void make_file_index(void)
          sortlist=tempsort;
       }
       for (i=nsort ; i>0 ; i--) {
-         cmp=strcmp(item->sortname,sortlist[i-1]->sortname);
-         if (cmp==0) cmp=strcmp(item->creationdate,sortlist[i-1]->creationdate);
-         if (cmp>=0) {
-            break;
+         if (item->sortnum>sortlist[i-1]->sortnum) break;
+         if (item->sortnum==sortlist[i-1]->sortnum) {
+            if (strcmp(item->creationdate,sortlist[i-1]->creationdate)>=0) break;
          }
          sortlist[i]=sortlist[i-1];
       }
@@ -422,8 +422,10 @@ static void make_file_index(void)
       fprintf(fp_ou,"<tr><td class=\"data2\"><a href='%s/%s'>%s</a></td><td class=\"data2\">%s</td><td class=\"data\">%d</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",item->dirname,ReplaceIndex,item->dirname,item->date,tuser,tbytes,media);
    }
    fputs("</table></div>\n",fp_ou);
-   write_html_trailer(fp_ou);
-   fclose(fp_ou);
+   if (write_html_trailer(fp_ou)<0)
+      debuga(_("Write error in the index %s\n"),wdir);
+   if (fclose(fp_ou)==EOF)
+      debuga(_("Failed to close the index file %s - %s\n"),wdir,strerror(errno));
 
    if (sortlist) {
       for (i=0 ; i<nsort ; i++)
@@ -434,19 +436,19 @@ static void make_file_index(void)
 
 static void file_index_to_date_index(const char *entry)
 {
-   int y1, y2, d1, d2;
+   int y1, y2, m1, m2, d1, d2;
    int i, j;
    int ndirlen;
    int monthlen;
-   char m1[8], m2[8];
+   char sm1[8], sm2[8];
    char olddir[MAXLEN], newdir[MAXLEN];
 
    if(strlen(entry) < 19) return;
 
    y1=0;
    y2=0;
-   memset(m1,0,sizeof(m1));
-   memset(m2,0,sizeof(m2));
+   memset(sm1,0,sizeof(sm1));
+   memset(sm2,0,sizeof(sm2));
    d1=0;
    d2=0;
    i=0;
@@ -454,10 +456,10 @@ static void file_index_to_date_index(const char *entry)
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          y1=y1*10+(entry[i++]-'0');
       if (j!=4) return;
-      for (j=0 ; j<sizeof(m1)-1 && entry[i] && isalpha(entry[i]) ; j++)
-         m1[j]=entry[i++];
+      for (j=0 ; j<sizeof(sm1)-1 && entry[i] && isalpha(entry[i]) ; j++)
+         sm1[j]=entry[i++];
       if (j!=3) return;
-      m1[j]='\0';
+      sm1[j]='\0';
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          d1=d1*10+(entry[i++]-'0');
       if (j!=2) return;
@@ -467,10 +469,10 @@ static void file_index_to_date_index(const char *entry)
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          y2=y2*10+(entry[i++]-'0');
       if (j!=4) return;
-      for (j=0 ; j<sizeof(m2)-1 && entry[i] && isalpha(entry[i]) ; j++)
-         m2[j]=entry[i++];
+      for (j=0 ; j<sizeof(sm2)-1 && entry[i] && isalpha(entry[i]) ; j++)
+         sm2[j]=entry[i++];
       if (j!=3) return;
-      m2[j]='\0';
+      sm2[j]='\0';
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          d2=d2*10+(entry[i++]-'0');
       if (j!=2) return;
@@ -478,10 +480,10 @@ static void file_index_to_date_index(const char *entry)
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          d1=d1*10+(entry[i++]-'0');
       if (j!=2) return;
-      for (j=0 ; j<sizeof(m1)-1 && entry[i] && isalpha(entry[i]) ; j++)
-         m1[j]=entry[i++];
+      for (j=0 ; j<sizeof(sm1)-1 && entry[i] && isalpha(entry[i]) ; j++)
+         sm1[j]=entry[i++];
       if (j!=3) return;
-      m1[j]='\0';
+      sm1[j]='\0';
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          y1=y1*10+(entry[i++]-'0');
       if (j!=4) return;
@@ -491,22 +493,22 @@ static void file_index_to_date_index(const char *entry)
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          d2=d2*10+(entry[i++]-'0');
       if (j!=2) return;
-      for (j=0 ; j<sizeof(m2)-1 && entry[i] && isalpha(entry[i]) ; j++)
-         m2[j]=entry[i++];
+      for (j=0 ; j<sizeof(sm2)-1 && entry[i] && isalpha(entry[i]) ; j++)
+         sm2[j]=entry[i++];
       if (j!=3) return;
-      m2[j]='\0';
+      sm2[j]='\0';
       for (j=0 ; entry[i] && isdigit(entry[i]) ; j++)
          y2=y2*10+(entry[i++]-'0');
       if (j!=4) return;
    } else
       return;
 
-   conv_month(m1);
-   conv_month(m2);
+   m1=conv_month(sm1);
+   m2=conv_month(sm2);
    ndirlen=sprintf(newdir,"%s%04d",outdir,y1);
    if(access(newdir, R_OK) != 0) mkdir(newdir,0755);
-   if(strcmp(m1,m2) != 0) ndirlen+=sprintf(newdir+ndirlen,"/%s-%s",m1,m2);
-   else ndirlen+=sprintf(newdir+ndirlen,"/%s",m1);
+   if(m1 != m2) ndirlen+=sprintf(newdir+ndirlen,"/%02d-%02d",m1,m2);
+   else ndirlen+=sprintf(newdir+ndirlen,"/%02d",m1);
    if(access(newdir, R_OK) != 0) mkdir(newdir,0755);
    monthlen=ndirlen;
    if(d1!=d2) ndirlen+=sprintf(newdir+ndirlen,"/%02d-%02d",d1,d2);
@@ -546,11 +548,12 @@ static void file_index_to_date_index(const char *entry)
 static void date_index_to_file_index(const char *entry)
 {
    int y1, next;
-   int val1len;
+   int m1, m2;
    int d1, d2;
+   int val1len;
    int i, j;
    char val1[MAXLEN];
-   char m1[8], m2[8];
+   const char *sm1, *sm2;
    char *str;
    char newdir[MAXLEN], olddir[MAXLEN];
    DIR *dirp2, *dirp3;
@@ -569,20 +572,20 @@ static void date_index_to_file_index(const char *entry)
       if(!isdigit(direntp2->d_name[0]) || !isdigit(direntp2->d_name[1])) continue;
       i=0;
       str=direntp2->d_name;
-      for (j=0 ; j<sizeof(m1) && str[i] && isdigit(str[i]) ; j++)
-         m1[j]=str[i++];
-      if (j>=sizeof(m1)) continue;
-      m1[j]='\0';
-      conv_month_name(m1);
+      m1=0;
+      for (j=0 ; j<2 && str[i] && isdigit(str[i]) ; j++)
+         m1=(m1*10)+(str[i++]-'0');
+      if (j>=2) continue;
+      sm1=conv_month_name(m1);
       if (str[i]=='-') {
          i++;
-         for (j=0 ; j<sizeof(m2) && str[i] && isdigit(str[i]) ; j++)
-            m2[j]=str[i++];
-         if (j>=sizeof(m2)) continue;
-         m2[j]='\0';
-         conv_month_name(m2);
+         m2=0;
+         for (j=0 ; j<2 && str[i] && isdigit(str[i]) ; j++)
+            m2=(m2*10)+(str[i++]-'0');
+         if (j>=2) continue;
+         sm2=conv_month_name(m2);
       } else if (!str[i]) {
-         strcpy(m2,m1);
+         sm2=sm1;
       } else {
          continue;
       }
@@ -610,8 +613,8 @@ static void date_index_to_file_index(const char *entry)
             continue;
          }
 
-         if(strcmp(df,"u") == 0) sprintf(newdir,"%s%04d%s%02d-%04d%s%02d",outdir,y1,m1,d1,y1,m2,d2);
-         else if(strcmp(df,"e") == 0) sprintf(newdir,"%s%02d%s%04d-%02d%s%04d",outdir,d1,m1,y1,d2,m2,y1);
+         if(strcmp(df,"u") == 0) sprintf(newdir,"%s%04d%s%02d-%04d%s%02d",outdir,y1,sm1,d1,y1,sm2,d2);
+         else if(strcmp(df,"e") == 0) sprintf(newdir,"%s%02d%s%04d-%02d%s%04d",outdir,d1,sm1,y1,d2,sm2,y1);
          else continue;
          sprintf(olddir,"%s%04d/%s/%s",outdir,y1,direntp2->d_name,direntp3->d_name);
          if(rename(olddir,newdir)) {