summaryrefslogtreecommitdiff
path: root/posix
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-03-19 21:04:10 +0000
committerJakub Jelinek <jakub@redhat.com>2005-03-19 21:04:10 +0000
commit8f8ebbc438fcb4b22fba8beb3ef3d1aa59d9d7bf (patch)
treeb7091affa76bbaf47e78a59dfc72b2102554eaf9 /posix
parentf5c3480e830e94e0e51a0bdb1053944daed8bc58 (diff)
Updated to fedora-glibc-20050319T1907cvs/fedora-glibc-2_3_4-15
Diffstat (limited to 'posix')
-rw-r--r--posix/bits/unistd.h96
-rw-r--r--posix/regcomp.c12
-rw-r--r--posix/regex_internal.c42
-rw-r--r--posix/regexec.c6
4 files changed, 100 insertions, 56 deletions
diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h
index dab98af569..988f0167ed 100644
--- a/posix/bits/unistd.h
+++ b/posix/bits/unistd.h
@@ -21,44 +21,78 @@
# error "Never include <bits/unistd.h> directly; use <unistd.h> instead."
#endif
-extern void __chk_fail (void) __attribute__((noreturn));
-#define read(fd, buf, nbytes) \
- (__extension__ \
- ({ size_t __nbytes_val = (nbytes); \
- if (__bos0 (buf) != (size_t) -1 && __bos0 (buf) < __nbytes_val) \
- __chk_fail (); \
- read (fd, buf, __nbytes_val); }))
+extern void __chk_fail (void) __attribute__((__noreturn__));
+extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,
+ size_t __nbytes), read) __wur;
+
+extern __always_inline __wur ssize_t
+read (int __fd, void *__buf, size_t __nbytes)
+{
+ if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
+ __chk_fail ();
+ return __read_alias (__fd, __buf, __nbytes);
+}
#ifdef __USE_UNIX98
-# define pread(fd, buf, nbytes, offset) \
- (__extension__ \
- ({ size_t __nbytes_val = (nbytes); \
- if (__bos0 (buf) != (size_t) -1 && __bos0 (buf) < __nbytes_val) \
- __chk_fail (); \
- pread (fd, buf, __nbytes_val, offset); }))
+extern ssize_t __REDIRECT (__pread_alias,
+ (int __fd, void *__buf, size_t __nbytes,
+ __off_t __offset), pread) __wur;
+extern ssize_t __REDIRECT (__pread64_alias,
+ (int __fd, void *__buf, size_t __nbytes,
+ __off64_t __offset), pread64) __wur;
+
+# ifndef __USE_FILE_OFFSET64
+extern __always_inline __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
+{
+ if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
+ __chk_fail ();
+ return __pread_alias (__fd, __buf, __nbytes, __offset);
+}
+# else
+extern __always_inline __wur ssize_t
+pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
+{
+ if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
+ __chk_fail ();
+ return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
+# endif
# ifdef __USE_LARGEFILE64
-# define pread64(fd, buf, nbytes, offset) \
- (__extension__ \
- ({ size_t __nbytes_val = (nbytes); \
- if (__bos0 (buf) != (size_t) -1 && __bos0 (buf) < __nbytes_val) \
- __chk_fail (); \
- pread64 (fd, buf, __nbytes_val, offset); }))
+extern __always_inline __wur ssize_t
+pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
+{
+ if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
+ __chk_fail ();
+ return __pread64_alias (__fd, __buf, __nbytes, __offset);
+}
# endif
#endif
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
-# define readlink(path, buf, len) \
- (__extension__ \
- ({ size_t __len_val = (len); \
- if (__bos (buf) != (size_t) -1 && __bos (buf) < __len_val) \
- __chk_fail (); \
- readlink (path, buf, __len_val); }))
+extern int __REDIRECT_NTH (__readlink_alias,
+ (__const char *__restrict __path,
+ char *__restrict __buf, size_t __len), readlink)
+ __nonnull ((1, 2)) __wur;
+
+extern __always_inline __nonnull ((1, 2)) __wur int
+__NTH (readlink (__const char *__restrict __path, char *__restrict __buf,
+ size_t __len))
+{
+ if (__bos (__buf) != (size_t) -1 && __len > __bos (__buf))
+ __chk_fail ();
+ return __readlink_alias (__path, __buf, __len);
+}
#endif
-#define getcwd(buf, size) \
- (__extension__ \
- ({ size_t __size_val = (size); \
- if (__bos (buf) != (size_t) -1 && __bos (buf) < __size_val) \
- __chk_fail (); \
- getcwd (buf, __size_val); }))
+extern char *__REDIRECT_NTH (__getcwd_alias,
+ (char *__buf, size_t __size), getcwd) __wur;
+
+extern __always_inline __wur char *
+__NTH (getcwd (char *__buf, size_t __size))
+{
+ if (__bos (__buf) != (size_t) -1 && __size > __bos (__buf))
+ __chk_fail ();
+ return __getcwd_alias (__buf, __size);
+}
diff --git a/posix/regcomp.c b/posix/regcomp.c
index a7112cffdd..68e2bdab92 100644
--- a/posix/regcomp.c
+++ b/posix/regcomp.c
@@ -359,7 +359,8 @@ re_compile_fastmap_iter (bufp, init_state, fastmap)
memset (&state, 0, sizeof (state));
if (mbrtowc (&wc, (const char *) buf, p - buf,
&state) == p - buf
- && __wcrtomb ((char *) buf, towlower (wc), &state) > 0)
+ && (__wcrtomb ((char *) buf, towlower (wc), &state)
+ != (size_t) -1))
re_set_fastmap (fastmap, 0, buf[0]);
}
#endif
@@ -409,12 +410,13 @@ re_compile_fastmap_iter (bufp, init_state, fastmap)
char buf[256];
mbstate_t state;
memset (&state, '\0', sizeof (state));
- __wcrtomb (buf, cset->mbchars[i], &state);
- re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
+ if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
+ re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
{
- __wcrtomb (buf, towlower (cset->mbchars[i]), &state);
- re_set_fastmap (fastmap, 0, *(unsigned char *) buf);
+ if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
+ != (size_t) -1)
+ re_set_fastmap (fastmap, 0, *(unsigned char *) buf);
}
}
}
diff --git a/posix/regex_internal.c b/posix/regex_internal.c
index c3295a851c..b3d44c368d 100644
--- a/posix/regex_internal.c
+++ b/posix/regex_internal.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@ -214,12 +214,14 @@ build_wcs_buffer (pstr)
re_string_t *pstr;
{
#ifdef _LIBC
- unsigned char buf[pstr->mb_cur_max];
+ unsigned char buf[MB_CUR_MAX];
+ assert (MB_CUR_MAX >= pstr->mb_cur_max);
#else
unsigned char buf[64];
#endif
mbstate_t prev_st;
- int byte_idx, end_idx, mbclen, remain_len;
+ int byte_idx, end_idx, remain_len;
+ size_t mbclen;
/* Build the buffers from pstr->valid_len to either pstr->len or
pstr->bufs_len. */
@@ -280,11 +282,13 @@ build_wcs_upper_buffer (pstr)
re_string_t *pstr;
{
mbstate_t prev_st;
- int src_idx, byte_idx, end_idx, mbclen, remain_len;
+ int src_idx, byte_idx, end_idx, remain_len;
+ size_t mbclen;
#ifdef _LIBC
- unsigned char buf[pstr->mb_cur_max];
+ char buf[MB_CUR_MAX];
+ assert (MB_CUR_MAX >= pstr->mb_cur_max);
#else
- unsigned char buf[64];
+ char buf[64];
#endif
byte_idx = pstr->valid_len;
@@ -316,12 +320,12 @@ build_wcs_upper_buffer (pstr)
mbclen = mbrtowc (&wc,
((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
+ byte_idx), remain_len, &pstr->cur_state);
- if (BE (mbclen > 0, 1))
+ if (BE (mbclen + 2 > 2, 1))
{
wchar_t wcu = wc;
if (iswlower (wc))
{
- int mbcdlen;
+ size_t mbcdlen;
wcu = towupper (wc);
mbcdlen = wcrtomb (buf, wcu, &prev_st);
@@ -384,20 +388,20 @@ build_wcs_upper_buffer (pstr)
else
p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
mbclen = mbrtowc (&wc, p, remain_len, &pstr->cur_state);
- if (BE (mbclen > 0, 1))
+ if (BE (mbclen + 2 > 2, 1))
{
wchar_t wcu = wc;
if (iswlower (wc))
{
- int mbcdlen;
+ size_t mbcdlen;
wcu = towupper (wc);
mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st);
if (BE (mbclen == mbcdlen, 1))
memcpy (pstr->mbs + byte_idx, buf, mbclen);
- else
+ else if (mbcdlen != (size_t) -1)
{
- int i;
+ size_t i;
if (byte_idx + mbcdlen > pstr->bufs_len)
{
@@ -414,7 +418,7 @@ build_wcs_upper_buffer (pstr)
}
if (!pstr->offsets_needed)
{
- for (i = 0; i < byte_idx; ++i)
+ for (i = 0; i < (size_t) byte_idx; ++i)
pstr->offsets[i] = i;
pstr->offsets_needed = 1;
}
@@ -437,13 +441,15 @@ build_wcs_upper_buffer (pstr)
src_idx += mbclen;
continue;
}
+ else
+ memcpy (pstr->mbs + byte_idx, p, mbclen);
}
else
memcpy (pstr->mbs + byte_idx, p, mbclen);
if (BE (pstr->offsets_needed != 0, 0))
{
- int i;
+ size_t i;
for (i = 0; i < mbclen; ++i)
pstr->offsets[byte_idx + i] = src_idx + i;
}
@@ -494,7 +500,8 @@ re_string_skip_chars (pstr, new_raw_idx, last_wc)
wint_t *last_wc;
{
mbstate_t prev_st;
- int rawbuf_idx, mbclen;
+ int rawbuf_idx;
+ size_t mbclen;
wchar_t wc = 0;
/* Skip the characters which are not necessary to check. */
@@ -666,8 +673,9 @@ re_string_reconstruct (pstr, idx, eflags)
/* XXX Don't use mbrtowc, we know which conversion
to use (UTF-8 -> UCS4). */
memset (&cur_state, 0, sizeof (cur_state));
- mlen = mbrtowc (&wc2, p, mlen, &cur_state)
- - (raw + offset - p);
+ mlen = (mbrtowc (&wc2, (const char *) p, mlen,
+ &cur_state)
+ - (raw + offset - p));
if (mlen >= 0)
{
memset (&pstr->cur_state, '\0',
diff --git a/posix/regexec.c b/posix/regexec.c
index 636396e6f7..3c226e3c20 100644
--- a/posix/regexec.c
+++ b/posix/regexec.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@ -3781,8 +3781,8 @@ check_node_accept_bytes (dfa, node_idx, input, str_idx)
{
const re_charset_t *cset = node->opr.mbcset;
# ifdef _LIBC
- const unsigned char *pin = ((char *) re_string_get_buffer (input)
- + str_idx);
+ const unsigned char *pin
+ = ((const unsigned char *) re_string_get_buffer (input) + str_idx);
int j;
uint32_t nrules;
# endif /* _LIBC */