Mercurial > gnulib
annotate lib/mbsrchr.c @ 40231:9b3c79fdfe0b
strtod: fix clash with strtold
Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
* lib/strtod.c (compute_minus_zero, minus_zero):
Simplify by remving the macro / external variable,
and having just a function. User changed. This avoids
the need for an external variable that might clash.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 11 Mar 2019 16:40:29 -0700 |
parents | b06060465f09 |
children |
rev | line source |
---|---|
8084 | 1 /* Searching a string for the last occurrence of a character. |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
19484
diff
changeset
|
2 Copyright (C) 2007-2019 Free Software Foundation, Inc. |
8084 | 3 Written by Bruno Haible <bruno@clisp.org>, 2007. |
4 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8131
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
8084 | 6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8131
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8131
diff
changeset
|
8 (at your option) any later version. |
8084 | 9 |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
19190 | 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
8084 | 17 |
18 #include <config.h> | |
19 | |
20 /* Specification. */ | |
21 #include <string.h> | |
22 | |
10954
a0bbe1a6f787
Remove HAVE_MBRTOWC conditionals. Use mbrtowc unconditionally.
Bruno Haible <bruno@clisp.org>
parents:
9309
diff
changeset
|
23 #include "mbuiter.h" |
8084 | 24 |
25 /* Locate the last single-byte character C in the character string STRING, | |
26 and return a pointer to it. Return NULL if C is not found in STRING. */ | |
27 char * | |
28 mbsrchr (const char *string, int c) | |
29 { | |
30 if (MB_CUR_MAX > 1 | |
31 /* Optimization: We know that ASCII characters < 0x30 don't occur as | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
32 part of multibyte characters longer than 1 byte. Hence, if c < 0x30, |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
33 the faster unibyte loop can be used. */ |
8084 | 34 && (unsigned char) c >= 0x30) |
35 { | |
36 const char *result = NULL; | |
37 mbui_iterator_t iter; | |
38 | |
8131 | 39 for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter)) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
40 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
41 if (mb_len (mbui_cur (iter)) == 1 |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
42 && (unsigned char) * mbui_cur_ptr (iter) == (unsigned char) c) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
43 result = mbui_cur_ptr (iter); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
10954
diff
changeset
|
44 } |
8084 | 45 return (char *) result; |
46 } | |
47 else | |
48 return strrchr (string, c); | |
49 } |