]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - index.c
Remove the line number from a message
[thirdparty/sarg.git] / index.c
diff --git a/index.c b/index.c
index 5a50d682640c33eaf4abdc4fdd9ff88ca1e5c39f..17670996524623169e663784d6ab4ff7c5b03cf8 100644 (file)
--- a/index.c
+++ b/index.c
@@ -46,10 +46,13 @@ void make_index(void)
       return;
    }
 
-   if(debug) debuga("%s",text[53]);
+   if(debug) debuga(_("Making index.html\n"));
 
    // convert any old report hierarchy
-   dirp = opendir(outdir);
+   if ((dirp = opendir(outdir)) == NULL) {
+      debuga(_("Failed to open directory %s - %s\n"),outdir,strerror(errno));
+      exit(EXIT_FAILURE);
+   }
    while ((direntp = readdir( dirp )) != NULL) {
       if(isdigit(direntp->d_name[0]) && isdigit(direntp->d_name[1])) {
          if(IndexTree == INDEX_TREE_DATE)
@@ -84,6 +87,7 @@ static void make_date_index(void)
    char monthnum[10];
    char dayindex[MAXLEN];
    char daynum[10];
+   char title[80];
    int yearsort[150];
    int nyears;
    int year;
@@ -99,7 +103,10 @@ static void make_date_index(void)
    sprintf(yearindex,"%sindex.html",outdir);
 
    nyears=0;
-   dirp = opendir(outdir);
+   if ((dirp = opendir(outdir)) == NULL) {
+      debuga(_("Failed to open directory %s - %s\n"),outdir,strerror(errno));
+      exit(EXIT_FAILURE);
+   }
    while ((direntp = readdir( dirp )) != NULL) {
       if(strlen(direntp->d_name) > 4 || !isdigit(direntp->d_name[0]) || !isdigit(direntp->d_name[1]) ||
          !isdigit(direntp->d_name[2]) || !isdigit(direntp->d_name[3])) continue;
@@ -123,16 +130,18 @@ static void make_date_index(void)
          nyears++;
       }
    }
-   (void)closedir( dirp );
+   closedir( dirp );
 
    order=(strcmp(IndexSortOrder,"A") == 0) ? 1 : -1;
 
    if((fp_ou=fopen(yearindex,"w"))==NULL) {
-      fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],yearindex,strerror(errno));
-      exit(1);
+      debuga(_("(index) Cannot open file %s - %s\n"),yearindex,strerror(errno));
+      exit(EXIT_FAILURE);
    }
-   write_html_header(fp_ou, ".");
-   fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[130],text[132]);
+   write_html_header(fp_ou,0,ngettext("SARG report","SARG reports",nyears));
+   close_html_header(fp_ou);
+   fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou);
+   fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",_("YEAR"),_("SIZE"));
    for (y=0 ; y<nyears ; y++) {
       if (order>0)
          year=yearsort[y];
@@ -143,7 +152,10 @@ static void make_date_index(void)
       sprintf(yeardir,"%s%s",outdir,yearnum);
       // Year dir
       nmonths=0;
-      dirp2 = opendir(yeardir);
+      if ((dirp2 = opendir(yeardir)) == NULL) {
+         debuga(_("Failed to open directory %s - %s\n"),yeardir,strerror(errno));
+         exit(EXIT_FAILURE);
+      }
       while ((direntp2 = readdir( dirp2 )) != NULL) {
          if(!isdigit(direntp2->d_name[0]) || !isdigit(direntp2->d_name[1])) continue;
          i=-1;
@@ -156,7 +168,7 @@ static void make_date_index(void)
             m2=0;
          }
          if (nmonths>=sizeof(monthsort)/sizeof(monthsort[0])) {
-            fprintf(stderr,"SARG: Too many month directories in %s\nSupernumerary entries are ignored\n",yeardir);
+            debuga(_("Too many month directories in %s\nSupernumerary entries are ignored\n"),yeardir);
             break;
          }
          month=m1*16+m2;
@@ -166,14 +178,17 @@ static void make_date_index(void)
          monthsort[i]=month;
          nmonths++;
       }
