>
> In <sys/proc.h>:
>
> /*
> * pargs, used to hold a copy of the command line, if it had a sane
> * length
> */
> struct pargs {
> u_int ar_ref; /* Reference count */
> u_int ar_length; /* Length */
> u_char ar_args[0]; /* Arguments */
> };
>
> This does indeed seem to make little or no sense. Could someone explain
> this? Is ar_args supposed to be a pointer or what?
This is a common technique for defining a structure which is some
descriptive information about an array of objects is followed by an
open-ended array of those objects. (In this case the "objects" are
characters.) The ar_args member of the structure gives a name to that
location in the structure without reserving any space (and thus when the
technique is used, there can only ever be one [0] member and it must be at
the end of the structure). You access the open-ended array of objects just
as you would any other array embedded within a structure, E.G.
instance->ar_args[n].
Not all compilers support defining zero-length arrays like this. And that's
a pity; it's an incredibly useful technique, and the alternatives to it are
not nearly as elegant and generally involve ugly recasting of pointers.
-- Ian
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message