[v2] Use uintptr_t instead of performing pointer subtraction with a null pointer
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
From: Qihao Chencao <twose@qq.com>
Signed-off-by: Qihao Chencao <twose@qq.com>
---
crypt/md5-crypt.c | 12 ++++++------
crypt/sha256-crypt.c | 12 ++++++------
crypt/sha512-crypt.c | 12 ++++++------
elf/dl-minimal-malloc.c | 4 ++--
misc/regexp.c | 5 +++--
nscd/nscd_getgr_r.c | 2 +-
nscd/nscd_gethst_r.c | 5 ++---
nscd/nscd_getserv_r.c | 7 +++----
nss/nss_files/files-alias.c | 2 +-
nss/nss_files/files-parse.c | 2 +-
stdlib/msort.c | 6 +++---
sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +-
12 files changed, 35 insertions(+), 36 deletions(-)
Comments
On 28/06/22 05:57, twose--- via Libc-alpha wrote:
> From: Qihao Chencao <twose@qq.com>
>
> Signed-off-by: Qihao Chencao <twose@qq.com>
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> crypt/md5-crypt.c | 12 ++++++------
> crypt/sha256-crypt.c | 12 ++++++------
> crypt/sha512-crypt.c | 12 ++++++------
> elf/dl-minimal-malloc.c | 4 ++--
> misc/regexp.c | 5 +++--
> nscd/nscd_getgr_r.c | 2 +-
> nscd/nscd_gethst_r.c | 5 ++---
> nscd/nscd_getserv_r.c | 7 +++----
> nss/nss_files/files-alias.c | 2 +-
> nss/nss_files/files-parse.c | 2 +-
> stdlib/msort.c | 6 +++---
> sysdeps/unix/sysv/linux/dl-sysdep.c | 2 +-
> 12 files changed, 35 insertions(+), 36 deletions(-)
>
> diff --git a/crypt/md5-crypt.c b/crypt/md5-crypt.c
> index 7c4fb9fb97..4a7f337f5f 100644
> --- a/crypt/md5-crypt.c
> +++ b/crypt/md5-crypt.c
> @@ -110,7 +110,7 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
> salt_len = MIN (strcspn (salt, "$"), 8);
> key_len = strlen (key);
>
> - if ((key - (char *) 0) % __alignof__ (md5_uint32) != 0)
> + if (((uintptr_t) key) % __alignof__ (md5_uint32) != 0)
> {
> char *tmp;
>
> @@ -125,19 +125,19 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
>
> key = copied_key =
> memcpy (tmp + __alignof__ (md5_uint32)
> - - (tmp - (char *) 0) % __alignof__ (md5_uint32),
> + - ((uintptr_t) tmp) % __alignof__ (md5_uint32),
> key, key_len);
> - assert ((key - (char *) 0) % __alignof__ (md5_uint32) == 0);
> + assert (((uintptr_t) key) % __alignof__ (md5_uint32) == 0);
> }
>
> - if ((salt - (char *) 0) % __alignof__ (md5_uint32) != 0)
> + if (((uintptr_t) salt) % __alignof__ (md5_uint32) != 0)
> {
> char *tmp = (char *) alloca (salt_len + __alignof__ (md5_uint32));
> salt = copied_salt =
> memcpy (tmp + __alignof__ (md5_uint32)
> - - (tmp - (char *) 0) % __alignof__ (md5_uint32),
> + - ((uintptr_t) tmp) % __alignof__ (md5_uint32),
> salt, salt_len);
> - assert ((salt - (char *) 0) % __alignof__ (md5_uint32) == 0);
> + assert (((uintptr_t) salt) % __alignof__ (md5_uint32) == 0);
> }
>
> #ifdef USE_NSS
> diff --git a/crypt/sha256-crypt.c b/crypt/sha256-crypt.c
> index a98a968a8b..3f7dd11140 100644
> --- a/crypt/sha256-crypt.c
> +++ b/crypt/sha256-crypt.c
> @@ -142,7 +142,7 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
> salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
> key_len = strlen (key);
>
> - if ((key - (char *) 0) % __alignof__ (uint32_t) != 0)
> + if (((uintptr_t) key) % __alignof__ (uint32_t) != 0)
> {
> char *tmp;
>
> @@ -157,20 +157,20 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
>
> key = copied_key =
> memcpy (tmp + __alignof__ (uint32_t)
> - - (tmp - (char *) 0) % __alignof__ (uint32_t),
> + - ((uintptr_t) tmp) % __alignof__ (uint32_t),
> key, key_len);
> - assert ((key - (char *) 0) % __alignof__ (uint32_t) == 0);
> + assert (((uintptr_t) key) % __alignof__ (uint32_t) == 0);
> }
>
> - if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0)
> + if (((uintptr_t) salt) % __alignof__ (uint32_t) != 0)
> {
> char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t));
> alloca_used += salt_len + __alignof__ (uint32_t);
> salt = copied_salt =
> memcpy (tmp + __alignof__ (uint32_t)
> - - (tmp - (char *) 0) % __alignof__ (uint32_t),
> + - ((uintptr_t) tmp) % __alignof__ (uint32_t),
> salt, salt_len);
> - assert ((salt - (char *) 0) % __alignof__ (uint32_t) == 0);
> + assert (((uintptr_t) salt) % __alignof__ (uint32_t) == 0);
> }
>
> #ifdef USE_NSS
> diff --git a/crypt/sha512-crypt.c b/crypt/sha512-crypt.c
> index ea13527c09..28e40c3e13 100644
> --- a/crypt/sha512-crypt.c
> +++ b/crypt/sha512-crypt.c
> @@ -142,7 +142,7 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
> salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
> key_len = strlen (key);
>
> - if ((key - (char *) 0) % __alignof__ (uint64_t) != 0)
> + if (((uintptr_t) key) % __alignof__ (uint64_t) != 0)
> {
> char *tmp;
>
> @@ -157,19 +157,19 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
>
> key = copied_key =
> memcpy (tmp + __alignof__ (uint64_t)
> - - (tmp - (char *) 0) % __alignof__ (uint64_t),
> + - ((uintptr_t) tmp) % __alignof__ (uint64_t),
> key, key_len);
> - assert ((key - (char *) 0) % __alignof__ (uint64_t) == 0);
> + assert (((uintptr_t) key) % __alignof__ (uint64_t) == 0);
> }
>
> - if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0)
> + if (((uintptr_t) salt) % __alignof__ (uint64_t) != 0)
> {
> char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t));
> salt = copied_salt =
> memcpy (tmp + __alignof__ (uint64_t)
> - - (tmp - (char *) 0) % __alignof__ (uint64_t),
> + - ((uintptr_t) tmp) % __alignof__ (uint64_t),
> salt, salt_len);
> - assert ((salt - (char *) 0) % __alignof__ (uint64_t) == 0);
> + assert (((uintptr_t) salt) % __alignof__ (uint64_t) == 0);
> }
>
> #ifdef USE_NSS
> diff --git a/elf/dl-minimal-malloc.c b/elf/dl-minimal-malloc.c
> index 7cca54208d..44b54124ad 100644
> --- a/elf/dl-minimal-malloc.c
> +++ b/elf/dl-minimal-malloc.c
> @@ -38,13 +38,13 @@ __minimal_malloc (size_t n)
> /* Consume any unused space in the last page of our data segment. */
> extern int _end attribute_hidden;
> alloc_ptr = &_end;
> - alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0)
> + alloc_end = (void *) 0 + ((((uintptr_t) alloc_ptr)
> + GLRO(dl_pagesize) - 1)
> & ~(GLRO(dl_pagesize) - 1));
> }
>
> /* Make sure the allocation pointer is ideally aligned. */
> - alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + MALLOC_ALIGNMENT - 1)
> + alloc_ptr = (void *) 0 + ((((uintptr_t) alloc_ptr) + MALLOC_ALIGNMENT - 1)
> & ~(MALLOC_ALIGNMENT - 1));
>
> if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr)
> diff --git a/misc/regexp.c b/misc/regexp.c
> index b1ea9e7eeb..81140d5073 100644
> --- a/misc/regexp.c
> +++ b/misc/regexp.c
> @@ -23,6 +23,7 @@
> argument to 'step' and 'advance' was defined only in regexp.h,
> as its definition depended on macros defined by the user. */
>
> +#include <stdint.h>
> #include <regex.h>
> #include <shlib-compat.h>
>
> @@ -50,7 +51,7 @@ step (const char *string, const char *expbuf)
> regmatch_t match; /* We only need info about the full match. */
>
> expbuf += __alignof (regex_t *);
> - expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
> + expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
>
> if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
> == REG_NOMATCH)
> @@ -73,7 +74,7 @@ advance (const char *string, const char *expbuf)
> regmatch_t match; /* We only need info about the full match. */
>
> expbuf += __alignof__ (regex_t *);
> - expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
> + expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
>
> if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
> == REG_NOMATCH
> diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
> index 3636c031ec..caea464d15 100644
> --- a/nscd/nscd_getgr_r.c
> +++ b/nscd/nscd_getgr_r.c
> @@ -159,7 +159,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
>
> /* Now allocate the buffer the array for the group members. We must
> align the pointer. */
> - align = ((__alignof__ (char *) - (p - ((char *) 0)))
> + align = ((__alignof__ (char *) - ((uintptr_t) p))
> & (__alignof__ (char *) - 1));
> total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *)
> + gr_resp.gr_name_len + gr_resp.gr_passwd_len);
> diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c
> index 9becb62033..f3e22f8cef 100644
> --- a/nscd/nscd_gethst_r.c
> +++ b/nscd/nscd_gethst_r.c
> @@ -246,10 +246,9 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
> /* A first check whether the buffer is sufficiently large is possible. */
> /* Now allocate the buffer the array for the group members. We must
> align the pointer and the base of the h_addr_list pointers. */
> - align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
> + align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
> & (__alignof__ (char *) - 1));
> - align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp.h_name_len)
> - - ((char *) 0)))
> + align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + hst_resp.h_name_len)))
> & (__alignof__ (char *) - 1));
> if (buflen < (align1 + hst_resp.h_name_len + align2
> + ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt
> diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
> index 42b875d024..9603c66330 100644
> --- a/nscd/nscd_getserv_r.c
> +++ b/nscd/nscd_getserv_r.c
> @@ -207,11 +207,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
> /* A first check whether the buffer is sufficiently large is possible. */
> /* Now allocate the buffer the array for the group members. We must
> align the pointer and the base of the h_addr_list pointers. */
> - align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
> + align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
> & (__alignof__ (char *) - 1));
> - align2 = ((__alignof__ (char *) - ((cp + align1 + serv_resp.s_name_len
> - + serv_resp.s_proto_len)
> - - ((char *) 0)))
> + align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + serv_resp.s_name_len
> + + serv_resp.s_proto_len)))
> & (__alignof__ (char *) - 1));
> if (buflen < (align1 + serv_resp.s_name_len + serv_resp.s_proto_len
> + align2
> diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c
> index 505721388f..2fd08f1d34 100644
> --- a/nss/nss_files/files-alias.c
> +++ b/nss/nss_files/files-alias.c
> @@ -281,7 +281,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
> /* Adjust the pointer so it is aligned for
> storing pointers. */
> first_unused += __alignof__ (char *) - 1;
> - first_unused -= ((first_unused - (char *) 0)
> + first_unused -= (((uintptr_t) first_unused)
> % __alignof__ (char *));
> result->alias_members = (char **) first_unused;
>
> diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c
> index c90e293802..a3c4970491 100644
> --- a/nss/nss_files/files-parse.c
> +++ b/nss/nss_files/files-parse.c
> @@ -239,7 +239,7 @@ parse_list (char **linep, char *eol, char *buf_end, int terminator_c,
>
> /* Adjust the pointer so it is aligned for storing pointers. */
> eol += __alignof__ (char *) - 1;
> - eol -= (eol - (char *) 0) % __alignof__ (char *);
> + eol -= ((uintptr_t) eol) % __alignof__ (char *);
> /* We will start the storage here for the vector of pointers. */
> list = (char **) eol;
>
> diff --git a/stdlib/msort.c b/stdlib/msort.c
> index cbe9a4a8fd..50e1afbe59 100644
> --- a/stdlib/msort.c
> +++ b/stdlib/msort.c
> @@ -281,15 +281,15 @@ __qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
> else
> {
> if ((s & (sizeof (uint32_t) - 1)) == 0
> - && ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
> + && ((uintptr_t) b) % __alignof__ (uint32_t) == 0)
> {
> if (s == sizeof (uint32_t))
> p.var = 0;
> else if (s == sizeof (uint64_t)
> - && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
> + && ((uintptr_t) b) % __alignof__ (uint64_t) == 0)
> p.var = 1;
> else if ((s & (sizeof (unsigned long) - 1)) == 0
> - && ((char *) b - (char *) 0)
> + && ((uintptr_t) b)
> % __alignof__ (unsigned long) == 0)
> p.var = 2;
> }
> diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.c b/sysdeps/unix/sysv/linux/dl-sysdep.c
> index 9e15c5bf69..dcb0601207 100644
> --- a/sysdeps/unix/sysv/linux/dl-sysdep.c
> +++ b/sysdeps/unix/sysv/linux/dl-sysdep.c
> @@ -129,7 +129,7 @@ _dl_sysdep_start (void **start_argptr,
> break up that far. When the user program examines its break, it
> will see this new value and not clobber our data. */
> __sbrk (GLRO(dl_pagesize)
> - - ((_end - (char *) 0) & (GLRO(dl_pagesize) - 1)));
> + - (((uintptr_t) _end) & (GLRO(dl_pagesize) - 1)));
>
> /* If this is a SUID program we make sure that FDs 0, 1, and 2 are
> allocated. If necessary we are doing it ourself. If it is not
@@ -110,7 +110,7 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
salt_len = MIN (strcspn (salt, "$"), 8);
key_len = strlen (key);
- if ((key - (char *) 0) % __alignof__ (md5_uint32) != 0)
+ if (((uintptr_t) key) % __alignof__ (md5_uint32) != 0)
{
char *tmp;
@@ -125,19 +125,19 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
key = copied_key =
memcpy (tmp + __alignof__ (md5_uint32)
- - (tmp - (char *) 0) % __alignof__ (md5_uint32),
+ - ((uintptr_t) tmp) % __alignof__ (md5_uint32),
key, key_len);
- assert ((key - (char *) 0) % __alignof__ (md5_uint32) == 0);
+ assert (((uintptr_t) key) % __alignof__ (md5_uint32) == 0);
}
- if ((salt - (char *) 0) % __alignof__ (md5_uint32) != 0)
+ if (((uintptr_t) salt) % __alignof__ (md5_uint32) != 0)
{
char *tmp = (char *) alloca (salt_len + __alignof__ (md5_uint32));
salt = copied_salt =
memcpy (tmp + __alignof__ (md5_uint32)
- - (tmp - (char *) 0) % __alignof__ (md5_uint32),
+ - ((uintptr_t) tmp) % __alignof__ (md5_uint32),
salt, salt_len);
- assert ((salt - (char *) 0) % __alignof__ (md5_uint32) == 0);
+ assert (((uintptr_t) salt) % __alignof__ (md5_uint32) == 0);
}
#ifdef USE_NSS
@@ -142,7 +142,7 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
key_len = strlen (key);
- if ((key - (char *) 0) % __alignof__ (uint32_t) != 0)
+ if (((uintptr_t) key) % __alignof__ (uint32_t) != 0)
{
char *tmp;
@@ -157,20 +157,20 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
key = copied_key =
memcpy (tmp + __alignof__ (uint32_t)
- - (tmp - (char *) 0) % __alignof__ (uint32_t),
+ - ((uintptr_t) tmp) % __alignof__ (uint32_t),
key, key_len);
- assert ((key - (char *) 0) % __alignof__ (uint32_t) == 0);
+ assert (((uintptr_t) key) % __alignof__ (uint32_t) == 0);
}
- if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0)
+ if (((uintptr_t) salt) % __alignof__ (uint32_t) != 0)
{
char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t));
alloca_used += salt_len + __alignof__ (uint32_t);
salt = copied_salt =
memcpy (tmp + __alignof__ (uint32_t)
- - (tmp - (char *) 0) % __alignof__ (uint32_t),
+ - ((uintptr_t) tmp) % __alignof__ (uint32_t),
salt, salt_len);
- assert ((salt - (char *) 0) % __alignof__ (uint32_t) == 0);
+ assert (((uintptr_t) salt) % __alignof__ (uint32_t) == 0);
}
#ifdef USE_NSS
@@ -142,7 +142,7 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
key_len = strlen (key);
- if ((key - (char *) 0) % __alignof__ (uint64_t) != 0)
+ if (((uintptr_t) key) % __alignof__ (uint64_t) != 0)
{
char *tmp;
@@ -157,19 +157,19 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
key = copied_key =
memcpy (tmp + __alignof__ (uint64_t)
- - (tmp - (char *) 0) % __alignof__ (uint64_t),
+ - ((uintptr_t) tmp) % __alignof__ (uint64_t),
key, key_len);
- assert ((key - (char *) 0) % __alignof__ (uint64_t) == 0);
+ assert (((uintptr_t) key) % __alignof__ (uint64_t) == 0);
}
- if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0)
+ if (((uintptr_t) salt) % __alignof__ (uint64_t) != 0)
{
char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t));
salt = copied_salt =
memcpy (tmp + __alignof__ (uint64_t)
- - (tmp - (char *) 0) % __alignof__ (uint64_t),
+ - ((uintptr_t) tmp) % __alignof__ (uint64_t),
salt, salt_len);
- assert ((salt - (char *) 0) % __alignof__ (uint64_t) == 0);
+ assert (((uintptr_t) salt) % __alignof__ (uint64_t) == 0);
}
#ifdef USE_NSS
@@ -38,13 +38,13 @@ __minimal_malloc (size_t n)
/* Consume any unused space in the last page of our data segment. */
extern int _end attribute_hidden;
alloc_ptr = &_end;
- alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0)
+ alloc_end = (void *) 0 + ((((uintptr_t) alloc_ptr)
+ GLRO(dl_pagesize) - 1)
& ~(GLRO(dl_pagesize) - 1));
}
/* Make sure the allocation pointer is ideally aligned. */
- alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + MALLOC_ALIGNMENT - 1)
+ alloc_ptr = (void *) 0 + ((((uintptr_t) alloc_ptr) + MALLOC_ALIGNMENT - 1)
& ~(MALLOC_ALIGNMENT - 1));
if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr)
@@ -23,6 +23,7 @@
argument to 'step' and 'advance' was defined only in regexp.h,
as its definition depended on macros defined by the user. */
+#include <stdint.h>
#include <regex.h>
#include <shlib-compat.h>
@@ -50,7 +51,7 @@ step (const char *string, const char *expbuf)
regmatch_t match; /* We only need info about the full match. */
expbuf += __alignof (regex_t *);
- expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
+ expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
== REG_NOMATCH)
@@ -73,7 +74,7 @@ advance (const char *string, const char *expbuf)
regmatch_t match; /* We only need info about the full match. */
expbuf += __alignof__ (regex_t *);
- expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);
+ expbuf -= ((uintptr_t) expbuf) % __alignof__ (regex_t *);
if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
== REG_NOMATCH
@@ -159,7 +159,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
/* Now allocate the buffer the array for the group members. We must
align the pointer. */
- align = ((__alignof__ (char *) - (p - ((char *) 0)))
+ align = ((__alignof__ (char *) - ((uintptr_t) p))
& (__alignof__ (char *) - 1));
total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *)
+ gr_resp.gr_name_len + gr_resp.gr_passwd_len);
@@ -246,10 +246,9 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
/* A first check whether the buffer is sufficiently large is possible. */
/* Now allocate the buffer the array for the group members. We must
align the pointer and the base of the h_addr_list pointers. */
- align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
+ align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
& (__alignof__ (char *) - 1));
- align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp.h_name_len)
- - ((char *) 0)))
+ align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + hst_resp.h_name_len)))
& (__alignof__ (char *) - 1));
if (buflen < (align1 + hst_resp.h_name_len + align2
+ ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt
@@ -207,11 +207,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
/* A first check whether the buffer is sufficiently large is possible. */
/* Now allocate the buffer the array for the group members. We must
align the pointer and the base of the h_addr_list pointers. */
- align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
+ align1 = ((__alignof__ (char *) - ((uintptr_t) cp))
& (__alignof__ (char *) - 1));
- align2 = ((__alignof__ (char *) - ((cp + align1 + serv_resp.s_name_len
- + serv_resp.s_proto_len)
- - ((char *) 0)))
+ align2 = ((__alignof__ (char *) - ((uintptr_t) (cp + align1 + serv_resp.s_name_len
+ + serv_resp.s_proto_len)))
& (__alignof__ (char *) - 1));
if (buflen < (align1 + serv_resp.s_name_len + serv_resp.s_proto_len
+ align2
@@ -281,7 +281,7 @@ get_next_alias (FILE *stream, const char *match, struct aliasent *result,
/* Adjust the pointer so it is aligned for
storing pointers. */
first_unused += __alignof__ (char *) - 1;
- first_unused -= ((first_unused - (char *) 0)
+ first_unused -= (((uintptr_t) first_unused)
% __alignof__ (char *));
result->alias_members = (char **) first_unused;
@@ -239,7 +239,7 @@ parse_list (char **linep, char *eol, char *buf_end, int terminator_c,
/* Adjust the pointer so it is aligned for storing pointers. */
eol += __alignof__ (char *) - 1;
- eol -= (eol - (char *) 0) % __alignof__ (char *);
+ eol -= ((uintptr_t) eol) % __alignof__ (char *);
/* We will start the storage here for the vector of pointers. */
list = (char **) eol;
@@ -281,15 +281,15 @@ __qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
else
{
if ((s & (sizeof (uint32_t) - 1)) == 0
- && ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
+ && ((uintptr_t) b) % __alignof__ (uint32_t) == 0)
{
if (s == sizeof (uint32_t))
p.var = 0;
else if (s == sizeof (uint64_t)
- && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
+ && ((uintptr_t) b) % __alignof__ (uint64_t) == 0)
p.var = 1;
else if ((s & (sizeof (unsigned long) - 1)) == 0
- && ((char *) b - (char *) 0)
+ && ((uintptr_t) b)
% __alignof__ (unsigned long) == 0)
p.var = 2;
}
@@ -129,7 +129,7 @@ _dl_sysdep_start (void **start_argptr,
break up that far. When the user program examines its break, it
will see this new value and not clobber our data. */
__sbrk (GLRO(dl_pagesize)
- - ((_end - (char *) 0) & (GLRO(dl_pagesize) - 1)));
+ - (((uintptr_t) _end) & (GLRO(dl_pagesize) - 1)));
/* If this is a SUID program we make sure that FDs 0, 1, and 2 are
allocated. If necessary we are doing it ourself. If it is not