No I think you're right. A naive ticket :)
On Thu, 2016-10-06 at 13:45 -0700, Stefan Seifert via RT wrote: > I'm rejecting this ticket because the given example is simply wrong. > NativeCall translates a Str to char *, i.e. a pointer to a character > array. Thus it will reserve the memory to hold such a pointer. > > The fields in struct utsname are character arrays. The docs specify > them as e.g. char sysname[]; which is a bit misleading as one would > assume that this is the same as char *sysname. The NOTES section > however explains that the length of those arrays differs from system > to system. > > /usr/include/linux/utsname.h defines it as char sysname[__NEW_UTS_LEN > + 1]; with #define __NEW_UTS_LEN 64 > > So the fields in the Utsname structs must be 65 bytes in length. The > only way I know to express this with current NativeCall features is > this piece of beauty: > > use v6.c; > > use NativeCall; > > class Utsname is repr('CStruct') { > has int8 $.sysname_0; has int8 $.sysname_1; has int8 $.sysname_2; > has int8 $.sysname_3; has int8 $.sysname_4; has int8 $.sysname_5; has > int8 $.sysname_6; has int8 $.sysname_7; has int8 $.sysname_8; has > int8 $.sysname_9; has int8 $.sysname_10; has int8 $.sysname_11; has > int8 $.sysname_12; has int8 $.sysname_13; has int8 $.sysname_14; has > int8 $.sysname_15; has int8 $.sysname_16; has int8 $.sysname_17; has > int8 $.sysname_18; has int8 $.sysname_19; has int8 $.sysname_20; has > int8 $.sysname_21; has int8 $.sysname_22; has int8 $.sysname_23; has > int8 $.sysname_24; has int8 $.sysname_25; has int8 $.sysname_26; has > int8 $.sysname_27; has int8 $.sysname_28; has int8 $.sysname_29; has > int8 $.sysname_30; has int8 $.sysname_31; has int8 $.sysname_32; has > int8 $.sysname_33; has int8 $.sysname_34; has int8 $.sysname_35; has > int8 $.sysname_36; has int8 $.sysname_37; has int8 $.sysname_38; has > int8 $.sysname_39; has int8 $.sysname_40; has int8 $.sysname_41; has > int8 $.sysname_42; has int > 8 $.sysname_43; has int8 $.sysname_44; has int8 $.sysname_45; has > int8 $.sysname_46; has int8 $.sysname_47; has int8 $.sysname_48; has > int8 $.sysname_49; has int8 $.sysname_50; has int8 $.sysname_51; has > int8 $.sysname_52; has int8 $.sysname_53; has int8 $.sysname_54; has > int8 $.sysname_55; has int8 $.sysname_56; has int8 $.sysname_57; has > int8 $.sysname_58; has int8 $.sysname_59; has int8 $.sysname_60; has > int8 $.sysname_61; has int8 $.sysname_62; has int8 $.sysname_63; has > int8 $.sysname_64; > has int8 $.nodename_0; has int8 $.nodename_1; has int8 > $.nodename_2; has int8 $.nodename_3; has int8 $.nodename_4; has int8 > $.nodename_5; has int8 $.nodename_6; has int8 $.nodename_7; has int8 > $.nodename_8; has int8 $.nodename_9; has int8 $.nodename_10; has int8 > $.nodename_11; has int8 $.nodename_12; has int8 $.nodename_13; has > int8 $.nodename_14; has int8 $.nodename_15; has int8 $.nodename_16; > has int8 $.nodename_17; has int8 $.nodename_18; has int8 > $.nodename_19; has int8 $.nodename_20; has int8 $.nodename_21; has > int8 $.nodename_22; has int8 $.nodename_23; has int8 $.nodename_24; > has int8 $.nodename_25; has int8 $.nodename_26; has int8 > $.nodename_27; has int8 $.nodename_28; has int8 $.nodename_29; has > int8 $.nodename_30; has int8 $.nodename_31; has int8 $.nodename_32; > has int8 $.nodename_33; has int8 $.nodename_34; has int8 > $.nodename_35; has int8 $.nodename_36; has int8 $.nodename_37; has > int8 $.nodename_38; has int8 $.nodename_39; has int8 $.nodename_40; > has int8 $.n > odename_41; has int8 $.nodename_42; has int8 $.nodename_43; has int8 > $.nodename_44; has int8 $.nodename_45; has int8 $.nodename_46; has > int8 $.nodename_47; has int8 $.nodename_48; has int8 $.nodename_49; > has int8 $.nodename_50; has int8 $.nodename_51; has int8 > $.nodename_52; has int8 $.nodename_53; has int8 $.nodename_54; has > int8 $.nodename_55; has int8 $.nodename_56; has int8 $.nodename_57; > has int8 $.nodename_58; has int8 $.nodename_59; has int8 > $.nodename_60; has int8 $.nodename_61; has int8 $.nodename_62; has > int8 $.nodename_63; has int8 $.nodename_64; > has int8 $.release_0; has int8 $.release_1; has int8 $.release_2; > has int8 $.release_3; has int8 $.release_4; has int8 $.release_5; has > int8 $.release_6; has int8 $.release_7; has int8 $.release_8; has > int8 $.release_9; has int8 $.release_10; has int8 $.release_11; has > int8 $.release_12; has int8 $.release_13; has int8 $.release_14; has > int8 $.release_15; has int8 $.release_16; has int8 $.release_17; has > int8 $.release_18; has int8 $.release_19; has int8 $.release_20; has > int8 $.release_21; has int8 $.release_22; has int8 $.release_23; has > int8 $.release_24; has int8 $.release_25; has int8 $.release_26; has > int8 $.release_27; has int8 $.release_28; has int8 $.release_29; has > int8 $.release_30; has int8 $.release_31; has int8 $.release_32; has > int8 $.release_33; has int8 $.release_34; has int8 $.release_35; has > int8 $.release_36; has int8 $.release_37; has int8 $.release_38; has > int8 $.release_39; has int8 $.release_40; has int8 $.release_41; has > int8 $.release_42; has int > 8 $.release_43; has int8 $.release_44; has int8 $.release_45; has > int8 $.release_46; has int8 $.release_47; has int8 $.release_48; has > int8 $.release_49; has int8 $.release_50; has int8 $.release_51; has > int8 $.release_52; has int8 $.release_53; has int8 $.release_54; has > int8 $.release_55; has int8 $.release_56; has int8 $.release_57; has > int8 $.release_58; has int8 $.release_59; has int8 $.release_60; has > int8 $.release_61; has int8 $.release_62; has int8 $.release_63; has > int8 $.release_64; > has int8 $.version_0; has int8 $.version_1; has int8 $.version_2; > has int8 $.version_3; has int8 $.version_4; has int8 $.version_5; has > int8 $.version_6; has int8 $.version_7; has int8 $.version_8; has > int8 $.version_9; has int8 $.version_10; has int8 $.version_11; has > int8 $.version_12; has int8 $.version_13; has int8 $.version_14; has > int8 $.version_15; has int8 $.version_16; has int8 $.version_17; has > int8 $.version_18; has int8 $.version_19; has int8 $.version_20; has > int8 $.version_21; has int8 $.version_22; has int8 $.version_23; has > int8 $.version_24; has int8 $.version_25; has int8 $.version_26; has > int8 $.version_27; has int8 $.version_28; has int8 $.version_29; has > int8 $.version_30; has int8 $.version_31; has int8 $.version_32; has > int8 $.version_33; has int8 $.version_34; has int8 $.version_35; has > int8 $.version_36; has int8 $.version_37; has int8 $.version_38; has > int8 $.version_39; has int8 $.version_40; has int8 $.version_41; has > int8 $.version_42; has int > 8 $.version_43; has int8 $.version_44; has int8 $.version_45; has > int8 $.version_46; has int8 $.version_47; has int8 $.version_48; has > int8 $.version_49; has int8 $.version_50; has int8 $.version_51; has > int8 $.version_52; has int8 $.version_53; has int8 $.version_54; has > int8 $.version_55; has int8 $.version_56; has int8 $.version_57; has > int8 $.version_58; has int8 $.version_59; has int8 $.version_60; has > int8 $.version_61; has int8 $.version_62; has int8 $.version_63; has > int8 $.version_64; > has int8 $.machine_0; has int8 $.machine_1; has int8 $.machine_2; > has int8 $.machine_3; has int8 $.machine_4; has int8 $.machine_5; has > int8 $.machine_6; has int8 $.machine_7; has int8 $.machine_8; has > int8 $.machine_9; has int8 $.machine_10; has int8 $.machine_11; has > int8 $.machine_12; has int8 $.machine_13; has int8 $.machine_14; has > int8 $.machine_15; has int8 $.machine_16; has int8 $.machine_17; has > int8 $.machine_18; has int8 $.machine_19; has int8 $.machine_20; has > int8 $.machine_21; has int8 $.machine_22; has int8 $.machine_23; has > int8 $.machine_24; has int8 $.machine_25; has int8 $.machine_26; has > int8 $.machine_27; has int8 $.machine_28; has int8 $.machine_29; has > int8 $.machine_30; has int8 $.machine_31; has int8 $.machine_32; has > int8 $.machine_33; has int8 $.machine_34; has int8 $.machine_35; has > int8 $.machine_36; has int8 $.machine_37; has int8 $.machine_38; has > int8 $.machine_39; has int8 $.machine_40; has int8 $.machine_41; has > int8 $.machine_42; has int > 8 $.machine_43; has int8 $.machine_44; has int8 $.machine_45; has > int8 $.machine_46; has int8 $.machine_47; has int8 $.machine_48; has > int8 $.machine_49; has int8 $.machine_50; has int8 $.machine_51; has > int8 $.machine_52; has int8 $.machine_53; has int8 $.machine_54; has > int8 $.machine_55; has int8 $.machine_56; has int8 $.machine_57; has > int8 $.machine_58; has int8 $.machine_59; has int8 $.machine_60; has > int8 $.machine_61; has int8 $.machine_62; has int8 $.machine_63; has > int8 $.machine_64; > has int8 $.domainname_0; has int8 $.domainname_1; has int8 > $.domainname_2; has int8 $.domainname_3; has int8 $.domainname_4; has > int8 $.domainname_5; has int8 $.domainname_6; has int8 > $.domainname_7; has int8 $.domainname_8; has int8 $.domainname_9; has > int8 $.domainname_10; has int8 $.domainname_11; has int8 > $.domainname_12; has int8 $.domainname_13; has int8 $.domainname_14; > has int8 $.domainname_15; has int8 $.domainname_16; has int8 > $.domainname_17; has int8 $.domainname_18; has int8 $.domainname_19; > has int8 $.domainname_20; has int8 $.domainname_21; has int8 > $.domainname_22; has int8 $.domainname_23; has int8 $.domainname_24; > has int8 $.domainname_25; has int8 $.domainname_26; has int8 > $.domainname_27; has int8 $.domainname_28; has int8 $.domainname_29; > has int8 $.domainname_30; has int8 $.domainname_31; has int8 > $.domainname_32; has int8 $.domainname_33; has int8 $.domainname_34; > has int8 $.domainname_35; has int8 $.domainname_36; has int8 > $.domainname_37; has int8 > $.domainname_38; has int8 $.domainname_39; has int8 > $.domainname_40; has int8 $.domainname_41; has int8 $.domainname_42; > has int8 $.domainname_43; has int8 $.domainname_44; has int8 > $.domainname_45; has int8 $.domainname_46; has int8 $.domainname_47; > has int8 $.domainname_48; has int8 $.domainname_49; has int8 > $.domainname_50; has int8 $.domainname_51; has int8 $.domainname_52; > has int8 $.domainname_53; has int8 $.domainname_54; has int8 > $.domainname_55; has int8 $.domainname_56; has int8 $.domainname_57; > has int8 $.domainname_58; has int8 $.domainname_59; has int8 > $.domainname_60; has int8 $.domainname_61; has int8 $.domainname_62; > has int8 $.domainname_63; has int8 $.domainname_64; > } > > sub uname(Utsname $utsname is rw --> int32) is native { ... } > > my $a = Utsname.new; > > uname($a); > > say join '', $a.^attributes.map({chr $_.get_value($a)});