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. --- locale/programs/charmap-dir.c | 8 ++++---- locale/programs/locfile.c | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'locale') 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. */ -- cgit 1.4.1