On Wed, Oct 19, 2011 at 10:01:33PM +0100, David Laight wrote: > > > some dtrace ioctls, including DTRACEIOC_AGGSNAP, are defined as > > > the following. > > > > > > #define DTRACEIOC_AGGSNAP _IOW('x',7,dtrace_bufdesc_t *) > > > > > > and libdtrace has diffs like the following. > > > > > > #if defined(sun) > > > if (dt_ioctl(dtp, DTRACEIOC_AGGSNAP, buf) == -1) { > > > #else > > > if (dt_ioctl(dtp, DTRACEIOC_AGGSNAP, &buf) == -1) { > > > #endif > > > > > > they seem weird to me. > > > why can't they be like the following? > > > > > > _IOW('x',7,dtrace_bufdesc_t) > > > > I don't see any obvious reason... even though dtrace_bufdesc_t is not > > actually a primitive type, it's only a 40-byte structure, so it should > > be fine... > > Hmmm... the sun code is passing the structure by value
Is it? The non-sun code appears to be calling an ioctl that's defined to take a pointer to a pointer to a structure. Or maybe I'm totally misreading ioccom.h? > - which is > probably ABI compatible with passing the address of a copy! yes, I was thinking of that :-/ -- David A. Holland dholl...@netbsd.org