-      (void)closedir(dirp2);
+      closedir(dirp2);
       sprintf(monthindex,"%s/index.html",yeardir);
       if((fp_ou2=fopen(monthindex,"w"))==NULL) {
-         fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],monthindex,strerror(errno));
-         exit(1);
+         debuga(_("(index) Cannot open file %s - %s\n"),monthindex,strerror(errno));
+         exit(EXIT_FAILURE);
       }
-      write_html_header(fp_ou2,"..");
-      fprintf(fp_ou2,"<tr><th class=\"header_l\">%s/%s</th></tr>\n",text[130],text[131]);
+      snprintf(title,sizeof(title),ngettext("SARG: report for %04d","SARG: reports for %04d",nmonths),year);
+      write_html_header(fp_ou2,1,title);
+      close_html_header(fp_ou2);
+      fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou2);
+      fprintf(fp_ou2,"<tr><th class=\"header_l\">%s/%s</th></tr>\n",_("YEAR"),_("MONTH"));
       for (m=0 ; m<nmonths ; m++) {
          if (order>0)
             month=monthsort[m];
@@ -198,7 +213,10 @@ static void make_date_index(void)
          sprintf(monthdir,"%s/%s",yeardir,monthnum);
          // month dir
          ndays=0;
-         dirp3 = opendir(monthdir);
+         if ((dirp3 = opendir(monthdir)) == NULL) {
+            debuga(_("Failed to open directory %s - %s\n"),monthdir,strerror(errno));
+            exit(EXIT_FAILURE);
+         }
          while ((direntp3 = readdir( dirp3 )) != NULL) {
             if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1])) continue;
             i=-1;
@@ -211,7 +229,7 @@ static void make_date_index(void)
                d2=0;
             }
             if (ndays>=sizeof(daysort)/sizeof(daysort[0])) {
-               fprintf(stderr,"SARG: Too many day directories in %s\nSupernumerary entries are ignored\n",monthdir);
+               debuga(_("Too many day directories in %s\nSupernumerary entries are ignored\n"),monthdir);
                break;
             }
             day=d1*32+d2;
@@ -221,14 +239,17 @@ static void make_date_index(void)
             daysort[i]=day;
             ndays++;
          }
-         (void)closedir(dirp3);
+         closedir(dirp3);
          sprintf(dayindex,"%s/index.html",monthdir);
          if((fp_ou3=fopen(dayindex,"w"))==NULL) {
-            fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],dayindex,strerror(errno));
-            exit(1);
+            debuga(_("(index) Cannot open file %s - %s\n"),dayindex,strerror(errno));
+            exit(EXIT_FAILURE);
          }
-         write_html_header(fp_ou3,"../..");
-         fprintf(fp_ou3,"<tr><th class=\"header_l\">%s/%s/%s</th></tr>\n",text[130],text[131],text[127]);
+         snprintf(title,sizeof(title),ngettext("SARG: report for %04d/%02d","SARG: reports for %04d/%02d",ndays),year,month);
+         write_html_header(fp_ou3,2,title);
+         close_html_header(fp_ou3);
+         fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou3);
+         fprintf(fp_ou3,"<tr><th class=\"header_l\">%s/%s/%s</th></tr>\n",_("YEAR"),_("MONTH"),_("DAYS"));
          for (d=0 ; d<ndays ; d++) {
             if (order>0)
                day=daysort[d];
@@ -243,15 +264,24 @@ 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);
          }
-         write_html_trailer(fp_ou3);
-         fclose(fp_ou3);
+         fputs("</table></div>\n",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));
       }
-      write_html_trailer(fp_ou2);
-      fclose(fp_ou2);
+      fputs("</table></div>\n",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));
    }
 
-   write_html_trailer(fp_ou);
-   fclose(fp_ou);
+   fputs("</table></div>\n",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)
@@ -262,9 +292,7 @@ static void make_file_index(void)
    DIR *dirp;
    struct dirent *direntp;
    char wdir[MAXLEN];
-   char month[4];
    char data[80];
-   char tuser[20];
    char tbytes[20];
    char media[20];
    char ftime[128];
