]> git.ipfire.org Git - thirdparty/git.git/blame - compat/disk.h
Merge branch 'ps/t0610-umask-fix'
[thirdparty/git.git] / compat / disk.h
CommitLineData
435a2535
VD
1#ifndef COMPAT_DISK_H
2#define COMPAT_DISK_H
3
0b027f6c 4#include "abspath.h"
f394e093 5#include "gettext.h"
435a2535
VD
6
7static int get_disk_info(struct strbuf *out)
8{
9 struct strbuf buf = STRBUF_INIT;
10 int res = 0;
11
12#ifdef GIT_WINDOWS_NATIVE
13 char volume_name[MAX_PATH], fs_name[MAX_PATH];
14 DWORD serial_number, component_length, flags;
15 ULARGE_INTEGER avail2caller, total, avail;
16
17 strbuf_realpath(&buf, ".", 1);
18 if (!GetDiskFreeSpaceExA(buf.buf, &avail2caller, &total, &avail)) {
19 error(_("could not determine free disk size for '%s'"),
20 buf.buf);
21 res = -1;
22 goto cleanup;
23 }
24
25 strbuf_setlen(&buf, offset_1st_component(buf.buf));
26 if (!GetVolumeInformationA(buf.buf, volume_name, sizeof(volume_name),
27 &serial_number, &component_length, &flags,
28 fs_name, sizeof(fs_name))) {
29 error(_("could not get info for '%s'"), buf.buf);
30 res = -1;
31 goto cleanup;
32 }
33 strbuf_addf(out, "Available space on '%s': ", buf.buf);
34 strbuf_humanise_bytes(out, avail2caller.QuadPart);
35 strbuf_addch(out, '\n');
36#else
37 struct statvfs stat;
38
39 strbuf_realpath(&buf, ".", 1);
40 if (statvfs(buf.buf, &stat) < 0) {
41 error_errno(_("could not determine free disk size for '%s'"),
42 buf.buf);
43 res = -1;
44 goto cleanup;
45 }
46
47 strbuf_addf(out, "Available space on '%s': ", buf.buf);
48 strbuf_humanise_bytes(out, (off_t)stat.f_bsize * (off_t)stat.f_bavail);
49 strbuf_addf(out, " (mount flags 0x%lx)\n", stat.f_flag);
50#endif
51
52cleanup:
53 strbuf_release(&buf);
54 return res;
55}
56
57#endif /* COMPAT_DISK_H */