Re: [PATCH] compat: introduce stat_to_kilobytes
From: Andreas Färber <hidden>
Date: 2016-06-15 22:45:10
Am 17.08.2008 um 11:47 schrieb Junio C Hamano:
Some platforms do not have st_blocks member in "struct stat"; mingw already emulates it by rounding it up to closest 512-byte blocks (even though it could overcount when a file has holes). The reason to use the member is only to figure out how many kilobytes the file occupies on-disk, so give a helper in git-compat-util.h to help these platforms. Signed-off-by: Junio C Hamano <redacted> --- * I suspect you may be better off building on top of something like this. The comment before "struct mingw_stat" suggests that the only reason this compatiblity definition exists is to add st_blocks member, so I suspect we could remove the definition and simplify the compatibility layer a lot more, but I do not know MinGW, so I am CC'ing j6t here.
[...]
quoted hunk ↗ jump to hunk
diff --git a/Makefile b/Makefile index 53ab4b5..8f69f16 100644 --- a/Makefile +++ b/Makefile@@ -124,6 +124,9 @@ all::# Define USE_STDEV below if you want git to care about the underlying device # change being considered an inode change from the update-index perspective. # +# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks +# field that counts the on-disk footprint in 512-byte blocks. +# # Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8 # # Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.@@ -749,6 +752,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))NO_SVN_TESTS = YesPlease NO_PERL_MAKEMAKER = YesPlease NO_POSIX_ONLY_PROGRAMS = YesPlease + NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat COMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1 COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
What's missing in this one is the translation from Makefile variable to preprocessor define: ifdef NO_ST_BLOCKS_IN_STRUCT_STAT BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT endif for this to work:
quoted hunk ↗ jump to hunk
--- a/git-compat-util.h +++ b/git-compat-util.h@@ -192,6 +192,12 @@ extern int git_munmap(void *start, size_tlength); #endif /* NO_MMAP */ +#ifdef NO_ST_BLOCKS_IN_STRUCT_STAT +#define stat_to_kilobytes(st) ((((st).st_size+511) / 512) / 2) +#else +#define stat_to_kilobytes(st) ((st).st_blocks / 2) +#endif + #define DEFAULT_PACKED_GIT_LIMIT \ ((1024L * 1024L) * (sizeof(void*) >= 8 ? 8192 : 256))
Andreas