diff options
| author | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-19 23:27:12 +0200 |
|---|---|---|
| committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-08-19 23:27:12 +0200 |
| commit | 26fbe7f1e68bb0c96da32491efcf3696fe6c299b (patch) | |
| tree | c4d95289187a64e9c7517bf73d8208026c3d2fb3 /gl/regex_internal.h | |
| parent | 5f79e3e9f62ca5487d9881973149136ba1d19d3e (diff) | |
| download | monitoring-plugins-26fbe7f1e68bb0c96da32491efcf3696fe6c299b.tar.gz | |
Sync with the latest Gnulib code (6f2d632)
Diffstat (limited to 'gl/regex_internal.h')
| -rw-r--r-- | gl/regex_internal.h | 194 |
1 files changed, 115 insertions, 79 deletions
diff --git a/gl/regex_internal.h b/gl/regex_internal.h index 5aa5aa28..a2b8f16f 100644 --- a/gl/regex_internal.h +++ b/gl/regex_internal.h | |||
| @@ -1,50 +1,81 @@ | |||
| 1 | /* Extended regular expression matching and search library. | 1 | /* Extended regular expression matching and search library. |
| 2 | Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free | 2 | Copyright (C) 2002-2013 Free Software Foundation, Inc. |
| 3 | Software Foundation, Inc. | ||
| 4 | This file is part of the GNU C Library. | 3 | This file is part of the GNU C Library. |
| 5 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. | 4 | Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. |
| 6 | 5 | ||
| 7 | This program is free software; you can redistribute it and/or modify | 6 | The GNU C Library is free software; you can redistribute it and/or |
| 8 | it under the terms of the GNU General Public License as published by | 7 | modify it under the terms of the GNU General Public |
| 9 | the Free Software Foundation; either version 3, or (at your option) | 8 | License as published by the Free Software Foundation; either |
| 10 | any later version. | 9 | version 3 of the License, or (at your option) any later version. |
| 11 | 10 | ||
| 12 | This program is distributed in the hope that it will be useful, | 11 | The GNU C Library is distributed in the hope that it will be useful, |
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 | GNU General Public License for more details. | 14 | General Public License for more details. |
| 16 | 15 | ||
| 17 | You should have received a copy of the GNU General Public License along | 16 | You should have received a copy of the GNU General Public |
| 18 | with this program; if not, write to the Free Software Foundation, | 17 | License along with the GNU C Library; if not, see |
| 19 | Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ | 18 | <http://www.gnu.org/licenses/>. */ |
| 20 | 19 | ||
| 21 | #ifndef _REGEX_INTERNAL_H | 20 | #ifndef _REGEX_INTERNAL_H |
| 22 | #define _REGEX_INTERNAL_H 1 | 21 | #define _REGEX_INTERNAL_H 1 |
| 23 | 22 | ||
| 24 | #include <assert.h> | 23 | #include <assert.h> |
| 25 | #include <ctype.h> | 24 | #include <ctype.h> |
| 26 | #include <stdbool.h> | ||
| 27 | #include <stdio.h> | 25 | #include <stdio.h> |
| 28 | #include <stdlib.h> | 26 | #include <stdlib.h> |
| 29 | #include <string.h> | 27 | #include <string.h> |
| 30 | 28 | ||
| 31 | #include <langinfo.h> | 29 | #include <langinfo.h> |
| 32 | #ifndef _LIBC | 30 | #include <locale.h> |
| 33 | # include "localcharset.h" | ||
| 34 | #endif | ||
| 35 | #if defined HAVE_LOCALE_H || defined _LIBC | ||
| 36 | # include <locale.h> | ||
| 37 | #endif | ||
| 38 | |||
| 39 | #include <wchar.h> | 31 | #include <wchar.h> |
| 40 | #include <wctype.h> | 32 | #include <wctype.h> |
| 33 | #include <stdbool.h> | ||
| 41 | #include <stdint.h> | 34 | #include <stdint.h> |
| 42 | #if defined _LIBC | 35 | |
| 36 | #ifdef _LIBC | ||
| 43 | # include <bits/libc-lock.h> | 37 | # include <bits/libc-lock.h> |
| 38 | # define lock_define(name) __libc_lock_define (, name) | ||
| 39 | # define lock_init(lock) (__libc_lock_init (lock), 0) | ||
| 40 | # define lock_fini(lock) 0 | ||
| 41 | # define lock_lock(lock) __libc_lock_lock (lock) | ||
| 42 | # define lock_unlock(lock) __libc_lock_unlock (lock) | ||
| 43 | #elif defined GNULIB_LOCK | ||
| 44 | # include "glthread/lock.h" | ||
| 45 | /* Use gl_lock_define if empty macro arguments are known to work. | ||
| 46 | Otherwise, fall back on less-portable substitutes. */ | ||
| 47 | # if ((defined __GNUC__ && !defined __STRICT_ANSI__) \ | ||
| 48 | || (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__)) | ||
| 49 | # define lock_define(name) gl_lock_define (, name) | ||
| 50 | # elif USE_POSIX_THREADS | ||
| 51 | # define lock_define(name) pthread_mutex_t name; | ||
| 52 | # elif USE_PTH_THREADS | ||
| 53 | # define lock_define(name) pth_mutex_t name; | ||
| 54 | # elif USE_SOLARIS_THREADS | ||
| 55 | # define lock_define(name) mutex_t name; | ||
| 56 | # elif USE_WINDOWS_THREADS | ||
| 57 | # define lock_define(name) gl_lock_t name; | ||
| 58 | # else | ||
| 59 | # define lock_define(name) | ||
| 60 | # endif | ||
| 61 | # define lock_init(lock) glthread_lock_init (&(lock)) | ||
| 62 | # define lock_fini(lock) glthread_lock_destroy (&(lock)) | ||
| 63 | # define lock_lock(lock) glthread_lock_lock (&(lock)) | ||
| 64 | # define lock_unlock(lock) glthread_lock_unlock (&(lock)) | ||
| 65 | #elif defined GNULIB_PTHREAD | ||
| 66 | # include <pthread.h> | ||
| 67 | # define lock_define(name) pthread_mutex_t name; | ||
| 68 | # define lock_init(lock) pthread_mutex_init (&(lock), 0) | ||
| 69 | # define lock_fini(lock) pthread_mutex_destroy (&(lock)) | ||
| 70 | # define lock_lock(lock) pthread_mutex_lock (&(lock)) | ||
| 71 | # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) | ||
| 44 | #else | 72 | #else |
| 45 | # define __libc_lock_init(NAME) do { } while (0) | 73 | # define lock_define(name) |
| 46 | # define __libc_lock_lock(NAME) do { } while (0) | 74 | # define lock_init(lock) 0 |
| 47 | # define __libc_lock_unlock(NAME) do { } while (0) | 75 | # define lock_fini(lock) ((void) 0) |
| 76 | /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ | ||
| 77 | # define lock_lock(lock) ((void) dfa) | ||
| 78 | # define lock_unlock(lock) ((void) 0) | ||
| 48 | #endif | 79 | #endif |
| 49 | 80 | ||
| 50 | /* In case that the system doesn't have isblank(). */ | 81 | /* In case that the system doesn't have isblank(). */ |
| @@ -67,7 +98,7 @@ | |||
| 67 | # ifdef _LIBC | 98 | # ifdef _LIBC |
| 68 | # undef gettext | 99 | # undef gettext |
| 69 | # define gettext(msgid) \ | 100 | # define gettext(msgid) \ |
| 70 | INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES) | 101 | __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) |
| 71 | # endif | 102 | # endif |
| 72 | #else | 103 | #else |
| 73 | # define gettext(msgid) (msgid) | 104 | # define gettext(msgid) (msgid) |
| @@ -79,12 +110,7 @@ | |||
| 79 | # define gettext_noop(String) String | 110 | # define gettext_noop(String) String |
| 80 | #endif | 111 | #endif |
| 81 | 112 | ||
| 82 | /* For loser systems without the definition. */ | 113 | #if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC |
| 83 | #ifndef SIZE_MAX | ||
| 84 | # define SIZE_MAX ((size_t) -1) | ||
| 85 | #endif | ||
| 86 | |||
| 87 | #if (defined MB_CUR_MAX && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC | ||
| 88 | # define RE_ENABLE_I18N | 114 | # define RE_ENABLE_I18N |
| 89 | #endif | 115 | #endif |
| 90 | 116 | ||
| @@ -92,9 +118,6 @@ | |||
| 92 | # define BE(expr, val) __builtin_expect (expr, val) | 118 | # define BE(expr, val) __builtin_expect (expr, val) |
| 93 | #else | 119 | #else |
| 94 | # define BE(expr, val) (expr) | 120 | # define BE(expr, val) (expr) |
| 95 | # ifdef _LIBC | ||
| 96 | # define inline | ||
| 97 | # endif | ||
| 98 | #endif | 121 | #endif |
| 99 | 122 | ||
| 100 | /* Number of ASCII characters. */ | 123 | /* Number of ASCII characters. */ |
| @@ -111,22 +134,27 @@ | |||
| 111 | 134 | ||
| 112 | /* Rename to standard API for using out of glibc. */ | 135 | /* Rename to standard API for using out of glibc. */ |
| 113 | #ifndef _LIBC | 136 | #ifndef _LIBC |
| 137 | # undef __wctype | ||
| 138 | # undef __iswctype | ||
| 114 | # define __wctype wctype | 139 | # define __wctype wctype |
| 115 | # define __iswctype iswctype | 140 | # define __iswctype iswctype |
| 116 | # define __btowc btowc | 141 | # define __btowc btowc |
| 117 | # define __wcrtomb wcrtomb | ||
| 118 | # define __mbrtowc mbrtowc | 142 | # define __mbrtowc mbrtowc |
| 143 | # define __wcrtomb wcrtomb | ||
| 119 | # define __regfree regfree | 144 | # define __regfree regfree |
| 120 | # define attribute_hidden | 145 | # define attribute_hidden |
| 121 | #endif /* not _LIBC */ | 146 | #endif /* not _LIBC */ |
| 122 | 147 | ||
| 123 | #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) | 148 | #if __GNUC__ < 3 + (__GNUC_MINOR__ < 1) |
| 124 | # define __attribute(arg) __attribute__ (arg) | 149 | # define __attribute__(arg) |
| 125 | #else | ||
| 126 | # define __attribute(arg) | ||
| 127 | #endif | 150 | #endif |
| 128 | 151 | ||
| 129 | typedef __re_idx_t Idx; | 152 | typedef __re_idx_t Idx; |
| 153 | #ifdef _REGEX_LARGE_OFFSETS | ||
| 154 | # define IDX_MAX (SIZE_MAX - 2) | ||
| 155 | #else | ||
| 156 | # define IDX_MAX INT_MAX | ||
| 157 | #endif | ||
| 130 | 158 | ||
| 131 | /* Special return value for failure to match. */ | 159 | /* Special return value for failure to match. */ |
| 132 | #define REG_MISSING ((Idx) -1) | 160 | #define REG_MISSING ((Idx) -1) |
| @@ -337,7 +365,7 @@ typedef struct | |||
| 337 | Idx idx; /* for BACK_REF */ | 365 | Idx idx; /* for BACK_REF */ |
| 338 | re_context_type ctx_type; /* for ANCHOR */ | 366 | re_context_type ctx_type; /* for ANCHOR */ |
| 339 | } opr; | 367 | } opr; |
| 340 | #if __GNUC__ >= 2 && !__STRICT_ANSI__ | 368 | #if __GNUC__ >= 2 && !defined __STRICT_ANSI__ |
| 341 | re_token_type_t type : 8; | 369 | re_token_type_t type : 8; |
| 342 | #else | 370 | #else |
| 343 | re_token_type_t type; | 371 | re_token_type_t type; |
| @@ -418,26 +446,24 @@ struct re_dfa_t; | |||
| 418 | typedef struct re_dfa_t re_dfa_t; | 446 | typedef struct re_dfa_t re_dfa_t; |
| 419 | 447 | ||
| 420 | #ifndef _LIBC | 448 | #ifndef _LIBC |
| 421 | # if defined __i386__ && !defined __EMX__ | 449 | # define internal_function |
| 422 | # define internal_function __attribute ((regparm (3), stdcall)) | ||
| 423 | # else | ||
| 424 | # define internal_function | ||
| 425 | # endif | ||
| 426 | #endif | 450 | #endif |
| 427 | 451 | ||
| 452 | #ifndef NOT_IN_libc | ||
| 428 | static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, | 453 | static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, |
| 429 | Idx new_buf_len) | 454 | Idx new_buf_len) |
| 430 | internal_function; | 455 | internal_function; |
| 431 | #ifdef RE_ENABLE_I18N | 456 | # ifdef RE_ENABLE_I18N |
| 432 | static void build_wcs_buffer (re_string_t *pstr) internal_function; | 457 | static void build_wcs_buffer (re_string_t *pstr) internal_function; |
| 433 | static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) | 458 | static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) |
| 434 | internal_function; | 459 | internal_function; |
| 435 | #endif /* RE_ENABLE_I18N */ | 460 | # endif /* RE_ENABLE_I18N */ |
| 436 | static void build_upper_buffer (re_string_t *pstr) internal_function; | 461 | static void build_upper_buffer (re_string_t *pstr) internal_function; |
| 437 | static void re_string_translate_buffer (re_string_t *pstr) internal_function; | 462 | static void re_string_translate_buffer (re_string_t *pstr) internal_function; |
| 438 | static unsigned int re_string_context_at (const re_string_t *input, Idx idx, | 463 | static unsigned int re_string_context_at (const re_string_t *input, Idx idx, |
| 439 | int eflags) | 464 | int eflags) |
| 440 | internal_function __attribute ((pure)); | 465 | internal_function __attribute__ ((pure)); |
| 466 | #endif | ||
| 441 | #define re_string_peek_byte(pstr, offset) \ | 467 | #define re_string_peek_byte(pstr, offset) \ |
| 442 | ((pstr)->mbs[(pstr)->cur_idx + offset]) | 468 | ((pstr)->mbs[(pstr)->cur_idx + offset]) |
| 443 | #define re_string_fetch_byte(pstr) \ | 469 | #define re_string_fetch_byte(pstr) \ |
| @@ -455,7 +481,9 @@ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, | |||
| 455 | #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) | 481 | #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) |
| 456 | #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) | 482 | #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) |
| 457 | 483 | ||
| 458 | #include <alloca.h> | 484 | #if defined _LIBC || HAVE_ALLOCA |
| 485 | # include <alloca.h> | ||
| 486 | #endif | ||
| 459 | 487 | ||
| 460 | #ifndef _LIBC | 488 | #ifndef _LIBC |
| 461 | # if HAVE_ALLOCA | 489 | # if HAVE_ALLOCA |
| @@ -472,9 +500,18 @@ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, | |||
| 472 | # endif | 500 | # endif |
| 473 | #endif | 501 | #endif |
| 474 | 502 | ||
| 503 | #ifdef _LIBC | ||
| 504 | # define MALLOC_0_IS_NONNULL 1 | ||
| 505 | #elif !defined MALLOC_0_IS_NONNULL | ||
| 506 | # define MALLOC_0_IS_NONNULL 0 | ||
| 507 | #endif | ||
| 508 | |||
| 475 | #ifndef MAX | 509 | #ifndef MAX |
| 476 | # define MAX(a,b) ((a) < (b) ? (b) : (a)) | 510 | # define MAX(a,b) ((a) < (b) ? (b) : (a)) |
| 477 | #endif | 511 | #endif |
| 512 | #ifndef MIN | ||
| 513 | # define MIN(a,b) ((a) < (b) ? (a) : (b)) | ||
| 514 | #endif | ||
| 478 | 515 | ||
| 479 | #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) | 516 | #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) |
| 480 | #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) | 517 | #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) |
| @@ -490,8 +527,8 @@ struct bin_tree_t | |||
| 490 | 527 | ||
| 491 | re_token_t token; | 528 | re_token_t token; |
| 492 | 529 | ||
| 493 | /* `node_idx' is the index in dfa->nodes, if `type' == 0. | 530 | /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. |
| 494 | Otherwise `type' indicate the type of this node. */ | 531 | Otherwise 'type' indicate the type of this node. */ |
| 495 | Idx node_idx; | 532 | Idx node_idx; |
| 496 | }; | 533 | }; |
| 497 | typedef struct bin_tree_t bin_tree_t; | 534 | typedef struct bin_tree_t bin_tree_t; |
| @@ -544,9 +581,9 @@ struct re_dfastate_t | |||
| 544 | struct re_dfastate_t **trtable, **word_trtable; | 581 | struct re_dfastate_t **trtable, **word_trtable; |
| 545 | unsigned int context : 4; | 582 | unsigned int context : 4; |
| 546 | unsigned int halt : 1; | 583 | unsigned int halt : 1; |
| 547 | /* If this state can accept `multi byte'. | 584 | /* If this state can accept "multi byte". |
| 548 | Note that we refer to multibyte characters, and multi character | 585 | Note that we refer to multibyte characters, and multi character |
| 549 | collating elements as `multi byte'. */ | 586 | collating elements as "multi byte". */ |
| 550 | unsigned int accept_mb : 1; | 587 | unsigned int accept_mb : 1; |
| 551 | /* If this state has backreference node(s). */ | 588 | /* If this state has backreference node(s). */ |
| 552 | unsigned int has_backref : 1; | 589 | unsigned int has_backref : 1; |
| @@ -675,7 +712,7 @@ struct re_dfa_t | |||
| 675 | re_bitset_ptr_t sb_char; | 712 | re_bitset_ptr_t sb_char; |
| 676 | int str_tree_storage_idx; | 713 | int str_tree_storage_idx; |
| 677 | 714 | ||
| 678 | /* number of subexpressions `re_nsub' is in regex_t. */ | 715 | /* number of subexpressions 're_nsub' is in regex_t. */ |
| 679 | re_hashval_t state_hash_mask; | 716 | re_hashval_t state_hash_mask; |
| 680 | Idx init_node; | 717 | Idx init_node; |
| 681 | Idx nbackref; /* The number of backreference in this dfa. */ | 718 | Idx nbackref; /* The number of backreference in this dfa. */ |
| @@ -699,9 +736,7 @@ struct re_dfa_t | |||
| 699 | #ifdef DEBUG | 736 | #ifdef DEBUG |
| 700 | char* re_str; | 737 | char* re_str; |
| 701 | #endif | 738 | #endif |
| 702 | #ifdef _LIBC | 739 | lock_define (lock) |
| 703 | __libc_lock_define (, lock) | ||
| 704 | #endif | ||
| 705 | }; | 740 | }; |
| 706 | 741 | ||
| 707 | #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) | 742 | #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) |
| @@ -732,33 +767,33 @@ typedef struct | |||
| 732 | } bracket_elem_t; | 767 | } bracket_elem_t; |
| 733 | 768 | ||
| 734 | 769 | ||
| 735 | /* Inline functions for bitset_t operation. */ | 770 | /* Functions for bitset_t operation. */ |
| 736 | 771 | ||
| 737 | static inline void | 772 | static void |
| 738 | bitset_set (bitset_t set, Idx i) | 773 | bitset_set (bitset_t set, Idx i) |
| 739 | { | 774 | { |
| 740 | set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; | 775 | set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; |
| 741 | } | 776 | } |
| 742 | 777 | ||
| 743 | static inline void | 778 | static void |
| 744 | bitset_clear (bitset_t set, Idx i) | 779 | bitset_clear (bitset_t set, Idx i) |
| 745 | { | 780 | { |
| 746 | set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); | 781 | set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); |
| 747 | } | 782 | } |
| 748 | 783 | ||
| 749 | static inline bool | 784 | static bool |
| 750 | bitset_contain (const bitset_t set, Idx i) | 785 | bitset_contain (const bitset_t set, Idx i) |
| 751 | { | 786 | { |
| 752 | return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; | 787 | return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; |
| 753 | } | 788 | } |
| 754 | 789 | ||
| 755 | static inline void | 790 | static void |
| 756 | bitset_empty (bitset_t set) | 791 | bitset_empty (bitset_t set) |
| 757 | { | 792 | { |
| 758 | memset (set, '\0', sizeof (bitset_t)); | 793 | memset (set, '\0', sizeof (bitset_t)); |
| 759 | } | 794 | } |
| 760 | 795 | ||
| 761 | static inline void | 796 | static void |
| 762 | bitset_set_all (bitset_t set) | 797 | bitset_set_all (bitset_t set) |
| 763 | { | 798 | { |
| 764 | memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); | 799 | memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); |
| @@ -767,13 +802,13 @@ bitset_set_all (bitset_t set) | |||
| 767 | ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; | 802 | ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; |
| 768 | } | 803 | } |
| 769 | 804 | ||
| 770 | static inline void | 805 | static void |
| 771 | bitset_copy (bitset_t dest, const bitset_t src) | 806 | bitset_copy (bitset_t dest, const bitset_t src) |
| 772 | { | 807 | { |
| 773 | memcpy (dest, src, sizeof (bitset_t)); | 808 | memcpy (dest, src, sizeof (bitset_t)); |
| 774 | } | 809 | } |
| 775 | 810 | ||
| 776 | static inline void | 811 | static void __attribute__ ((unused)) |
| 777 | bitset_not (bitset_t set) | 812 | bitset_not (bitset_t set) |
| 778 | { | 813 | { |
| 779 | int bitset_i; | 814 | int bitset_i; |
| @@ -785,7 +820,7 @@ bitset_not (bitset_t set) | |||
| 785 | & ~set[BITSET_WORDS - 1]); | 820 | & ~set[BITSET_WORDS - 1]); |
| 786 | } | 821 | } |
| 787 | 822 | ||
| 788 | static inline void | 823 | static void __attribute__ ((unused)) |
| 789 | bitset_merge (bitset_t dest, const bitset_t src) | 824 | bitset_merge (bitset_t dest, const bitset_t src) |
| 790 | { | 825 | { |
| 791 | int bitset_i; | 826 | int bitset_i; |
| @@ -793,7 +828,7 @@ bitset_merge (bitset_t dest, const bitset_t src) | |||
| 793 | dest[bitset_i] |= src[bitset_i]; | 828 | dest[bitset_i] |= src[bitset_i]; |
| 794 | } | 829 | } |
| 795 | 830 | ||
| 796 | static inline void | 831 | static void __attribute__ ((unused)) |
| 797 | bitset_mask (bitset_t dest, const bitset_t src) | 832 | bitset_mask (bitset_t dest, const bitset_t src) |
| 798 | { | 833 | { |
| 799 | int bitset_i; | 834 | int bitset_i; |
| @@ -802,9 +837,9 @@ bitset_mask (bitset_t dest, const bitset_t src) | |||
| 802 | } | 837 | } |
| 803 | 838 | ||
| 804 | #ifdef RE_ENABLE_I18N | 839 | #ifdef RE_ENABLE_I18N |
| 805 | /* Inline functions for re_string. */ | 840 | /* Functions for re_string. */ |
| 806 | static inline int | 841 | static int |
| 807 | internal_function __attribute ((pure)) | 842 | internal_function __attribute__ ((pure, unused)) |
| 808 | re_string_char_size_at (const re_string_t *pstr, Idx idx) | 843 | re_string_char_size_at (const re_string_t *pstr, Idx idx) |
| 809 | { | 844 | { |
| 810 | int byte_idx; | 845 | int byte_idx; |
| @@ -816,8 +851,8 @@ re_string_char_size_at (const re_string_t *pstr, Idx idx) | |||
| 816 | return byte_idx; | 851 | return byte_idx; |
| 817 | } | 852 | } |
| 818 | 853 | ||
| 819 | static inline wint_t | 854 | static wint_t |
| 820 | internal_function __attribute ((pure)) | 855 | internal_function __attribute__ ((pure, unused)) |
| 821 | re_string_wchar_at (const re_string_t *pstr, Idx idx) | 856 | re_string_wchar_at (const re_string_t *pstr, Idx idx) |
| 822 | { | 857 | { |
| 823 | if (pstr->mb_cur_max == 1) | 858 | if (pstr->mb_cur_max == 1) |
| @@ -825,15 +860,15 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx) | |||
| 825 | return (wint_t) pstr->wcs[idx]; | 860 | return (wint_t) pstr->wcs[idx]; |
| 826 | } | 861 | } |
| 827 | 862 | ||
| 863 | # ifndef NOT_IN_libc | ||
| 828 | static int | 864 | static int |
| 829 | internal_function __attribute ((pure)) | 865 | internal_function __attribute__ ((pure, unused)) |
| 830 | re_string_elem_size_at (const re_string_t *pstr, Idx idx) | 866 | re_string_elem_size_at (const re_string_t *pstr, Idx idx) |
| 831 | { | 867 | { |
| 832 | # ifdef _LIBC | 868 | # ifdef _LIBC |
| 833 | const unsigned char *p, *extra; | 869 | const unsigned char *p, *extra; |
| 834 | const int32_t *table, *indirect; | 870 | const int32_t *table, *indirect; |
| 835 | int32_t tmp; | 871 | # include <locale/weight.h> |
| 836 | # include <locale/weight.h> | ||
| 837 | uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); | 872 | uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); |
| 838 | 873 | ||
| 839 | if (nrules != 0) | 874 | if (nrules != 0) |
| @@ -844,13 +879,14 @@ re_string_elem_size_at (const re_string_t *pstr, Idx idx) | |||
| 844 | indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, | 879 | indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, |
| 845 | _NL_COLLATE_INDIRECTMB); | 880 | _NL_COLLATE_INDIRECTMB); |
| 846 | p = pstr->mbs + idx; | 881 | p = pstr->mbs + idx; |
| 847 | tmp = findidx (&p); | 882 | findidx (&p, pstr->len - idx); |
| 848 | return p - pstr->mbs - idx; | 883 | return p - pstr->mbs - idx; |
| 849 | } | 884 | } |
| 850 | else | 885 | else |
| 851 | # endif /* _LIBC */ | 886 | # endif /* _LIBC */ |
| 852 | return 1; | 887 | return 1; |
| 853 | } | 888 | } |
| 889 | # endif | ||
| 854 | #endif /* RE_ENABLE_I18N */ | 890 | #endif /* RE_ENABLE_I18N */ |
| 855 | 891 | ||
| 856 | #ifndef __GNUC_PREREQ | 892 | #ifndef __GNUC_PREREQ |
