Mercurial > hg > xemacs-beta
annotate src/strcpy.c @ 1332:6aa23bb3da6b
[xemacs-hg @ 2003-03-02 02:18:05 by ben]
To: xemacs-patches@xemacs.org
PROBLEMS: Include nt/PROBLEMS and update. Add note about incremental
linking badness.
cmdloop.el, custom.el, dumped-lisp.el, files.el, keydefs.el, keymap.el, lisp-mode.el, make-docfile.el, replace.el, simple.el, subr.el, view-less.el, wid-edit.el: Lots of syncing with FSF 21.2.
Use if-fboundp in wid-edit.el.
New file newcomment.el from FSF.
internals/internals.texi: Fix typo.
(Build-Time Dependencies): New node.
PROBLEMS: Delete.
config.inc.samp, xemacs.mak: Eliminate HAVE_VC6, use SUPPORT_EDIT_AND_CONTINUE in its place.
No incremental linking unless SUPPORT_EDIT_AND_CONTINUE, since it
can cause nasty crashes in pdump. Put warnings about this in
config.inc.samp. Report the full compile flags used for src
and lib-src in the Installation output.
alloc.c, lisp.h, ralloc.c, regex.c: Use ALLOCA() in regex.c to avoid excessive stack allocation.
Also fix subtle problem with REL_ALLOC() -- any call to malloc()
(direct or indirect) may relocate rel-alloced data, causing
buffer text to shift. After any such call, regex must update
all its pointers to such data. Add a system, when
ERROR_CHECK_MALLOC, whereby regex.c indicates all the places
it is prepared to handle malloc()/realloc()/free(), and any
calls anywhere in XEmacs outside of this will trigger an abort.
alloc.c, dialog-msw.c, eval.c, event-stream.c, general-slots.h, insdel.c, lisp.h, menubar-msw.c, menubar-x.c: Change *run_hook*_trapping_problems to take a warning class, not
a string. Factor out code to issue warnings, add flag to
call_trapping_problems() to postpone warning issue, and make
*run_hook*_trapping_problems issue their own warnings tailored
to the hook, postponed in the case of safe_run_hook_trapping_problems()
so that the appropriate message can be issued about resetting to
nil only when not `quit'. Make record_unwind_protect_restoring_int()
non-static.
dumper.c: Issue notes about incremental linking problems under Windows.
fileio.c: Mule-ize encrypt/decrypt-string code.
text.h: Spacing changes.
| author | ben |
|---|---|
| date | Sun, 02 Mar 2003 02:18:12 +0000 |
| parents | abe6d1db359e |
| children |
| rev | line source |
|---|---|
| 428 | 1 /* This file is part of XEmacs. |
| 2 | |
| 3 XEmacs is free software; you can redistribute it and/or modify it | |
| 4 under the terms of the GNU General Public License as published by the | |
| 5 Free Software Foundation; either version 2, or (at your option) any | |
| 6 later version. | |
| 7 | |
| 8 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
| 9 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 10 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 11 for more details. | |
| 12 | |
| 13 You should have received a copy of the GNU General Public License | |
| 14 along with XEmacs; see the file COPYING. If not, write to | |
| 15 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 16 Boston, MA 02111-1307, USA. */ | |
| 17 | |
| 18 /* Synched up with: Not in FSF. */ | |
| 19 | |
| 20 /* In SunOS 4.1.1 the strcpy function references memory past the last byte of | |
| 21 the string! This will core dump if the memory following the last byte is | |
| 22 not mapped. | |
| 23 | |
| 24 Here are correct versions by hbs@lucid.com. | |
| 25 */ | |
| 26 | |
| 27 # include <config.h> | |
| 28 # ifndef REGISTER /* Strictly enforced in 20.3 */ | |
| 29 # define REGISTER | |
| 30 # endif | |
| 31 | |
| 32 #define ALIGNED(x) (!(((unsigned long) (x)) & (sizeof (unsigned long) - 1))) | |
| 33 | |
| 34 #define MAGIC 0x7efefeff | |
| 35 #define HIGH_BIT_P(c) ((c) & hi_bit) | |
| 36 #define HAS_ZERO(c) (((((c) + magic) ^ (c)) & not_magic) != not_magic) | |
| 37 | |
| 38 char * | |
| 39 strcpy (char *to, const char *from) | |
| 40 { | |
| 41 char *return_value = to; | |
| 42 if (to == from) | |
| 43 return to; | |
| 44 else if (ALIGNED (to) && ALIGNED (from)) | |
| 45 { | |
| 46 unsigned long *to1 = (unsigned long *) to; | |
| 47 const unsigned long *from1 = (const unsigned long *) from; | |
| 48 unsigned long c; | |
| 49 unsigned long magic = MAGIC; | |
| 50 unsigned long not_magic = ~magic; | |
| 51 /* unsigned long hi_bit = 0x80000000; */ | |
| 52 | |
| 53 while ((c = *from1) != 0) | |
| 54 { | |
| 55 if (HAS_ZERO(c)) | |
| 56 { | |
| 57 to = (char *) to1; | |
| 442 | 58 from = (const char *) from1; |
| 428 | 59 goto slow_loop; |
| 60 } | |
| 61 else | |
| 62 { | |
| 63 *to1 = c; | |
| 64 to1++; | |
| 65 from1++; | |
| 66 } | |
| 67 } | |
| 68 | |
| 69 to = (char *) to1; | |
| 70 *to = (char) 0; | |
| 71 return return_value; | |
| 72 } | |
| 73 else | |
| 74 { | |
| 75 char c; | |
| 76 | |
| 77 slow_loop: | |
| 78 | |
| 79 while ((c = *from) != 0) | |
| 80 { | |
| 81 *to = c; | |
| 82 to++; | |
| 83 from++; | |
| 84 } | |
| 85 *to = (char) 0; | |
| 86 } | |
| 87 return return_value; | |
| 88 } |
