PennMUSH Community

Changeset 1014

Show
Ignore:
Timestamp:
07/07/07 21:46:52 (1 year ago)
Author:
shawnw
Message:

Ported fraction() fix to 1.8.2

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • 1.8.2/branches/devel/CHANGES.182

    r999 r1014  
    2929  * Fixed handling of telnet NOPs sent by clients. [SW] 
    3030  * The OpenSSL random number pool wasn't getting adequately 
    31     initialized on systems without /dev/urandom 
     31    initialized on systems without /dev/urandom [SW] 
     32  * Infinite loop in math code. Reported by Ashen-Sugar. [GM] 
    3233 
    3334Version 1.8.2 patchlevel 5                      June 13, 2007 
  • 1.8.2/branches/devel/hdrs/externs.h

    r1010 r1014  
    314314extern int is_strict_number(const char *str); 
    315315extern int is_strict_integer(const char *str); 
     316int is_good_number(double); 
    316317 
    317318/* From plyrlist.c */ 
  • 1.8.2/branches/devel/src/funmath.c

    r1010 r1014  
    12501250  double num = 0, denom = 0; 
    12511251  NVAL n; 
    1252   int sign = 0; 
    12531252 
    12541253  if (!is_number(args[0])) { 
     
    12611260  if (n < 0) { 
    12621261    n = fabs(n); 
    1263     sign = 1
     1262    safe_chr('-', buff, bp)
    12641263  } else if (EQ(n, 0)) { 
    12651264    safe_chr('0', buff, bp); 
     
    12671266  } 
    12681267 
    1269   frac(n, &num, &denom, 1.0e-10); 
    1270  
    1271   if (sign) 
    1272     safe_chr('-', buff, bp); 
    1273  
    1274   if (fabs(denom - 1) < 1.0e-10) 
    1275     safe_format(buff, bp, "%.0f", num); 
    1276   else 
    1277     safe_format(buff, bp, "%.0f/%.0f", num, denom); 
     1268  if (is_good_number(n)) { 
     1269    frac(n, &num, &denom, 1.0e-10); 
     1270 
     1271    if (fabs(denom - 1) < 1.0e-10) 
     1272      safe_format(buff, bp, "%.0f", num); 
     1273    else 
     1274      safe_format(buff, bp, "%.0f/%.0f", num, denom); 
     1275  } else { 
     1276    safe_number(n, buff, bp); 
     1277  } 
    12781278} 
    12791279 
  • 1.8.2/branches/devel/src/parse.c

    r1010 r1014  
    345345    return 0; 
    346346  return end > str; 
     347} 
     348 
     349/** Is string a number that isn't inf or nan? 
     350 * \param num NVAL 
     351 * \retval 1 num is a good number. 
     352 * \retval 0 num is not a good number. 
     353 */ 
     354int 
     355is_good_number(NVAL val) 
     356{ 
     357  char numbuff[128]; 
     358  char *p; 
     359  snprintf(numbuff, 128, "%f", val); 
     360  p = numbuff; 
     361  /* Negative? */ 
     362  if (*p == '-') 
     363    p++; 
     364  /* Must start with a digit. */ 
     365  if (!*p || !isdigit((unsigned char) *p)) 
     366    return 0; 
     367  return 1; 
    347368} 
    348369