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