aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorRichard M. Stallman1995-05-05 02:59:15 +0000
committerRichard M. Stallman1995-05-05 02:59:15 +0000
commite6c82a8d35233abd7211ba1b9dae1e1e22362d54 (patch)
tree38f7fd72fa74a94b5435129e90cf184dc5f9fbe9 /src/data.c
parentf9fa352f109bb7f9b4314c57348d7eecfa2aa63c (diff)
downloademacs-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.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)
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
1697enum arithop 1712enum arithop