Pacaging/build issues with AIX and vac (dovecot-2.2.25)
Michael Felt
michael at felt.demon.nl
Mon Oct 10 18:20:38 UTC 2016
On 10/10/2016 19:44, Michael Felt wrote:
> +11 main()
> +12 {
> +13 http_auth_param_t b[] = {
> +14 (http_auth_param_t) { .p1 = "c1" },
> +15 (http_auth_param_t) { .p2 = "e2" }
> +16 };
> +17
> +18 printf("%s\n", a[0].p1);
> +19 printf("%s\n", b[1].p2);
> +20 }
Updated to:
+1 typedef struct {
+2 char * p1;
+3 char * p2;
+4 } http_auth_param_t;
+5
+6 http_auth_param_t a[] =
+7 { "a1", "a2",
+8 "b1", "b2"
+9 };
+10
+11 struct xxx {
+12 char *lbl;
+13 http_auth_param_t a[];
+14 };
+15 struct xxx X = (struct xxx) {
+16 .lbl = "labelX",
+17 .a = {
+18 (http_auth_param_t) { .p1 = "c1" },
+19 (http_auth_param_t) { .p2 = "g2" },
+20 (http_auth_param_t) { }
+21 }
+22 };
+23 main()
+24 {
+25 http_auth_param_t b[] = {
+26 (http_auth_param_t) { .p1 = "c1" },
+27 (http_auth_param_t) { .p2 = "e2" },
+28 (http_auth_param_t) { }
+29 };
+30
+31 printf("%s\n", a[0].p1);
+32 printf("%s\n", b[1].p2);
+33 printf("%s\n", X.a[1].p2);
+34 }
!cc c99_comp_literal.c; ./a.out
a1
e2
g2
The key element seems to be in the struct definition:
this works:
+11 struct xxx {
+12 char *lbl;
+13 http_auth_param_t a[];
+14 };
but
+11 struct xxx {
+12 char *lbl;
+13 http_auth_param_t *a;
+14 };
!cc c99_comp_literal.c; ./a.out
"c99_comp_literal.c", line 18.20: 1506-196 (S) Initialization between
types "struct {...}*" and "struct {...}" is not allowed.
"c99_comp_literal.c", line 19.20: 1506-026 (S) Number of initializers
cannot be greater than the number of aggregate members.
"c99_comp_literal.c", line 20.20: 1506-026 (S) Number of initializers
cannot be greater than the number of aggregate members.
I (am guessing) think the reason is because *a could be an array of
"random"(ized) pointers pointing to single instance, while [] says it
will be an array of structs.
More information about the dovecot
mailing list