summaryrefslogtreecommitdiffstats
path: root/sftp.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2010-01-08 08:51:47 +0100
committerDarren Tucker <dtucker@zip.com.au>2010-01-08 08:51:47 +0100
commitb5082e90a13c9c9f96f1aed894f70f6f00737396 (patch)
tree188bbc53212f0e93f5ae6fe4a8f995c7052586ee /sftp.c
parent - djm@cvs.openbsd.org 2009/12/06 23:53:45 (diff)
downloadopenssh-b5082e90a13c9c9f96f1aed894f70f6f00737396.tar.xz
openssh-b5082e90a13c9c9f96f1aed894f70f6f00737396.zip
- dtucker@cvs.openbsd.org 2009/12/06 23:53:54
[sftp.c] fix potential divide-by-zero in sftp's "df" output when talking to a server that reports zero files on the filesystem (Unix filesystems always have at least the root inode). From Steve McClellan at radisys, ok djm@
Diffstat (limited to 'sftp.c')
-rw-r--r--sftp.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sftp.c b/sftp.c
index 2ce7cc1e1..1aa37423c 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp.c,v 1.113 2009/11/22 13:18:00 halex Exp $ */
+/* $OpenBSD: sftp.c,v 1.114 2009/12/06 23:53:54 dtucker Exp $ */
/*
* Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
*
@@ -846,19 +846,19 @@ do_df(struct sftp_conn *conn, char *path, int hflag, int iflag)
char s_avail[FMT_SCALED_STRSIZE];
char s_root[FMT_SCALED_STRSIZE];
char s_total[FMT_SCALED_STRSIZE];
+ unsigned long long ffree;
if (do_statvfs(conn, path, &st, 1) == -1)
return -1;
if (iflag) {
+ ffree = st.f_files ? (100 * (st.f_files - st.f_ffree) / st.f_files) : 0;
printf(" Inodes Used Avail "
"(root) %%Capacity\n");
printf("%11llu %11llu %11llu %11llu %3llu%%\n",
(unsigned long long)st.f_files,
(unsigned long long)(st.f_files - st.f_ffree),
(unsigned long long)st.f_favail,
- (unsigned long long)st.f_ffree,
- (unsigned long long)(100 * (st.f_files - st.f_ffree) /
- st.f_files));
+ (unsigned long long)st.f_ffree, ffree);
} else if (hflag) {
strlcpy(s_used, "error", sizeof(s_used));
strlcpy(s_avail, "error", sizeof(s_avail));