(xstat): New global.

(main): Define it.
(change_file_group): Use it.  Before this change, when running chgrp
on a symlink without --dereference (-h) and when the requested group
is the same as the group for the *symlink*, chgrp would do nothing.
Now it changes the group of the file referenced through the symlink.
Reported by Martin Mitchell.
This commit is contained in:
Jim Meyering
1999-11-07 20:18:11 +00:00
parent 8bc2ecda80
commit 717d76cf4b
+10 -1
View File
@@ -81,6 +81,10 @@ char *program_name;
of symbolic links rather than any files they point to. */
static int change_symlinks = 1;
/* When change_symlinks is set, this should be set to `lstat', otherwise,
it should be `stat'. */
static int (*xstat) ();
/* If nonzero, change the ownership of directories recursively. */
static int recurse;
@@ -196,7 +200,7 @@ change_file_group (int cmdline_arg, const char *file, gid_t group)
struct stat file_stats;
int errors = 0;
if (lstat (file, &file_stats))
if ((*xstat) (file, &file_stats))
{
if (force_silent == 0)
error (0, errno, "%s", file);
@@ -409,6 +413,11 @@ main (int argc, char **argv)
usage (1);
}
if (change_symlinks)
xstat = lstat;
else
xstat = stat;
if (reference_file)
{
struct stat ref_stats;