Thread (5 messages) flat view 5 messages, 3 authors, 2016-06-15

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_t  
length);

#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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help