Mercurial > hg > xemacs-beta
annotate src/strcpy.c @ 1346:01c57eb70ae9
[xemacs-hg @ 2003-03-09 02:27:27 by ben]
To: xemacs-patches@xemacs.org
i.c: Sleep between calls to check for I/O, since these calls are non-blocking.
behavior.el: Allow other keywords for forward compatibility.
cl-macs.el: Rewrite to eliminate byte-compiler warning when `return' is used
without `finally'.
cmdloop.el: Avoid truncated error messages for `end-of-file' and the like.
cmdloop.el: Avoid char-int error after syncing.
files.el: Eliminate byte-compile warnings.
printer.el: Fix line-width calculations.
#### This used to work. Someone's changes (perhaps by
Michael Sperber?) seem to have messed something up.
simple.el: Use new clear-left-side functions to avoid messages ending up on
the same line as other output.
xemacs.mak: Add override for info/ as well when separate source/build dirs.
xemacs.mak: Order sections in main build process and add comments. Add
additional dependencies to try and prevent later steps from
happening when failures in earlier steps have occurred.
Makefile.in.in: Order sections in main build process and add comments. Add
additional dependencies to try and prevent later steps from
happening when failures in earlier steps have occurred.
alloc.c: Don't arbitrarily clear Vconfigure_info_directory since it
messes up separate build/source dirs.
console.c, console.h, device-msw.c, device.c: Add accidentally omitted msprinter console and data descriptions.
print.c, console-msw.c: Add clear-left-side functionality to help keep stdio/stderr
output from separate sources on separate lines. Generalize
the different kinds of debugging output. Add dpa().
profile.c: Add better docs on Unix/Windows differences.
regex.c: Fix problems with rel-alloc compilation caused by previous patch.
emacs.c: Seg fault rather than abort on Cygwin, since gdb doesn't trap
aborts properly.
console-gtk-impl.h, console-gtk.h, console-msw.h, console-x-impl.h, console-x.h, dialog-gtk.c, dialog-x.c, event-msw.c, frame-gtk.c, frame-x.c, frameslots.h, glyphs-gtk.c, glyphs-x.c, gui-gtk.c, gui-x.c, inline.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, scrollbar-gtk.c, scrollbar-x.c, ui-gtk.c: Delete popup-data object. Delete menubar_data field from frames,
since its usage is frame-specific. Delete menubar-msw.h,
gui-x.h, gui-gtk.h. Clean up handling of lwlib callback data
GCPRO'ing and add missing GCPRO recomputation in widget code.
author | ben |
---|---|
date | Sun, 09 Mar 2003 02:27:46 +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 } |