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} |