|
Zdenek Prikryl |
595843 |
--- attr-2.4.38/getfattr/getfattr.c.recursive 2007-01-23 06:56:40.000000000 +0100
|
|
Zdenek Prikryl |
595843 |
+++ attr-2.4.38/getfattr/getfattr.c 2007-09-11 04:00:49.000000000 +0200
|
|
Zdenek Prikryl |
595843 |
@@ -410,6 +410,38 @@ void help(void)
|
|
Zdenek Prikryl |
595843 |
" --help this help text\n"));
|
|
Zdenek Prikryl |
595843 |
}
|
|
Zdenek Prikryl |
595843 |
|
|
Zdenek Prikryl |
595843 |
+char *resolve_symlinks(const char *file)
|
|
Zdenek Prikryl |
595843 |
+{
|
|
Zdenek Prikryl |
595843 |
+ static char buffer[4096];
|
|
Zdenek Prikryl |
595843 |
+ struct stat stat;
|
|
Zdenek Prikryl |
595843 |
+ char *path = NULL;
|
|
Zdenek Prikryl |
595843 |
+
|
|
Zdenek Prikryl |
595843 |
+ if (lstat(file, &stat) == -1)
|
|
Zdenek Prikryl |
595843 |
+ return path;
|
|
Zdenek Prikryl |
595843 |
+
|
|
Zdenek Prikryl |
595843 |
+ if (S_ISLNK(stat.st_mode) && !opt_walk_physical)
|
|
Zdenek Prikryl |
595843 |
+ path = realpath(file, buffer);
|
|
Zdenek Prikryl |
595843 |
+ else
|
|
Zdenek Prikryl |
595843 |
+ path = (char *)file; /* not a symlink, use given path */
|
|
Zdenek Prikryl |
595843 |
+
|
|
Zdenek Prikryl |
595843 |
+ return path;
|
|
Zdenek Prikryl |
595843 |
+}
|
|
Zdenek Prikryl |
595843 |
+
|
|
Zdenek Prikryl |
595843 |
+int walk_tree(const char *file)
|
|
Zdenek Prikryl |
595843 |
+{
|
|
Zdenek Prikryl |
595843 |
+ const char *p;
|
|
Zdenek Prikryl |
595843 |
+
|
|
Zdenek Prikryl |
595843 |
+ if ((p = resolve_symlinks(file)) == NULL) {
|
|
Zdenek Prikryl |
595843 |
+ fprintf(stderr, "%s: %s: %s\n", progname,
|
|
Zdenek Prikryl |
595843 |
+ xquote(file), strerror(errno));
|
|
Zdenek Prikryl |
595843 |
+ return 1;
|
|
Zdenek Prikryl |
595843 |
+ } else if (nftw(p, do_print, 0, opt_walk_logical? 0 : FTW_PHYS) < 0) {
|
|
Zdenek Prikryl |
595843 |
+ fprintf(stderr, "%s: %s: %s\n", progname, xquote(file),
|
|
Zdenek Prikryl |
595843 |
+ strerror(errno));
|
|
Zdenek Prikryl |
595843 |
+ return 1;
|
|
Zdenek Prikryl |
595843 |
+ }
|
|
Zdenek Prikryl |
595843 |
+ return 0;
|
|
Zdenek Prikryl |
595843 |
+}
|
|
Zdenek Prikryl |
595843 |
|
|
Zdenek Prikryl |
595843 |
int main(int argc, char *argv[])
|
|
Zdenek Prikryl |
595843 |
{
|
|
Zdenek Prikryl |
595843 |
@@ -499,12 +531,7 @@ int main(int argc, char *argv[])
|
|
Zdenek Prikryl |
595843 |
}
|
|
Zdenek Prikryl |
595843 |
|
|
Zdenek Prikryl |
595843 |
while (optind < argc) {
|
|
Zdenek Prikryl |
595843 |
- if (nftw(argv[optind], do_print, 0,
|
|
Zdenek Prikryl |
595843 |
- opt_walk_physical * FTW_PHYS) < 0) {
|
|
Zdenek Prikryl |
595843 |
- fprintf(stderr, "%s: %s: %s\n", progname, argv[optind],
|
|
Zdenek Prikryl |
595843 |
- strerror_ea(errno));
|
|
Zdenek Prikryl |
595843 |
- had_errors++;
|
|
Zdenek Prikryl |
595843 |
- }
|
|
Zdenek Prikryl |
595843 |
+ had_errors += walk_tree(argv[optind]);
|
|
Zdenek Prikryl |
595843 |
optind++;
|
|
Zdenek Prikryl |
595843 |
}
|
|
Zdenek Prikryl |
595843 |
|