Added a license comment to the top of the file.
[rsync/rsync.git] / mkrounding.c
1 /*
2  * A pre-compilation helper program to aid in the creation of rounding.h.
3  *
4  * Copyright (C) 2007 Wayne Davison
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19
20 #include "rsync.h"
21
22 struct test1 {
23     union file_extras extras1[1];
24     struct {
25 #       include "mkrounding.h"
26     } file;
27 };
28
29 struct test2 {
30     union file_extras extras2[2];
31     struct {
32 #       include "mkrounding.h"
33     } file;
34 };
35
36 struct test4 {
37     union file_extras extras4[4];
38     struct {
39 #       include "mkrounding.h"
40     } file;
41 };
42
43 #define SIZE_TEST(n) (sizeof (struct test ## n) == EXTRA_LEN * n + sizeof (struct file_struct))
44
45  int main(UNUSED(int argc), UNUSED(char *argv[]))
46 {
47     int cnt;
48     if (SIZE_TEST(1))
49         cnt = 0;
50     else if (SIZE_TEST(2))
51         cnt = 1;
52     else if (SIZE_TEST(4))
53         cnt = 3;
54     else {
55         fprintf(stderr, "Unable to determine required file_extras rounding!\n");
56         cnt = 3;
57     }
58     if (cnt)
59         fprintf(stderr, "Rounding file_extras in multiples of %d", cnt + 1);
60     else
61         fprintf(stderr, "No rounding needed for file_extras");
62     fprintf(stderr, " (EXTRA_LEN=%d, FILE_STRUCT_LEN=%d)\n",
63             (int)EXTRA_LEN, (int)FILE_STRUCT_LEN);
64     printf("#define EXTRA_ROUNDING %d\n", cnt);
65     return 0;
66 }