[BACK]Return to mandoc.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mandoc.c between version 1.97 and 1.98

version 1.97, 2015/10/15 23:35:55 version 1.98, 2015/11/12 22:44:27
Line 478  time2a(time_t t)
Line 478  time2a(time_t t)
          * up to 2 characters for the day + comma + blank           * up to 2 characters for the day + comma + blank
          * 4 characters for the year and a terminating '\0'           * 4 characters for the year and a terminating '\0'
          */           */
   
         p = buf = mandoc_malloc(10 + 4 + 4 + 1);          p = buf = mandoc_malloc(10 + 4 + 4 + 1);
   
         if (0 == (ssz = strftime(p, 10 + 1, "%B ", tm)))          if ((ssz = strftime(p, 10 + 1, "%B ", tm)) == 0)
                 goto fail;                  goto fail;
         p += (int)ssz;          p += (int)ssz;
   
         if (-1 == (isz = snprintf(p, 4 + 1, "%d, ", tm->tm_mday)))          /*
            * The output format is just "%d" here, not "%2d" or "%02d".
            * That's also the reason why we can't just format the
            * date as a whole with "%B %e, %Y" or "%B %d, %Y".
            * Besides, the present approach is less prone to buffer
            * overflows, in case anybody should ever introduce the bug
            * of looking at LC_TIME.
            */
   
           if ((isz = snprintf(p, 4 + 1, "%d, ", tm->tm_mday)) == -1)
                 goto fail;                  goto fail;
         p += isz;          p += isz;
   
         if (0 == strftime(p, 4 + 1, "%Y", tm))          if (strftime(p, 4 + 1, "%Y", tm) == 0)
                 goto fail;                  goto fail;
         return buf;          return buf;
   
Line 500  fail:
Line 510  fail:
 char *  char *
 mandoc_normdate(struct mparse *parse, char *in, int ln, int pos)  mandoc_normdate(struct mparse *parse, char *in, int ln, int pos)
 {  {
         char            *out;  
         time_t           t;          time_t           t;
   
         if (NULL == in || '\0' == *in ||          /* No date specified: use today's date. */
             0 == strcmp(in, "$" "Mdocdate$")) {  
           if (in == NULL || *in == '\0' || strcmp(in, "$" "Mdocdate$") == 0) {
                 mandoc_msg(MANDOCERR_DATE_MISSING, parse, ln, pos, NULL);                  mandoc_msg(MANDOCERR_DATE_MISSING, parse, ln, pos, NULL);
                 time(&t);                  return time2a(time(NULL));
         }          }
         else if (a2time(&t, "%Y-%m-%d", in))  
                 t = 0;          /* Valid mdoc(7) date format. */
         else if (!a2time(&t, "$" "Mdocdate: %b %d %Y $", in) &&  
             !a2time(&t, "%b %d, %Y", in)) {          if (a2time(&t, "$" "Mdocdate: %b %d %Y $", in) ||
               a2time(&t, "%b %d, %Y", in))
                   return time2a(t);
   
           /* Do not warn about the legacy man(7) format. */
   
           if ( ! a2time(&t, "%Y-%m-%d", in))
                 mandoc_msg(MANDOCERR_DATE_BAD, parse, ln, pos, in);                  mandoc_msg(MANDOCERR_DATE_BAD, parse, ln, pos, in);
                 t = 0;  
         }          /* Use any non-mdoc(7) date verbatim. */
         out = t ? time2a(t) : NULL;  
         return out ? out : mandoc_strdup(in);          return mandoc_strdup(in);
 }  }
   
 int  int

Legend:
Removed from v.1.97  
changed lines
  Added in v.1.98

CVSweb