Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある件について

http://twitter.com/k_morihisa/status/9006163842

Twitter / Morihisa Kazuaki: Linux kernel の wireless.c で .header_type とか,ドットで始まる変数名?がある.謎

Linux-Kernel Archive: 2.6.18-git9 wireless fixes break ipw2200 association to AP with WPAのパッチとかみると、たしかにこんな断片のC言語ソースコードがでてくる。

@@ -242,24 +234,24 @@
[SIOCSIWESSID - SIOCIWFIRST] = {
.header_type = IW_HEADER_TYPE_POINT,
.token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
.flags = IW_DESCR_FLAG_EVENT,
},
[SIOCGIWESSID - SIOCIWFIRST] = {
.header_type = IW_HEADER_TYPE_POINT,
.token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
.flags = IW_DESCR_FLAG_DUMP,
},
[SIOCSIWNICKN - SIOCIWFIRST] = {
.header_type = IW_HEADER_TYPE_POINT,
.token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
},
[SIOCGIWNICKN - SIOCIWFIRST] = {
.header_type = IW_HEADER_TYPE_POINT,
.token_size = 1,
- .max_tokens = IW_ESSID_MAX_SIZE,
+ .max_tokens = IW_ESSID_MAX_SIZE + 1,
},
[SIOCSIWRATE - SIOCIWFIRST] = {
.header_type = IW_HEADER_TYPE_PARAM,
@@ -346,8 +338,8 @@
.max_tokens = sizeof(struct iw_pmksa),
},
};
-static const unsigned standard_ioctl_num = (sizeof(standard_ioctl) /
- sizeof(struct iw_ioctl_description));
+static const int standard_ioctl_num = (sizeof(standard_ioctl) /
+ sizeof(struct iw_ioctl_description));

/*
* Meta-data about all the additional standard Wireless Extension events

http://twitter.com/takesako/status/9016296481 でも返事しましたが、

つまり、こういうこと?

#include <stdio.h>

typedef struct x{
  char a;
  char b;
} X;

int main(void)
{
  const X x[] = {
    [2] = { .a=69, .b=0,  },
    [0] = { .a=65, .b=66, },
    [1] = { .a=67, .b=68, },
  };
  printf("%s\n",x);
}

→ 実行結果:ABCDE