summaryrefslogtreecommitdiff
path: root/src/data.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1995-05-05 02:59:15 +0000
committerRichard M. Stallman <rms@gnu.org>1995-05-05 02:59:15 +0000
commitabfb15fa5fd7311be821c5606161473e4ef57e91 (patch)
treea5d18368077699f1466f3459af23b9c4545520ab /src/data.c
parent251bdde1c6a635c10e76c96545864404885e3759 (diff)
downloademacs-abfb15fa5fd7311be821c5606161473e4ef57e91.tar.gz
(Fnumber_to_string, Fstring_to_number):
Handle long EMACS_INT in sprintf and atol. (store_symval_forwarding): Error if value out of range for an integer variable. (Fstring_to_number): Avoid using make_number to return value. Maybe use atol.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/data.c b/src/data.c
index af5f67fa227..a6ab2ed345a 100644
--- a/src/data.c
+++ b/src/data.c
@@ -737,6 +737,9 @@ store_symval_forwarding (sym, valcontents, newval)
case Lisp_Misc_Intfwd:
CHECK_NUMBER (newval, 1);
*XINTFWD (valcontents)->intvar = XINT (newval);
+ if (*XINTFWD (valcontents)->intvar != XINT (newval))
+ error ("Value out of range for variable `%s'",
+ XSYMBOL (sym)->name->data);
break;
case Lisp_Misc_Boolfwd:
@@ -1664,7 +1667,12 @@ NUM may be an integer or a floating point number.")
}
#endif /* LISP_FLOAT_TYPE */
- sprintf (buffer, "%d", XINT (num));
+ if (sizeof (int) == sizeof (EMACS_INT))
+ sprintf (buffer, "%d", XINT (num));
+ else if (sizeof (long) == sizeof (EMACS_INT))
+ sprintf (buffer, "%ld", XINT (num));
+ else
+ abort ();
return build_string (buffer);
}
@@ -1675,6 +1683,7 @@ It ignores leading spaces and tabs.")
(str)
register Lisp_Object str;
{
+ Lisp_Object value;
unsigned char *p;
CHECK_STRING (str, 0);
@@ -1691,7 +1700,13 @@ It ignores leading spaces and tabs.")
return make_float (atof (p));
#endif /* LISP_FLOAT_TYPE */
- return make_number (atoi (p));
+ if (sizeof (int) == sizeof (EMACS_INT))
+ XSETINT (value, atoi (p));
+ else if (sizeof (long) == sizeof (EMACS_INT))
+ XSETINT (value, atol (p));
+ else
+ abort ();
+ return value;
}
enum arithop