* sysdeps/unix/opendir.c (__alloc_dir): Don't initialize ->data.

Avoid memset, add explicit initialization.
	* sysdeps/unix/dirstream.h (struct __dirstream): Move data elemtn
	to the end and change into zero-sized array.
	Move lock member to fill a hole on 64-bit platforms.
This commit is contained in:
Ulrich Drepper 2007-08-03 03:35:12 +00:00
parent 9b2e9577b2
commit fa39685d5c
3 changed files with 14 additions and 11 deletions

View File

@ -1,7 +1,10 @@
2007-08-02 Ulrich Drepper <drepper@redhat.com> 2007-08-02 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/dirstream.h (struct __dirstream): Move lock member * sysdeps/unix/opendir.c (__alloc_dir): Don't initialize ->data.
to fill a hole on 64-bit platforms. Avoid memset, add explicit initialization.
* sysdeps/unix/dirstream.h (struct __dirstream): Move data elemtn
to the end and change into zero-sized array.
Move lock member to fill a hole on 64-bit platforms.
* stdlib/stdlib.h: Remove __strto*_internal prototypes and strto* * stdlib/stdlib.h: Remove __strto*_internal prototypes and strto*
inline functions. inline functions.

View File

@ -17,7 +17,6 @@
02111-1307 USA. */ 02111-1307 USA. */
#ifndef _DIRSTREAM_H #ifndef _DIRSTREAM_H
#define _DIRSTREAM_H 1 #define _DIRSTREAM_H 1
#include <sys/types.h> #include <sys/types.h>
@ -35,12 +34,14 @@ struct __dirstream
__libc_lock_define (, lock) /* Mutex lock for this structure. */ __libc_lock_define (, lock) /* Mutex lock for this structure. */
char *data; /* Directory block. */
size_t allocation; /* Space allocated for the block. */ size_t allocation; /* Space allocated for the block. */
size_t size; /* Total valid data in the block. */ size_t size; /* Total valid data in the block. */
size_t offset; /* Current offset into the block. */ size_t offset; /* Current offset into the block. */
off_t filepos; /* Position of next entry to read. */ off_t filepos; /* Position of next entry to read. */
/* Directory block. */
char data[0] __attribute__ ((aligned (__alignof__ (void*))));
}; };
#define _DIR_dirfd(dirp) ((dirp)->fd) #define _DIR_dirfd(dirp) ((dirp)->fd)

View File

@ -155,9 +155,7 @@ __alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
allocation = (BUFSIZ < sizeof (struct dirent64) allocation = (BUFSIZ < sizeof (struct dirent64)
? sizeof (struct dirent64) : BUFSIZ); ? sizeof (struct dirent64) : BUFSIZ);
const int pad = -sizeof (DIR) % __alignof__ (struct dirent64); DIR *dirp = (DIR *) malloc (sizeof (DIR) + allocation);
DIR *dirp = (DIR *) malloc (sizeof (DIR) + allocation + pad);
if (dirp == NULL) if (dirp == NULL)
lose: lose:
{ {
@ -169,14 +167,15 @@ __alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
} }
return NULL; return NULL;
} }
memset (dirp, '\0', sizeof (DIR));
dirp->data = (char *) (dirp + 1) + pad;
dirp->allocation = allocation;
dirp->fd = fd;
dirp->allocation = allocation;
#ifndef NOT_IN_libc #ifndef NOT_IN_libc
__libc_lock_init (dirp->lock); __libc_lock_init (dirp->lock);
#endif #endif
dirp->fd = fd;
dirp->size = 0;
dirp->offset = 0;
dirp->filepos = 0;
return dirp; return dirp;
} }