aboutsummaryrefslogtreecommitdiffstats
path: root/tls.c
diff options
context:
space:
mode:
authorMartin Pool <mbp@samba.org>2001-11-27 07:54:03 +0000
committerMartin Pool <mbp@samba.org>2001-11-27 07:54:03 +0000
commitdd0700b02550094a7e94d3533be3d16965114cea (patch)
tree9f5abb4a14a08235fe87abbc514aaee69e5daba2 /tls.c
parent04d8e8b25f14316e8a87f387870e8f1a89b802cc (diff)
downloadandroid_external_rsync-dd0700b02550094a7e94d3533be3d16965114cea.tar.gz
android_external_rsync-dd0700b02550094a7e94d3533be3d16965114cea.tar.bz2
android_external_rsync-dd0700b02550094a7e94d3533be3d16965114cea.zip
mtime and ownership of symlinks can be random, so don't print them.
Diffstat (limited to 'tls.c')
-rw-r--r--tls.c44
1 files changed, 28 insertions, 16 deletions
diff --git a/tls.c b/tls.c
index cd6dec05..2409c538 100644
--- a/tls.c
+++ b/tls.c
@@ -65,38 +65,50 @@ static void list_file (const char *fname)
struct stat buf;
char permbuf[PERMSTRING_SIZE];
struct tm *mt;
+ char datebuf[50];
if (do_lstat(fname, &buf) == -1)
failed ("stat", fname);
- /* On some BSD platforms the mode bits of a symlink are
- * undefined. */
- if (S_ISLNK(buf.st_mode))
- buf.st_mode &= ~0777;
-
/* The size of anything but a regular file is probably not
* worth thinking about. */
if (!S_ISREG(buf.st_mode))
buf.st_size = 0;
- permstring(permbuf, buf.st_mode);
+ /* On some BSD platforms the mode bits of a symlink are
+ * undefined. Also it tends not to be possible to reset a
+ * symlink's mtime, so we have to ignore it too. */
+ if (S_ISLNK(buf.st_mode)) {
+ buf.st_mode &= ~0777;
+ buf.st_mtime = (time_t)0;
+ buf.st_uid = buf.st_gid = 0;
+ }
- mt = gmtime(&buf.st_mtime);
+ permstring(permbuf, buf.st_mode);
+ if (buf.st_mtime) {
+ mt = gmtime(&buf.st_mtime);
+
+ sprintf(datebuf, "%04d-%02d-%02d %02d:%02d:%02d",
+ mt->tm_year + 1900,
+ mt->tm_mon + 1,
+ mt->tm_mday,
+ mt->tm_hour,
+ mt->tm_min,
+ mt->tm_sec);
+ } else {
+ strcpy(datebuf, " ");
+ }
+
/* TODO: Perhaps escape special characters in fname? */
-
+
+
/* NB: need to pass size as a double because it might be be
* too large for a long. */
- printf("%s %12.0f %6d.%-6d %04d-%02d-%02d %02d:%02d:%02d %s\n",
+ printf("%s %12.0f %6d.%-6d %s %s\n",
permbuf, (double) buf.st_size,
buf.st_uid, buf.st_gid,
- mt->tm_year + 1900,
- mt->tm_mon + 1,
- mt->tm_mday,
- mt->tm_hour,
- mt->tm_min,
- mt->tm_sec,
- fname);
+ datebuf, fname);
}