]> git.ipfire.org Git - thirdparty/git.git/commitdiff
scalar-diagnose: move 'get_disk_info()' to 'compat/'
authorVictoria Dye <vdye@github.com>
Fri, 12 Aug 2022 20:10:12 +0000 (20:10 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 12 Aug 2022 20:20:02 +0000 (13:20 -0700)
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>
compat/disk.h [new file with mode: 0644]
contrib/scalar/scalar.c
git-compat-util.h

diff --git a/compat/disk.h b/compat/disk.h
new file mode 100644 (file)
index 0000000..50a32e3
--- /dev/null
@@ -0,0 +1,56 @@
+#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 */
index b9092f0b612eaa59174bd746b996f150f8bdb112..607fedefd823537fd1ec07cfc197dcceaf9300cb 100644 (file)
@@ -13,6 +13,7 @@
 #include "help.h"
 #include "archive.h"
 #include "object-store.h"
+#include "compat/disk.h"
 
 /*
  * Remove the deepest subdirectory in the provided path string. Path must not
@@ -309,58 +310,6 @@ static int add_directory_to_archiver(struct strvec *archiver_args,
        return res;
 }
 
-#ifndef WIN32
-#include <sys/statvfs.h>
-#endif
-
-static int get_disk_info(struct strbuf *out)
-{
-#ifdef WIN32
-       struct strbuf buf = STRBUF_INIT;
-       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);
-               strbuf_release(&buf);
-               return -1;
-       }
-
-       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);
-               strbuf_release(&buf);
-               return -1;
-       }
-       strbuf_addf(out, "Available space on '%s': ", buf.buf);
-       strbuf_humanise_bytes(out, avail2caller.QuadPart);
-       strbuf_addch(out, '\n');
-       strbuf_release(&buf);
-#else
-       struct strbuf buf = STRBUF_INIT;
-       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);
-               strbuf_release(&buf);
-               return -1;
-       }
-
-       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);
-       strbuf_release(&buf);
-#endif
-       return 0;
-}
-
 /* printf-style interface, expects `<key>=<value>` argument */
 static int set_config(const char *fmt, ...)
 {
index 58d7708296b614dbb6fd0bd9feb403d2a8c473ce..9a62e3a0d2df49e737450bef8b69828a4aa24197 100644 (file)
@@ -258,6 +258,7 @@ static inline int is_xplatform_dir_sep(int c)
 #include <sys/resource.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
+#include <sys/statvfs.h>
 #include <termios.h>
 #ifndef NO_SYS_SELECT_H
 #include <sys/select.h>