<div dir="ltr"><div>On Wed, Jul 19, 2017 at 12:47:59AM +0300, Dmitry V. Levin wrote:</div><div>> On Mon, Jul 17, 2017 at 11:07:46PM +0800, JingPiao Chen wrote:</div><div>> > * tests/nlattr_nlmsgerr.c: New file.</div><div>> > * tests/<a href="http://gen_tests.in">gen_tests.in</a> (nlattr_nlmsgerr): New entry.</div><div>> > * tests/pure_executables.list: Add nlattr_nlmsgerr.</div><div>> > * tests/.gitignore: Likewise.</div><div>> [...]</div><div>> > +int</div><div>> > +main(void)</div><div>> > +{</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">      </span>skip_if_unavailable("/proc/self/fd/");</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>const int fd = create_nl_socket(NETLINK_SOCK_DIAG);</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>const unsigned int hdrlen = sizeof(struct nlmsgerr);</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>void *const nlh0 = tail_alloc(NLMSG_SPACE(hdrlen));</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">       </span>static char pattern[4096];</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>static const uint8_t cookie[] = { 0xab, 0xfe };</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>TEST_NLATTR(fd, nlh0, hdrlen,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">               </span>    init_nlmsgerr, print_nlmsgerr,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">                </span>    NLMSGERR_ATTR_COOKIE,</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">         </span>    sizeof(cookie), cookie, sizeof(cookie),</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">               </span>    printf("[%u, %u]", cookie[0], cookie[1]);</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">           </span>    printf("}"));</div><div>> > +</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">     </span>printf("+++ exited with 0 +++\n");</div><div>> > +<span class="gmail-Apple-tab-span" style="white-space:pre">        </span>return 0;</div><div>> > +}</div><div>> </div><div>> Note that pattern is initialized but never used here.</div><div>> Shouldn't TEST_NLATTR_ARRAY be used here instead of TEST_NLATTR?</div><div><br></div><div>Can not. Because sizeof(cookie[0]) == 1, plen == 0, test will output "", but</div><div>strace do not output "". And this header different from other header,</div><div>attributes is in inner:</div><div><br></div><div>struct nlmsgerr {</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>error;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>nlmsghdr;</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>[...];</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>[attributes];</div><div>}</div><div><br></div><div>We need print brace after print attributes.</div><div><br></div><div>--</div><div>JingPiao Chen</div></div>