diff options
-rw-r--r-- | trunk/ChangeLog.cross | 5 | ||||
-rw-r--r-- | trunk/src/gather.c | 2 | ||||
-rw-r--r-- | trunk/src/wrap-file.c | 38 |
3 files changed, 23 insertions, 22 deletions
diff --git a/trunk/ChangeLog.cross b/trunk/ChangeLog.cross index 183f962..d57b3d3 100644 --- a/trunk/ChangeLog.cross +++ b/trunk/ChangeLog.cross @@ -2,6 +2,11 @@ * Integrate prelinker/cross-prelinking patches + 006-11-30 Mark Shinwell <shinwell@codesourcery.com> + + * wrap-file.c (wrap_stat_body): New. + (wrap_lstat64, wrap_stat64): Use wrap_stat_body. + 2006-11-28 Mark Shinwell <shinwell@codesourcery.com> * src/layout.c (layout_libs): Add assertion to check for buffer diff --git a/trunk/src/gather.c b/trunk/src/gather.c index 8163fe2..d31f472 100644 --- a/trunk/src/gather.c +++ b/trunk/src/gather.c @@ -1273,7 +1273,7 @@ add_to_blacklist (const char *name, int deref, int onefs) size_t len; struct stat64 st; - if (stat64 (name, &st) < 0) + if (wrap_stat64 (name, &st) < 0) { if (implicit) return 0; diff --git a/trunk/src/wrap-file.c b/trunk/src/wrap-file.c index 0f7120c..6b0c3f1 100644 --- a/trunk/src/wrap-file.c +++ b/trunk/src/wrap-file.c @@ -312,31 +312,15 @@ wrap_prelink_canonicalize (const char *name, struct stat64 *stp) return prelink_canonicalize(name, stp); } -int -wrap_lstat64 (const char *file, struct stat64 *buf) -{ - char *tmpname = sysroot_file_name (file, 1, NULL); - int ret; - - if (tmpname == NULL) - return -1; - - ret = lstat64 (tmpname, buf); - - if (tmpname != file) - free (tmpname); - return ret; -} - -int -wrap_stat64 (const char *file, struct stat64 *buf) +static int +wrap_stat_body (const char *file, struct stat64 *buf, int lstat) { char* file_copy; char *tmpname; int ret; int len; - tmpname = sysroot_file_name (file, 0, NULL); + tmpname = sysroot_file_name (file, lstat, NULL); if (tmpname == NULL) return -1; @@ -350,10 +334,10 @@ wrap_stat64 (const char *file, struct stat64 *buf) return -1; len = strlen (file_copy); - if (file_copy[len - 1] == '/') + if (len && file_copy[len - 1] == '/' || file_copy[len - 1] == '\\')) file_copy[len - 1] = '\0'; - ret = stat64 (file_copy, buf); + ret = lstat ? lstat64 (file_copy, buf) : stat64 (file_copy, buf); free (file_copy); @@ -361,6 +345,18 @@ wrap_stat64 (const char *file, struct stat64 *buf) } int +wrap_lstat64 (const char *file, struct stat64 *buf) +{ + return wrap_stat_body (file, buf, 1); +} + +int +wrap_stat64 (const char *file, struct stat64 *buf) +{ + return wrap_stat_body (file, buf, 0); +} + +int wrap_rename (const char *old, const char *new) { char *tmpold = sysroot_file_name (old, 1, NULL); |