@@ -274,11 +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];
@@ -288,7 +316,10 @@ static void make_file_index(void)
 
    order=(strcmp(IndexSortOrder,"A") == 0) ? 1 : -1;
 
-   dirp = opendir(outdir);
+   if ((dirp = opendir(outdir)) == NULL) {
+      debuga(_("Failed to open directory %s - %s\n"),outdir,strerror(errno));
+      exit(EXIT_FAILURE);
+   }
 
    nsort=0;
    nallocated=0;
@@ -298,22 +329,19 @@ static void make_file_index(void)
       if (strlen(direntp->d_name)>MAX_DIR_NAME) continue;
       item=malloc(sizeof(*item));
       if (!item) {
-         fprintf(stderr,"SARG: not enough memory to sort the index\n");
-         exit(1);
+         debuga(_("not enough memory to sort the index\n"));
+         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);
@@ -324,30 +352,30 @@ static void make_file_index(void)
          */
          getword_start(&gwarea,data);
          if (getword_skip(16,&gwarea,' ')<0) {
-            printf("SARG: Maybe you have a broken week day in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-            exit(1);
+            debuga(_("Maybe you have a broken week day in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+            exit(EXIT_FAILURE);
          }
          if (getword_multisep(mon,sizeof(mon),&gwarea,' ')<0) {
-            printf("SARG: Maybe you have a broken month in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-            exit(1);
+            debuga(_("Maybe you have a broken month in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+            exit(EXIT_FAILURE);
          }
          if (getword_multisep(day,sizeof(day),&gwarea,' ')<0) {
-            printf("SARG: Maybe you have a broken day in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-            exit(1);
+            debuga(_("Maybe you have a broken day in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+            exit(EXIT_FAILURE);
          }
          if (getword_multisep(hour,sizeof(hour),&gwarea,' ')<0) {
-            printf("SARG: Maybe you have a broken time in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-            exit(1);
+            debuga(_("Maybe you have a broken time in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+            exit(EXIT_FAILURE);
          }
          do {
             if (getword_multisep(year,sizeof(year),&gwarea,' ')<0) {
-               printf("SARG: Maybe you have a broken year in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-               exit(1);
+               debuga(_("Maybe you have a broken year in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+               exit(EXIT_FAILURE);
             }
          } while (year[0] && !isdigit(year[0])); //skip time zone information with spaces until the year is found
          if (sscanf(hour,"%d:%d:%d",&ihour,&iminute,&isecond)!=3) {
-            printf("SARG: Maybe you have a broken time in your %s%s/sarg-date file.\n",outdir,direntp->d_name);
-            exit(1);
+            debuga(_("Maybe you have a broken time in your %s%s/sarg-date file\n"),outdir,direntp->d_name);
+            exit(EXIT_FAILURE);
          }
          buildymd(day,mon,year,ftime);
          snprintf(item->creationdate,sizeof(item->creationdate),"%s%02d%02d%02d",ftime, ihour, iminute, isecond);
@@ -358,16 +386,15 @@ static void make_file_index(void)
          nallocated+=10;
          tempsort=realloc(sortlist,nallocated*sizeof(*item));
          if (!tempsort) {
-            fprintf(stderr,"SARG: not enough memory to sort the index\n");
-            exit(1);
+            debuga(_("not enough memory to sort the index\n"));
+            exit(EXIT_FAILURE);
          }
          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];
       }
@@ -375,25 +402,30 @@ static void make_file_index(void)
       nsort++;
    }
 
-   (void)closedir( dirp );
+   closedir( dirp );
 
    if((fp_ou=fopen(wdir,"w"))==NULL) {
-      fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
-      exit(1);
+      debuga(_("(index) Cannot open file %s\n"),wdir);
+      exit(EXIT_FAILURE);
    }
-   write_html_header(fp_ou,".");
-   fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",text[101],text[102],text[103],text[93],text[96]);
+   write_html_header(fp_ou,0,ngettext("SARG report","SARG reports",nsort));
+   close_html_header(fp_ou);
+   fputs("<div class=\"index\"><table cellpadding=\"1\" cellspacing=\"2\">\n<tr><td></td><td></td></tr>\n",fp_ou);
+   fprintf(fp_ou,"<tr><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th><th class=\"header_l\">%s</th></tr>\n",_("FILE/PERIOD"),_("CREATION DATE"),_("USERS"),_("BYTES"),_("AVERAGE"));
    for (i=0 ; i<nsort ; i++) {
       if (order>0)
          item=sortlist[i];
       else
          item=sortlist[nsort-i-1];
-      obtuser(outdir,item->dirname,tuser);
+      tuser=obtuser(outdir,item->dirname);
       obttotal(outdir,item->dirname,tbytes,tuser,media);
-      fprintf(fp_ou,"<tr><td class=\"data2\"><a href='%s/%s'>%s</a></td><td class=\"data2\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",item->dirname,ReplaceIndex,item->dirname,item->date,tuser,tbytes,media);
+      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);
    }
-   write_html_trailer(fp_ou);
-   fclose(fp_ou);
+   fputs("</table></div>\n",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++)
@@ -404,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;
@@ -424,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;
@@ -437,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;
@@ -448,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;
@@ -461,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);
@@ -484,8 +516,8 @@ static void file_index_to_date_index(const char *entry)
 
    sprintf(olddir,"%s%s",outdir,entry);
    if (rename(olddir,newdir)) {
-      fprintf(stderr, "SARG: (index) rename error from \"%s\" to \"%s\" - %s\n",olddir,newdir,strerror(errno));
-      exit(1);
+      debuga(_("(index) rename error from \"%s\" to \"%s\" - %s\n"),olddir,newdir,strerror(errno));
+      exit(EXIT_FAILURE);
    }
 
    strcpy(newdir+monthlen,"/images");
@@ -495,8 +527,8 @@ static void file_index_to_date_index(const char *entry)
 
       sprintf(linkdir,"%simages",outdir);
       if (symlink(linkdir,newdir)) {
-         fprintf(stderr, "SARG: failed to create link \"%s\" to \"%s\" - %s\n",linkdir,newdir,strerror(errno));
-         exit(1);
+         debuga(_("failed to create link \"%s\" to \"%s\" - %s\n"),linkdir,newdir,strerror(errno));
+         exit(EXIT_FAILURE);
       }
 #else
       char cmd[MAXLEN];
@@ -505,9 +537,9 @@ static void file_index_to_date_index(const char *entry)
       sprintf(cmd,"ln -s \"%simages\" \"%s/images\"",outdir,newdir);
       cstatus=system(cmd);
       if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
-         fprintf(stderr, "SARG: command return status %d\n",WEXITSTATUS(cstatus));
-         fprintf(stderr, "SARG: command: %s\n",cmd);
-         exit(1);
+         debuga(_("command return status %d\n"),WEXITSTATUS(cstatus));
+         debuga(_("command: %s\n"),cmd);
+         exit(EXIT_FAILURE);
       }
 #endif
    }
@@ -516,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;
@@ -532,27 +565,27 @@ static void date_index_to_file_index(const char *entry)
    next=-1;
    if (sscanf(entry,"%d%n",&y1,&next)!=1 || next<0 || entry[next]) return;
 
-   val1len=sprintf(val1,"%s%s",outdir,entry);
+   val1len=snprintf(val1,sizeof(val1),"%s%s",outdir,entry);
    dirp2 = opendir(val1);
    if (!dirp2) return;
    while ((direntp2 = readdir( dirp2 )) != NULL) {
       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;
       }
@@ -580,18 +613,18 @@ 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)) {
-            fprintf(stderr, "SARG: (index) rename error from \"%s\" to \"%s\" - %s\n",olddir,newdir,strerror(errno));
-            exit(1);
+            debuga(_("(index) rename error from \"%s\" to \"%s\" - %s\n"),olddir,newdir,strerror(errno));
+            exit(EXIT_FAILURE);
          }
       }
-      (void)closedir( dirp3 );
+      closedir( dirp3 );
    }
-   (void)closedir( dirp2 );
+   closedir( dirp2 );
 
    /*!
    \bug The links to the images in the reports are broken after moving the directories