mirror of
git://git.sv.gnu.org/coreutils
synced 2026-06-05 15:22:12 -04:00
(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:
+10
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user