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)});

Reply via email to