diff options
| author | Richard M. Stallman | 1995-05-05 02:59:15 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-05-05 02:59:15 +0000 |
| commit | e6c82a8d35233abd7211ba1b9dae1e1e22362d54 (patch) | |
| tree | 38f7fd72fa74a94b5435129e90cf184dc5f9fbe9 /src/data.c | |
| parent | f9fa352f109bb7f9b4314c57348d7eecfa2aa63c (diff) | |
| download | emacs-e6c82a8d35233abd7211ba1b9dae1e1e22362d54.tar.gz emacs-e6c82a8d35233abd7211ba1b9dae1e1e22362d54.zip | |
(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.c | 19 |
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) | |||
| 737 | case Lisp_Misc_Intfwd: | 737 | case Lisp_Misc_Intfwd: |
| 738 | CHECK_NUMBER (newval, 1); | 738 | CHECK_NUMBER (newval, 1); |
| 739 | *XINTFWD (valcontents)->intvar = XINT (newval); | 739 | *XINTFWD (valcontents)->intvar = XINT (newval); |
| 740 | if (*XINTFWD (valcontents)->intvar != XINT (newval)) | ||
| 741 | error ("Value out of range for variable `%s'", | ||
| 742 | XSYMBOL (sym)->name->data); | ||
| 740 | break; | 743 | break; |
| 741 | 744 | ||
| 742 | case Lisp_Misc_Boolfwd: | 745 | case Lisp_Misc_Boolfwd: |
| @@ -1664,7 +1667,12 @@ NUM may be an integer or a floating point number.") | |||
| 1664 | } | 1667 | } |
| 1665 | #endif /* LISP_FLOAT_TYPE */ | 1668 | #endif /* LISP_FLOAT_TYPE */ |
| 1666 | 1669 | ||
| 1667 | sprintf (buffer, "%d", XINT (num)); | 1670 | if (sizeof (int) == sizeof (EMACS_INT)) |
| 1671 | sprintf (buffer, "%d", XINT (num)); | ||
| 1672 | else if (sizeof (long) == sizeof (EMACS_INT)) | ||
| 1673 | sprintf (buffer, "%ld", XINT (num)); | ||
| 1674 | else | ||
| 1675 | abort (); | ||
| 1668 | return build_string (buffer); | 1676 | return build_string (buffer); |
| 1669 | } | 1677 | } |
| 1670 | 1678 | ||
| @@ -1675,6 +1683,7 @@ It ignores leading spaces and tabs.") | |||
| 1675 | (str) | 1683 | (str) |
| 1676 | register Lisp_Object str; | 1684 | register Lisp_Object str; |
| 1677 | { | 1685 | { |
| 1686 | Lisp_Object value; | ||
| 1678 | unsigned char *p; | 1687 | unsigned char *p; |
| 1679 | 1688 | ||
| 1680 | CHECK_STRING (str, 0); | 1689 | CHECK_STRING (str, 0); |
| @@ -1691,7 +1700,13 @@ It ignores leading spaces and tabs.") | |||
| 1691 | return make_float (atof (p)); | 1700 | return make_float (atof (p)); |
| 1692 | #endif /* LISP_FLOAT_TYPE */ | 1701 | #endif /* LISP_FLOAT_TYPE */ |
| 1693 | 1702 | ||
| 1694 | return make_number (atoi (p)); | 1703 | if (sizeof (int) == sizeof (EMACS_INT)) |
| 1704 | XSETINT (value, atoi (p)); | ||
| 1705 | else if (sizeof (long) == sizeof (EMACS_INT)) | ||
| 1706 | XSETINT (value, atol (p)); | ||
| 1707 | else | ||
| 1708 | abort (); | ||
| 1709 | return value; | ||
| 1695 | } | 1710 | } |
| 1696 | 1711 | ||
| 1697 | enum arithop | 1712 | enum arithop |