version 1.20, 2006/08/03 03:34:42 |
version 1.21, 2010/01/13 01:40:16 |
|
|
#include <string.h> |
#include <string.h> |
#include <time.h> |
#include <time.h> |
#include <stdarg.h> |
#include <stdarg.h> |
|
#include <util.h> |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "buffer.h" |
#include "buffer.h" |
|
|
* drwxr-xr-x 5 markus markus 1024 Jan 13 18:39 .ssh |
* drwxr-xr-x 5 markus markus 1024 Jan 13 18:39 .ssh |
*/ |
*/ |
char * |
char * |
ls_file(const char *name, const struct stat *st, int remote) |
ls_file(const char *name, const struct stat *st, int remote, int si_units) |
{ |
{ |
int ulen, glen, sz = 0; |
int ulen, glen, sz = 0; |
struct passwd *pw; |
struct passwd *pw; |
|
|
struct tm *ltime = localtime(&st->st_mtime); |
struct tm *ltime = localtime(&st->st_mtime); |
char *user, *group; |
char *user, *group; |
char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1]; |
char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1]; |
|
char sbuf[FMT_SCALED_STRSIZE]; |
|
|
strmode(st->st_mode, mode); |
strmode(st->st_mode, mode); |
if (!remote && (pw = getpwuid(st->st_uid)) != NULL) { |
if (!remote && (pw = getpwuid(st->st_uid)) != NULL) { |
|
|
tbuf[0] = '\0'; |
tbuf[0] = '\0'; |
ulen = MAX(strlen(user), 8); |
ulen = MAX(strlen(user), 8); |
glen = MAX(strlen(group), 8); |
glen = MAX(strlen(group), 8); |
snprintf(buf, sizeof buf, "%s %3u %-*s %-*s %8llu %s %s", mode, |
if (si_units) { |
(u_int)st->st_nlink, ulen, user, glen, group, |
fmt_scaled((long long)st->st_size, sbuf); |
(unsigned long long)st->st_size, tbuf, name); |
snprintf(buf, sizeof buf, "%s %3u %-*s %-*s %8s %s %s", mode, |
|
(u_int)st->st_nlink, ulen, user, glen, group, |
|
sbuf, tbuf, name); |
|
} else { |
|
snprintf(buf, sizeof buf, "%s %3u %-*s %-*s %8llu %s %s", mode, |
|
(u_int)st->st_nlink, ulen, user, glen, group, |
|
(unsigned long long)st->st_size, tbuf, name); |
|
} |
return xstrdup(buf); |
return xstrdup(buf); |
} |
} |