435a2535b7
Move 'get_disk_info()' function into 'compat/'. Although Scalar-specific code is generally not part of the main Git tree, 'get_disk_info()' will be used in subsequent patches by additional callers beyond 'scalar diagnose'. This patch prepares for that change, at which point this platform-specific code should be part of 'compat/' as a matter of convention. The function is copied *mostly* verbatim, with two exceptions: * '#ifdef WIN32' is replaced with '#ifdef GIT_WINDOWS_NATIVE' to allow 'statvfs' to be used with Cygwin. * the 'struct strbuf buf' and 'int res' (as well as their corresponding cleanup & return) are moved outside of the '#ifdef' block. Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
#ifndef COMPAT_DISK_H
|
|
#define COMPAT_DISK_H
|
|
|
|
#include "git-compat-util.h"
|
|
|
|
static int get_disk_info(struct strbuf *out)
|
|
{
|
|
struct strbuf buf = STRBUF_INIT;
|
|
int res = 0;
|
|
|
|
#ifdef GIT_WINDOWS_NATIVE
|
|
char volume_name[MAX_PATH], fs_name[MAX_PATH];
|
|
DWORD serial_number, component_length, flags;
|
|
ULARGE_INTEGER avail2caller, total, avail;
|
|
|
|
strbuf_realpath(&buf, ".", 1);
|
|
if (!GetDiskFreeSpaceExA(buf.buf, &avail2caller, &total, &avail)) {
|
|
error(_("could not determine free disk size for '%s'"),
|
|
buf.buf);
|
|
res = -1;
|
|
goto cleanup;
|
|
}
|
|
|
|
strbuf_setlen(&buf, offset_1st_component(buf.buf));
|
|
if (!GetVolumeInformationA(buf.buf, volume_name, sizeof(volume_name),
|
|
&serial_number, &component_length, &flags,
|
|
fs_name, sizeof(fs_name))) {
|
|
error(_("could not get info for '%s'"), buf.buf);
|
|
res = -1;
|
|
goto cleanup;
|
|
}
|
|
strbuf_addf(out, "Available space on '%s': ", buf.buf);
|
|
strbuf_humanise_bytes(out, avail2caller.QuadPart);
|
|
strbuf_addch(out, '\n');
|
|
#else
|
|
struct statvfs stat;
|
|
|
|
strbuf_realpath(&buf, ".", 1);
|
|
if (statvfs(buf.buf, &stat) < 0) {
|
|
error_errno(_("could not determine free disk size for '%s'"),
|
|
buf.buf);
|
|
res = -1;
|
|
goto cleanup;
|
|
}
|
|
|
|
strbuf_addf(out, "Available space on '%s': ", buf.buf);
|
|
strbuf_humanise_bytes(out, (off_t)stat.f_bsize * (off_t)stat.f_bavail);
|
|
strbuf_addf(out, " (mount flags 0x%lx)\n", stat.f_flag);
|
|
#endif
|
|
|
|
cleanup:
|
|
strbuf_release(&buf);
|
|
return res;
|
|
}
|
|
|
|
#endif /* COMPAT_DISK_H */
|