Re: [PATCH] compat: introduce stat_to_kilobytes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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 <gitster@xxxxxxxxx>
---

* 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.

[...]

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:

--- 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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux