aboutsummaryrefslogtreecommitdiffstats
path: root/mkrounding.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2006-12-16 19:24:05 +0000
committerWayne Davison <wayned@samba.org>2006-12-16 19:24:05 +0000
commitd5833800a8d14bf8b57002e837ce69f3adbae694 (patch)
tree0d9f753c7d9018390b07fe320b374737d6dbc770 /mkrounding.c
parent8d3a785fa53f0334822dfccdb5d643c7bcebd225 (diff)
downloadandroid_external_rsync-d5833800a8d14bf8b57002e837ce69f3adbae694.tar.gz
android_external_rsync-d5833800a8d14bf8b57002e837ce69f3adbae694.tar.bz2
android_external_rsync-d5833800a8d14bf8b57002e837ce69f3adbae694.zip
New file to figure out if a system has any rounding needs when
prepending extra values at the start of the file_struct.
Diffstat (limited to 'mkrounding.c')
-rw-r--r--mkrounding.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/mkrounding.c b/mkrounding.c
new file mode 100644
index 00000000..11b8302c
--- /dev/null
+++ b/mkrounding.c
@@ -0,0 +1,45 @@
+#include "rsync.h"
+
+struct test1 {
+ union file_extras extras1[1];
+ struct {
+# include "mkrounding.h"
+ } file;
+};
+
+struct test2 {
+ union file_extras extras2[2];
+ struct {
+# include "mkrounding.h"
+ } file;
+};
+
+struct test4 {
+ union file_extras extras4[4];
+ struct {
+# include "mkrounding.h"
+ } file;
+};
+
+#define SIZE_TEST(n) (sizeof (struct test ## n) == EXTRA_LEN * n + sizeof (struct file_struct))
+
+ int main(UNUSED(int argc), UNUSED(char *argv[]))
+{
+ int cnt;
+ if (SIZE_TEST(1))
+ cnt = 0;
+ else if (SIZE_TEST(2))
+ cnt = 1;
+ else if (SIZE_TEST(4))
+ cnt = 3;
+ else {
+ fprintf(stderr, "Unable to determine required file_extras rounding!\n");
+ cnt = 3;
+ }
+ if (cnt)
+ fprintf(stderr, "Rounding file_extras values in multiples of %d.\n", cnt + 1);
+ else
+ fprintf(stderr, "No rounding needed for file_extras values.\n");
+ printf("#define EXTRA_ROUNDING %d\n", cnt);
+ return 0;
+}