]> andersk Git - openssh.git/blobdiff - sftp-common.c
- (dtucker) [sftp-common.c] Wrap include of util.h in an ifdef.
[openssh.git] / sftp-common.c
index 5313b134dc4710ef9e3cc051de7bef0cc93d86b4..96eb4f79a5e3fffe4d1bfb71bf5f2c77f93444ea 100644 (file)
@@ -1,3 +1,4 @@
+/* $OpenBSD: sftp-common.c,v 1.21 2010/01/13 01:40:16 djm Exp $ */
 /*
  * Copyright (c) 2001 Markus Friedl.  All rights reserved.
  * Copyright (c) 2001 Damien Miller.  All rights reserved.
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sftp-common.c,v 1.9 2003/05/24 09:30:40 djm Exp $");
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdarg.h>
+#ifdef HAVE_UTIL_H
+#include <util.h>
+#endif
+
+#include "xmalloc.h"
 #include "buffer.h"
-#include "bufaux.h"
 #include "log.h"
-#include "xmalloc.h"
 
 #include "sftp.h"
 #include "sftp-common.h"
@@ -49,7 +62,7 @@ attrib_clear(Attrib *a)
 
 /* Convert from struct stat to filexfer attribs */
 void
-stat_to_attrib(struct stat *st, Attrib *a)
+stat_to_attrib(const struct stat *st, Attrib *a)
 {
        attrib_clear(a);
        a->flags = 0;
@@ -67,7 +80,7 @@ stat_to_attrib(struct stat *st, Attrib *a)
 
 /* Convert from filexfer attribs to struct stat */
 void
-attrib_to_stat(Attrib *a, struct stat *st)
+attrib_to_stat(const Attrib *a, struct stat *st)
 {
        memset(st, 0, sizeof(*st));
 
@@ -124,7 +137,7 @@ decode_attrib(Buffer *b)
 
 /* Encode attributes to buffer */
 void
-encode_attrib(Buffer *b, Attrib *a)
+encode_attrib(Buffer *b, const Attrib *a)
 {
        buffer_put_int(b, a->flags);
        if (a->flags & SSH2_FILEXFER_ATTR_SIZE)
@@ -174,7 +187,7 @@ fx2txt(int status)
  * drwxr-xr-x    5 markus   markus       1024 Jan 13 18:39 .ssh
  */
 char *
-ls_file(char *name, struct stat *st, int remote)
+ls_file(const char *name, const struct stat *st, int remote, int si_units)
 {
        int ulen, glen, sz = 0;
        struct passwd *pw;
@@ -182,6 +195,7 @@ ls_file(char *name, struct stat *st, int remote)
        struct tm *ltime = localtime(&st->st_mtime);
        char *user, *group;
        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);
        if (!remote && (pw = getpwuid(st->st_uid)) != NULL) {
@@ -206,8 +220,15 @@ ls_file(char *name, struct stat *st, int remote)
                tbuf[0] = '\0';
        ulen = MAX(strlen(user), 8);
        glen = MAX(strlen(group), 8);
-       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);
+       if (si_units) {
+               fmt_scaled((long long)st->st_size, sbuf);
+               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);
 }
This page took 0.140421 seconds and 4 git commands to generate.