diff options
| author | Martin Pool <mbp@samba.org> | 2001-11-27 07:54:03 +0000 |
|---|---|---|
| committer | Martin Pool <mbp@samba.org> | 2001-11-27 07:54:03 +0000 |
| commit | dd0700b02550094a7e94d3533be3d16965114cea (patch) | |
| tree | 9f5abb4a14a08235fe87abbc514aaee69e5daba2 /tls.c | |
| parent | 04d8e8b25f14316e8a87f387870e8f1a89b802cc (diff) | |
| download | android_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.c | 44 |
1 files changed, 28 insertions, 16 deletions
@@ -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); } |
