On Mon, 10 Sep 2007, James Carlson wrote:

> Dan Price writes:
>> FWIW, I had simply assumed that the interface would mimic most other
>> memory allocating interface: strdup(mystr, KM_SLEEP) (or if we're
>> worried that people will make mistakes if it is called "strdup" then
>> call it kstrdup).  But again, I think this issue is for the implementor
>
> I'd thought the accepted way to do this was to prefix with "ddi_" if
> it was different from the user-space equivalent.  We've done this with
> other functions, such as ddi_strtol(9F).

And we already do have:

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/ddi_implfuncs.h#227
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/devcfg.c#2404

>
> I agree it ought to carry allocation flags through, but I also agree
> that it's possibly a dubious interface.  kmem_free requires the user

It's the interface actually already used by the above. Precedence, your 
honour :)

And no, due to the fact that there's no "free(addr)" mechanism for the 
kernel memory allocator, a complete identity between strdup(3C) and 
'strdup(9F)' cannot be achieved ...

FrankH.


> to pass in the original buffer size, so a typical usage pattern is
> like this:
>
>       foo->foo_len = strlen(blah) + 1;
>       foo->foo_str = kmem_alloc(foo->foo_len, KM_SLEEP);
>       strcpy(foo->foo_str, blah);
>       ...
>       kmem_free(foo->foo_str, foo->foo_len);
>
> ... meaning that callers usually need to know something about the
> string length in order to use 'strdup' in a reasonable way.
>
> Doing the strlen() twice isn't just a duplicate operation.  If it's
> done at kmem_free time, it's risky, and relies on users of that string
> to avoid truncating it.
>
> On top of that, it's often helpful to think about organizing the data
> structures in a way that avoids lots of tiny allocations -- as strdup
> encourages.
>
> But I guess I don't care much.  If someone feels strdup is useful,
> have at it.
>
>> to decide.
>>
>> Probably this belongs on osol-code... :/
>
> Redirecting ...
>
> -- 
> James Carlson, Solaris Networking              <[EMAIL PROTECTED]>
> Sun Microsystems / 1 Network Drive         71.232W   Vox +1 781 442 2084
> MS UBUR02-212 / Burlington MA 01803-2757   42.496N   Fax +1 781 442 1677
> _______________________________________________
> opensolaris-code mailing list
> opensolaris-code@opensolaris.org
> http://mail.opensolaris.org/mailman/listinfo/opensolaris-code
>
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to