From 4c0fe6fe42ecf97c9f7f5a0921638560c89973a2 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 10 May 2013 11:41:53 +0200 Subject: Use *stat64 instead of *stat in installed programs This ensures reliable operation on file systems with inode numbers which do not fit into 32 bits. --- ChangeLog | 12 ++++++++++++ elf/sprof.c | 4 ++-- iconv/iconv_charmap.c | 4 ++-- iconv/iconv_prog.c | 4 ++-- locale/programs/charmap-dir.c | 8 ++++---- locale/programs/locfile.c | 20 ++++++++++---------- sunrpc/rpc_main.c | 10 +++++----- 7 files changed, 37 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index 17e2e983d0..1d83c689e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2013-05-10 Florian Weimer + + * elf/sprof.c (load_profdata): Use fstat64 instead of fstat. + * iconv/iconv_charmap.c (charmap_conversion): Likewise. + * iconv/iconv_prog.c (main): Likewise. + * locale/programs/charmap-dir.c (charmap_readdir) + (fopen_uncompressed): Likewise. + * locale/programs/locfile.c (siblings_uncached) + (write_locale_data): Use lstat64 instead of lstat. + * sunrpc/rpc_main.c (find_cpp, checkfiles): Use stat64 instead of + stat. + 2013-05-10 Andreas Jaeger [BZ #15395] diff --git a/elf/sprof.c b/elf/sprof.c index 54dfebdd5a..5c70ec0473 100644 --- a/elf/sprof.c +++ b/elf/sprof.c @@ -744,7 +744,7 @@ load_profdata (const char *name, struct shobj *shobj) { struct profdata *result; int fd; - struct stat st; + struct stat64 st; void *addr; uint32_t *narcsp; size_t fromlimit; @@ -783,7 +783,7 @@ load_profdata (const char *name, struct shobj *shobj) /* We have found the file, now make sure it is the right one for the data file. */ - if (fstat (fd, &st) < 0) + if (fstat64 (fd, &st) < 0) { error (0, errno, _("while stat'ing profiling data file")); close (fd); diff --git a/iconv/iconv_charmap.c b/iconv/iconv_charmap.c index b1a0610976..745adcc510 100644 --- a/iconv/iconv_charmap.c +++ b/iconv/iconv_charmap.c @@ -171,11 +171,11 @@ charmap_conversion (const char *from_code, struct charmap_t *from_charmap, } #ifdef _POSIX_MAPPED_FILES - struct stat st; + struct stat64 st; char *addr; /* We have possibilities for reading the input file. First try to mmap() it since this will provide the fastest solution. */ - if (fstat (fd, &st) == 0 + if (fstat64 (fd, &st) == 0 && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) != MAP_FAILED)) { diff --git a/iconv/iconv_prog.c b/iconv/iconv_prog.c index a42cc5b375..1a1d0d0cf4 100644 --- a/iconv/iconv_prog.c +++ b/iconv/iconv_prog.c @@ -275,7 +275,7 @@ conversions from `%s' and to `%s' are not supported"), do { #ifdef _POSIX_MAPPED_FILES - struct stat st; + struct stat64 st; char *addr; #endif int fd, ret; @@ -300,7 +300,7 @@ conversions from `%s' and to `%s' are not supported"), #ifdef _POSIX_MAPPED_FILES /* We have possibilities for reading the input file. First try to mmap() it since this will provide the fastest solution. */ - if (fstat (fd, &st) == 0 + if (fstat64 (fd, &st) == 0 && ((addr = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) != MAP_FAILED)) { diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c index 03d0cb1109..3edf72080a 100644 --- a/locale/programs/charmap-dir.c +++ b/locale/programs/charmap-dir.c @@ -121,9 +121,9 @@ charmap_readdir (CHARMAP_DIR *cdir) else #endif { - struct stat statbuf; + struct stat64 statbuf; - if (stat (cdir->pathname, &statbuf) < 0) + if (stat64 (cdir->pathname, &statbuf) < 0) continue; mode = statbuf.st_mode; @@ -167,10 +167,10 @@ fopen_uncompressed (const char *pathname, const char *compressor) pfd = open (pathname, O_RDONLY); if (pfd >= 0) { - struct stat statbuf; + struct stat64 statbuf; int fd[2]; - if (fstat (pfd, &statbuf) >= 0 + if (fstat64 (pfd, &statbuf) >= 0 && S_ISREG (statbuf.st_mode) && pipe (fd) >= 0) { diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c index 10c3dc99b9..3cbd6f1314 100644 --- a/locale/programs/locfile.c +++ b/locale/programs/locfile.c @@ -355,7 +355,7 @@ siblings_uncached (const char *output_path) { size_t len; char *base, *p; - struct stat output_stat; + struct stat64 output_stat; DIR *dirp; int nelems; const char **elems; @@ -378,7 +378,7 @@ siblings_uncached (const char *output_path) len = p - base; /* Get the properties of output_path. */ - if (lstat (output_path, &output_stat) < 0 || !S_ISDIR (output_stat.st_mode)) + if (lstat64 (output_path, &output_stat) < 0 || !S_ISDIR (output_stat.st_mode)) return NULL; /* Iterate through the directories in base directory. */ @@ -392,7 +392,7 @@ siblings_uncached (const char *output_path) struct dirent64 *other_dentry; const char *other_name; char *other_path; - struct stat other_stat; + struct stat64 other_stat; other_dentry = readdir64 (dirp); if (other_dentry == NULL) @@ -407,7 +407,7 @@ siblings_uncached (const char *output_path) other_path[len] = '/'; strcpy (other_path + len + 1, other_name); - if (lstat (other_path, &other_stat) >= 0 + if (lstat64 (other_path, &other_stat) >= 0 && S_ISDIR (other_stat.st_mode) && other_stat.st_uid == output_stat.st_uid && other_stat.st_gid == output_stat.st_gid @@ -580,9 +580,9 @@ write_locale_data (const char *output_path, int catidx, const char *category, fd = -2; if (strcmp (category, "LC_MESSAGES") == 0) { - struct stat st; + struct stat64 st; - if (stat (fname, &st) < 0) + if (stat64 (fname, &st) < 0) { if (mkdir (fname, 0777) >= 0) { @@ -659,9 +659,9 @@ failure while writing data for category `%s'"), category)); other_paths = siblings (output_path); if (other_paths != NULL) { - struct stat fname_stat; + struct stat64 fname_stat; - if (lstat (fname, &fname_stat) >= 0 + if (lstat64 (fname, &fname_stat) >= 0 && S_ISREG (fname_stat.st_mode)) { const char *fname_tail = fname + strlen (output_path); @@ -680,14 +680,14 @@ failure while writing data for category `%s'"), category)); const char *other_path = *other_p; size_t other_path_len = strlen (other_path); char *other_fname; - struct stat other_fname_stat; + struct stat64 other_fname_stat; other_fname = (char *) xmalloc (other_path_len + strlen (fname_tail) + 1); memcpy (other_fname, other_path, other_path_len); strcpy (other_fname + other_path_len, fname_tail); - if (lstat (other_fname, &other_fname_stat) >= 0 + if (lstat64 (other_fname, &other_fname_stat) >= 0 && S_ISREG (other_fname_stat.st_mode) /* Consider only files on the same device. Otherwise hard linking won't work anyway. */ diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c index d03ec991ea..0223c9a9fc 100644 --- a/sunrpc/rpc_main.c +++ b/sunrpc/rpc_main.c @@ -326,9 +326,9 @@ clear_args (void) static void find_cpp (void) { - struct stat buf; + struct stat64 buf; - if (stat (CPP, &buf) == 0) + if (stat64 (CPP, &buf) == 0) return; if (cppDefined) /* user specified cpp but it does not exist */ @@ -1114,17 +1114,17 @@ putarg (int whereto, const char *cp) static void checkfiles (const char *infile, const char *outfile) { - struct stat buf; + struct stat64 buf; if (infile) /* infile ! = NULL */ - if (stat (infile, &buf) < 0) + if (stat64 (infile, &buf) < 0) { perror (infile); crash (); } if (outfile) { - if (stat (outfile, &buf) < 0) + if (stat64 (outfile, &buf) < 0) return; /* file does not exist */ else { -- cgit v1.2.3