New file to figure out if a system has any rounding needs when
authorWayne Davison <wayned@samba.org>
Sat, 16 Dec 2006 19:24:05 +0000 (19:24 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 16 Dec 2006 19:24:05 +0000 (19:24 +0000)
prepending extra values at the start of the file_struct.

mkrounding.c [new file with mode: 0644]

diff --git a/mkrounding.c b/mkrounding.c
new file mode 100644 (file)
index 0000000..11b8302
--- /dev/null
@@ -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;
+}