Mercurial > hg > xemacs-beta
annotate src/strcmp.c @ 780:578cb2932d72
[xemacs-hg @ 2002-03-18 10:07:30 by ben]
config.inc.samp, xemacs.mak: Deal with never-ending perl quoting problems.
README: Include a long, long description of the suggested directory layout
for developing XEmacs. This should probably go as part of a
larger document, a "Getting Started with Developing XEmacs". ####
Does such a document exist?
etc\unicode\mule-ucs\*: New directory, containing translation
files for the remaining charsets that are not in
unicode\unicode-consortium but are in mule-ucs.
etc\unicode\other\*: New directory, containing translation
files made up on an ad-hoc basis.
etc\unicode\README: Update.
* Some ChangeLog entries from stuff that got applied long ago
never got checked in, due to the nasty SCCS "oops, i forgot again
..." bug.
mule\lao.el: Convert stuff to XEmacs-style.
mule\thai-xtis.el: Move thai-xtis-chars.el stuff to here, since we can now handle
encountering characters of a charset before the charset is defined.
mule\thai-xtis-chars.el: Removed, moved into thai-xtis.el.
mule\mule-msw-init.el: Move some stuff into mule-msw-init-late.el,
which references charsets and thus needs to be delayed until after
all charsets have been created.
mule\mule-msw-init-late.el: New file, some stuff from
mule-msw-init.el.
dumped-lisp.el: Load the remaining languages -- lao, indian, devanagari, tibetan.
Load new file mule-msw-init-late.
unicode.el: Load the new tables for Ethiopic, Vietnamese, and other languages
extracted from mule-ucs.
mule\lao.el: Convert stuff to XEmacs-style.
mule\thai-xtis.el: Move thai-xtis-chars.el stuff to here, since we can now handle
encountering characters of a charset before the charset is defined.
mule\thai-xtis-chars.el: Removed, moved into thai-xtis.el.
mule\mule-msw-init.el: Move some stuff into mule-msw-init-late.el,
which references charsets and thus needs to be delayed until after
all charsets have been created.
mule\mule-msw-init-late.el: New file, some stuff from
mule-msw-init.el.
mule\lao.el: Convert stuff to XEmacs-style.
mule\thai-xtis.el: Move thai-xtis-chars.el stuff to here, since we can now handle
encountering characters of a charset before the charset is defined.
mule\thai-xtis-chars.el: Removed, moved into thai-xtis.el.
mule\mule-msw-init.el: Move some stuff into mule-msw-init-late.el,
which references charsets and thus needs to be delayed until after
all charsets have been created.
mule\mule-msw-init-late.el: New file, some stuff from
mule-msw-init.el.
dumped-lisp.el: Load the remaining languages -- lao, indian, devanagari, tibetan.
Load new file mule-msw-init-late.
unicode.el: Load the new tables for Ethiopic, Vietnamese, and other languages
extracted from mule-ucs.
mule\lao.el: Convert stuff to XEmacs-style.
mule\thai-xtis.el: Move thai-xtis-chars.el stuff to here, since we can now handle
encountering characters of a charset before the charset is defined.
mule\thai-xtis-chars.el: Removed, moved into thai-xtis.el.
mule\mule-msw-init.el: Move some stuff into mule-msw-init-late.el,
which references charsets and thus needs to be delayed until after
all charsets have been created.
mule\mule-msw-init-late.el: New file, some stuff from
mule-msw-init.el.
fns.c, lread.c: Add variable require-prints-loading-message to cause loading
messages to get printed when a file is loading during a `require',
which normally doesn't happen. This can be set using env var
XEMACSDEBUG to debug problems with non-interactive compilation.
Modify load-internal so it prints "Requiring: ..." instead of
"Loading: ..." when appropriate.
author | ben |
---|---|
date | Mon, 18 Mar 2002 10:07:39 +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 strcmp and strncmp functions reference memory | |
21 past the last byte of the string! This will core dump if the memory | |
22 following the last byte is 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 #include <string.h> | |
33 #define ALIGNED(x) (!(((unsigned long) (x)) & (sizeof (unsigned long) - 1))) | |
34 | |
35 #define MAGIC 0x7efefeff | |
36 #define HIGH_BIT_P(c) ((c) & hi_bit) | |
37 #define HAS_ZERO(c) (((((c) + magic) ^ (c)) & not_magic) != not_magic) | |
38 | |
39 int | |
40 strcmp (const char *x, const char *y) | |
41 { | |
42 if (x == y) | |
43 return 0; | |
44 else if (ALIGNED (x) && ALIGNED (y)) | |
45 { | |
442 | 46 const unsigned long *x1 = (const unsigned long *) x; |
47 const unsigned long *y1 = (const unsigned long *) y; | |
428 | 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 = *x1) == *y1) | |
54 { | |
55 if (HAS_ZERO(c)) | |
56 { | |
57 if (!HIGH_BIT_P (c)) | |
58 return 0; | |
59 else | |
60 { | |
442 | 61 x = (const char *) x1; |
62 y = (const char *) y1; | |
428 | 63 goto slow_loop; |
64 } | |
65 } | |
66 | |
67 x1++; | |
68 y1++; | |
69 } | |
70 | |
442 | 71 x = (const char *) x1; |
72 y = (const char *) y1; | |
428 | 73 goto slow_loop; |
74 } | |
75 else | |
76 { | |
77 char c; | |
78 | |
79 slow_loop: | |
80 | |
81 while ((c = *x) == *y) | |
82 { | |
83 if (c == (char) 0) return 0; | |
84 x++; | |
85 y++; | |
86 } | |
87 return (*x - *y); | |
88 } | |
89 } | |
90 | |
91 | |
92 int | |
442 | 93 strncmp (const char *x, const char *y, size_t n) |
428 | 94 { |
95 if ((x == y) || (n <= 0)) | |
96 return 0; | |
97 else if (ALIGNED (x) && ALIGNED (y)) | |
98 { | |
442 | 99 const unsigned long *x1 = (const unsigned long *) x; |
100 const unsigned long *y1 = (const unsigned long *) y; | |
428 | 101 unsigned long c; |
102 unsigned long magic = MAGIC; | |
103 unsigned long not_magic = ~magic; | |
104 unsigned long hi_bit = 0x80000000; | |
105 | |
106 while ((c = *x1) == *y1) | |
107 { | |
108 n -= sizeof (unsigned long); | |
109 if (n <= 0) | |
110 return 0; | |
111 | |
112 if (HAS_ZERO(c)) | |
113 { | |
114 if (!HIGH_BIT_P (c)) | |
115 return 0; | |
116 else | |
117 { | |
442 | 118 x = (const char *) x1; |
119 y = (const char *) y1; | |
428 | 120 goto slow_loop; |
121 } | |
122 } | |
123 | |
124 x1++; | |
125 y1++; | |
126 } | |
127 | |
442 | 128 x = (const char *) x1; |
129 y = (const char *) y1; | |
428 | 130 goto slow_loop; |
131 } | |
132 else | |
133 { | |
134 char c; | |
135 | |
136 slow_loop: | |
137 | |
138 while ((c = *x) == *y) | |
139 { | |
140 n--; | |
141 if (n <= 0) | |
142 return 0; | |
143 if (c == (char) 0) | |
144 return 0; | |
145 x++; | |
146 y++; | |
147 } | |
148 return (*x - *y); | |
149 } | |
150 } |