From: Jim Meyering Date: Sat, 24 Jul 1993 13:00:24 +0000 (+0000) Subject: merge with 3.8 X-Git-Tag: FILEUTILS-3_8_3b~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=08701d38a4c4e746e79132651c4577a6c03b02f6;p=thirdparty%2Fcoreutils.git merge with 3.8 --- diff --git a/lib/backupfile.c b/lib/backupfile.c index f15e530bff..670db0f5d5 100644 --- a/lib/backupfile.c +++ b/lib/backupfile.c @@ -216,7 +216,7 @@ concat (str1, str2) char *str1, *str2; { char *newstr; - char str1_length = strlen (str1); + int str1_length = strlen (str1); newstr = malloc (str1_length + strlen (str2) + 1); if (newstr == 0) diff --git a/old/fileutils/ChangeLog b/old/fileutils/ChangeLog index f59a9cbfa2..e8b4215cdc 100644 --- a/old/fileutils/ChangeLog +++ b/old/fileutils/ChangeLog @@ -1,3 +1,28 @@ +Thu May 27 00:03:51 1993 Jim Meyering (meyering@comco.com) + + * Version 3.8. + + * configure.in (STAT_OSF1): Reference the statfs f_fsize member + so that configure defines STAT_OSF1 only if there is such a member. + Without such a reference, a Pyramid MIServer running OSx 5.1 + improperly defined STAT_OSF1 instead of the one it needed: + STAT_STATFS2_BSIZE. + +Wed May 26 00:57:46 1993 Jim Meyering (meyering@comco.com) + + * ls.h, ls-ls.c ls-dir.c, ls-vdir.c: New files that define or + simply set the new global variable ls_mode. ls_mode defines whether + the executable built from ls.o should act like ls, dir, or vdir. + * ls.c (decode_switches): Use the variable instead of #ifdefs. + This is modelled after the approach used in GNU binutils 2.x for + ar and ranlib. Here we avoid two rudundant compilations. + + * install.c (change_attributes, copy_file, install_file_in_file): + Don't call chown if we can efficiently determine that doing so is + unnecessary. On some systems, calls to chown (even with your own + uid and gid) fail unless made by root. On such systems install + got spurious failures. + Sat May 22 02:13:12 1993 Jim Meyering (meyering@comco.com) * Version 3.6. diff --git a/old/fileutils/NEWS b/old/fileutils/NEWS index 487e1d1656..4b71f42e6c 100644 --- a/old/fileutils/NEWS +++ b/old/fileutils/NEWS @@ -1,3 +1,11 @@ +Major changes in release 3.8: +* install isn't as likely to produce spurious errors +* avoid redundant compilations for `dir' and `vdir'; +* configure properly defines STAT_STATFS2_BSIZE on a Pyramid MIServer + running OSx 5.1 + +Major changes in release 3.7: +* none Major changes in release 3.6: * `ln -s dir_pathname .' works when the pathname has a trailing slash * with the --version option programs print the version and exit immediately diff --git a/src/install.c b/src/install.c index b2461eefcb..c4593602b7 100644 --- a/src/install.c +++ b/src/install.c @@ -263,11 +263,17 @@ install_file_in_file (from, to) char *from; char *to; { - if (copy_file (from, to)) + int to_created; + int no_need_to_chown; + + if (copy_file (from, to, &to_created)) return 1; if (strip_files) strip (to); - return change_attributes (to); + no_need_to_chown = (to_created + && owner_name == NULL + && group_name == NULL); + return change_attributes (to, no_need_to_chown); } /* Copy file FROM into directory TO_DIR, keeping its same name, @@ -295,17 +301,22 @@ install_file_in_dir (from, to_dir) static char buffer[READ_SIZE]; /* Copy file FROM onto file TO, creating TO if necessary. - Return 0 if the copy is successful, 1 if not. */ + Return 0 if the copy is successful, 1 if not. If the copy is + successful, set *TO_CREATED to non-zero if TO was created (if it did + not exist or did, but was unlinked) and to zero otherwise. If the + copy fails, don't modify *TO_CREATED. */ static int -copy_file (from, to) +copy_file (from, to, to_created) char *from; char *to; + int *to_created; { int fromfd, tofd; int bytes; int ret = 0; struct stat from_stats, to_stats; + int target_created = 1; if (stat (from, &from_stats)) { @@ -331,7 +342,8 @@ copy_file (from, to) return 1; } /* If unlink fails, try to proceed anyway. */ - unlink (to); + if (unlink (to)) + target_created = 0; } fromfd = open (from, O_RDONLY, 0); @@ -373,6 +385,8 @@ copy_file (from, to) error (0, errno, "%s", to); ret = 1; } + if (ret == 0) + *to_created = target_created; return ret; copy_error: @@ -382,11 +396,13 @@ copy_file (from, to) } /* Set the attributes of file or directory PATH. + If NO_NEED_TO_CHOWN is non-zero, don't call chown. Return 0 if successful, 1 if not. */ static int -change_attributes (path) +change_attributes (path, no_need_to_chown) char *path; + int no_need_to_chown; { int err = 0; @@ -406,7 +422,7 @@ change_attributes (path) want to know. But AFS returns EPERM when you try to change a file's group; thus the kludge. */ - if (chown (path, owner_id, group_id) + if (!no_need_to_chown && chown (path, owner_id, group_id) #ifdef AFS && errno != EPERM #endif diff --git a/src/ls.c b/src/ls.c index 6dd186a386..e659260e36 100644 --- a/src/ls.c +++ b/src/ls.c @@ -45,6 +45,8 @@ #include #include "system.h" #include + +#include "ls.h" #include "version.h" #ifndef S_IEXEC @@ -525,29 +527,37 @@ decode_switches (argc, argv) /* initialize all switches to default settings */ -#ifdef MULTI_COL - /* This is for the `dir' program. */ - format = many_per_line; - quote_funny_chars = 1; -#else -#ifdef LONG_FORMAT - /* This is for the `vdir' program. */ - format = long_format; - quote_funny_chars = 1; -#else - /* This is for the `ls' program. */ - if (isatty (1)) + switch (ls_mode) { + case LS_MULTI_COL: + /* This is for the `dir' program. */ format = many_per_line; - qmark_funny_chars = 1; - } - else - { - format = one_per_line; - qmark_funny_chars = 0; + quote_funny_chars = 1; + break; + + case LS_LONG_FORMAT: + /* This is for the `vdir' program. */ + format = long_format; + quote_funny_chars = 1; + break; + + case LS_LS: + /* This is for the `ls' program. */ + if (isatty (1)) + { + format = many_per_line; + qmark_funny_chars = 1; + } + else + { + format = one_per_line; + qmark_funny_chars = 0; + } + break; + + default: + abort (); } -#endif -#endif time_type = time_mtime; full_time = 0;