|
version 1.1.1.1, 2012/02/17 15:09:30
|
version 1.1.1.3, 2016/11/01 09:54:32
|
|
Line 2
|
Line 2
|
| * Trivial ls for comparing two directories after running an rsync. |
* Trivial ls for comparing two directories after running an rsync. |
| * |
* |
| * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> |
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org> |
| * Copyright (C) 2003-2009 Wayne Davison | * Copyright (C) 2003-2015 Wayne Davison |
| * |
* |
| * This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
|
Line 43
|
Line 43
|
| /* These are to make syscall.o shut up. */ |
/* These are to make syscall.o shut up. */ |
| int dry_run = 0; |
int dry_run = 0; |
| int am_root = 0; |
int am_root = 0; |
| |
int am_sender = 1; |
| int read_only = 1; |
int read_only = 1; |
| int list_only = 0; |
int list_only = 0; |
| int link_times = 0; |
int link_times = 0; |
| int link_owner = 0; |
int link_owner = 0; |
| |
int nsec_times = 0; |
| int preserve_perms = 0; |
int preserve_perms = 0; |
| int preserve_executability = 0; |
int preserve_executability = 0; |
| |
|
|
Line 146 static void list_file(const char *fname)
|
Line 148 static void list_file(const char *fname)
|
| buf.st_uid = buf.st_gid = 0; |
buf.st_uid = buf.st_gid = 0; |
| strlcpy(linkbuf, " -> ", sizeof linkbuf); |
strlcpy(linkbuf, " -> ", sizeof linkbuf); |
| /* const-cast required for silly UNICOS headers */ |
/* const-cast required for silly UNICOS headers */ |
| len = readlink((char *) fname, linkbuf+4, sizeof(linkbuf) - 4); | len = do_readlink((char *) fname, linkbuf+4, sizeof(linkbuf) - 4); |
| if (len == -1) |
if (len == -1) |
| failed("readlink", fname); | failed("do_readlink", fname); |
| else |
else |
| /* it's not nul-terminated */ |
/* it's not nul-terminated */ |
| linkbuf[4+len] = 0; |
linkbuf[4+len] = 0; |
|
Line 159 static void list_file(const char *fname)
|
Line 161 static void list_file(const char *fname)
|
| permstring(permbuf, buf.st_mode); |
permstring(permbuf, buf.st_mode); |
| |
|
| if (buf.st_mtime) { |
if (buf.st_mtime) { |
| |
int len; |
| mt = gmtime(&buf.st_mtime); |
mt = gmtime(&buf.st_mtime); |
| |
|
| snprintf(datebuf, sizeof datebuf, | len = snprintf(datebuf, sizeof datebuf, |
| "%04d-%02d-%02d %02d:%02d:%02d", |
"%04d-%02d-%02d %02d:%02d:%02d", |
| (int)mt->tm_year + 1900, |
(int)mt->tm_year + 1900, |
| (int)mt->tm_mon + 1, |
(int)mt->tm_mon + 1, |
|
Line 169 static void list_file(const char *fname)
|
Line 172 static void list_file(const char *fname)
|
| (int)mt->tm_hour, |
(int)mt->tm_hour, |
| (int)mt->tm_min, |
(int)mt->tm_min, |
| (int)mt->tm_sec); |
(int)mt->tm_sec); |
| } else | #ifdef ST_MTIME_NSEC |
| strlcpy(datebuf, " ", sizeof datebuf); | if (nsec_times) { |
| | snprintf(datebuf + len, sizeof datebuf - len, |
| | ".%09d", (int)buf.ST_MTIME_NSEC); |
| | } |
| | #endif |
| | } else { |
| | int len = MIN(19 + 9*nsec_times, (int)sizeof datebuf - 1); |
| | memset(datebuf, ' ', len); |
| | datebuf[len] = '\0'; |
| | } |
| |
|
| /* TODO: Perhaps escape special characters in fname? */ |
/* TODO: Perhaps escape special characters in fname? */ |
| |
|
|
Line 179 static void list_file(const char *fname)
|
Line 191 static void list_file(const char *fname)
|
| printf("%5ld,%6ld", |
printf("%5ld,%6ld", |
| (long)major(buf.st_rdev), |
(long)major(buf.st_rdev), |
| (long)minor(buf.st_rdev)); |
(long)minor(buf.st_rdev)); |
| } else /* NB: use double for size since it might not fit in a long. */ | } else |
| printf("%12.0f", (double)buf.st_size); | printf("%15s", do_big_num(buf.st_size, 1, NULL)); |
| printf(" %6ld.%-6ld %6ld %s %s%s\n", |
printf(" %6ld.%-6ld %6ld %s %s%s\n", |
| (long)buf.st_uid, (long)buf.st_gid, (long)buf.st_nlink, |
(long)buf.st_uid, (long)buf.st_gid, (long)buf.st_nlink, |
| datebuf, fname, linkbuf); |
datebuf, fname, linkbuf); |
|
Line 192 static struct poptOption long_options[] = {
|
Line 204 static struct poptOption long_options[] = {
|
| {"link-owner", 'L', POPT_ARG_NONE, &link_owner, 0, 0, 0 }, |
{"link-owner", 'L', POPT_ARG_NONE, &link_owner, 0, 0, 0 }, |
| #ifdef SUPPORT_XATTRS |
#ifdef SUPPORT_XATTRS |
| {"fake-super", 'f', POPT_ARG_VAL, &am_root, -1, 0, 0 }, |
{"fake-super", 'f', POPT_ARG_VAL, &am_root, -1, 0, 0 }, |
| |
#endif |
| |
#ifdef ST_MTIME_NSEC |
| |
{"nsec", 's', POPT_ARG_NONE, &nsec_times, 0, 0, 0 }, |
| #endif |
#endif |
| {"help", 'h', POPT_ARG_NONE, 0, 'h', 0, 0 }, |
{"help", 'h', POPT_ARG_NONE, 0, 'h', 0, 0 }, |
| {0,0,0,0,0,0,0} |
{0,0,0,0,0,0,0} |