On Fri, Jun 09, 2000 at 05:50:51PM +0300, Mikko Hnninen <[EMAIL PROTECTED]> wrote: > I wonder if it would be possible to make Mutt always assume decimal, as > I doubt anyone will be specifying dates in either octal or hex. :-) > > It's kind of cool though, a limit of ~r 011/6/0x7d0- actually works. > :-) The attached patch (patch-1.3.2.bbell.pattern.1) can be applied to to force base 10 parsing of dates. It does not force base 10 everywhere. I believe this patch is desirable as dates are often represented with leading zeroes. Looking at the (unpatched) code, there is a mix of using base 10 or not: color.c:318: *col = strtol (s, &eptr, 10); color.c:566: *ql = strtol(buf->data + 6, &eptr, 10); handler.c:1245: strtol (length, NULL, 10)); hdrline.c:244: min_width = strtol (prefix, &p, 10); hdrline.c:248: max_width = strtol (prefix, &p, 10); init.c:1091: val = strtol (tmp->data, &t, 0); pattern.c:269: pat->min = strtol (s->dptr + 1, &tmp, 0) + 1; /* exclusive range */ pattern.c:272: pat->min = strtol (s->dptr, &tmp, 0); pattern.c:306: pat->max = strtol (tmp, &tmp, 0); pattern.c:334: t->tm_mday = strtol (s, &p, 0); pattern.c:348: t->tm_mon = strtol (p, &p, 0) - 1; pattern.c:360: t->tm_year = strtol (p, &p, 0); pattern.c:375: int offset = strtol (s, &ps, 0); My patch patch-1.3.2.bbell.pattern.1 fixes pattern.c lines 334, 348, and 360 to work on dates only. If you want to throw octal and hexadecimal parsing out the window entirely, you can apply patch-1.3.2.bbell.strtol.1 instead. This is a little more consistent, though you potentially lose some power. I'll leave the decision up to someone else :-) -- Bob Bell Compaq Computer Corporation Software Engineer 110 Spit Brook Rd - ZKO3-3/U14 TruCluster Group Nashua, NH 03062-2698 [EMAIL PROTECTED] 603-884-0595
--- old/mutt-1.3.2/pattern.c Tue May 9 11:23:01 2000 +++ mutt-1.3.2/pattern.c Fri Jun 9 11:50:55 2000 @@ -331,7 +331,7 @@ static const char *getDate (const char * time_t now = time (NULL); struct tm *tm = localtime (&now); - t->tm_mday = strtol (s, &p, 0); + t->tm_mday = strtol (s, &p, 10); if (t->tm_mday < 1 || t->tm_mday > 31) { snprintf (err->data, err->dsize, _("Invalid day of month: %s"), s); @@ -345,7 +345,7 @@ static const char *getDate (const char * return p; } p++; - t->tm_mon = strtol (p, &p, 0) - 1; + t->tm_mon = strtol (p, &p, 10) - 1; if (t->tm_mon < 0 || t->tm_mon > 11) { snprintf (err->data, err->dsize, _("Invalid month: %s"), p); @@ -357,7 +357,7 @@ static const char *getDate (const char * return p; } p++; - t->tm_year = strtol (p, &p, 0); + t->tm_year = strtol (p, &p, 10); if (t->tm_year < 70) /* year 2000+ */ t->tm_year += 100; else if (t->tm_year > 1900)
diff -rup old/mutt-1.3.2/init.c mutt-1.3.2/init.c --- old/mutt-1.3.2/init.c Sat May 20 03:30:46 2000 +++ mutt-1.3.2/init.c Fri Jun 9 11:57:27 2000 @@ -1088,7 +1088,7 @@ static int parse_set (BUFFER *tmp, BUFFE s->dptr++; mutt_extract_token (tmp, s, 0); - val = strtol (tmp->data, &t, 0); + val = strtol (tmp->data, &t, 10); if (!*tmp->data || *t || (short) val != val) { diff -rup old/mutt-1.3.2/pattern.c mutt-1.3.2/pattern.c --- old/mutt-1.3.2/pattern.c Tue May 9 11:23:01 2000 +++ mutt-1.3.2/pattern.c Fri Jun 9 11:57:56 2000 @@ -266,10 +266,10 @@ int eat_range (pattern_t *pat, BUFFER *s if (*s->dptr == '>') { pat->max = M_MAXRANGE; - pat->min = strtol (s->dptr + 1, &tmp, 0) + 1; /* exclusive range */ + pat->min = strtol (s->dptr + 1, &tmp, 10) + 1; /* exclusive range */ } else - pat->min = strtol (s->dptr, &tmp, 0); + pat->min = strtol (s->dptr, &tmp, 10); if (toupper (*tmp) == 'K') /* is there a prefix? */ { pat->min *= 1024; @@ -303,7 +303,7 @@ int eat_range (pattern_t *pat, BUFFER *s if (isdigit ((unsigned char) *tmp)) { /* range maximum */ - pat->max = strtol (tmp, &tmp, 0); + pat->max = strtol (tmp, &tmp, 10); if (toupper (*tmp) == 'K') { pat->max *= 1024; @@ -331,7 +331,7 @@ static const char *getDate (const char * time_t now = time (NULL); struct tm *tm = localtime (&now); - t->tm_mday = strtol (s, &p, 0); + t->tm_mday = strtol (s, &p, 10); if (t->tm_mday < 1 || t->tm_mday > 31) { snprintf (err->data, err->dsize, _("Invalid day of month: %s"), s); @@ -345,7 +345,7 @@ static const char *getDate (const char * return p; } p++; - t->tm_mon = strtol (p, &p, 0) - 1; + t->tm_mon = strtol (p, &p, 10) - 1; if (t->tm_mon < 0 || t->tm_mon > 11) { snprintf (err->data, err->dsize, _("Invalid month: %s"), p); @@ -357,7 +357,7 @@ static const char *getDate (const char * return p; } p++; - t->tm_year = strtol (p, &p, 0); + t->tm_year = strtol (p, &p, 10); if (t->tm_year < 70) /* year 2000+ */ t->tm_year += 100; else if (t->tm_year > 1900) @@ -372,7 +372,7 @@ static const char *getDate (const char * static const char *get_offset (struct tm *tm, const char *s) { char *ps; - int offset = strtol (s, &ps, 0); + int offset = strtol (s, &ps, 10); switch (*ps) {