On Fri, Jun 22, 2007 at 09:30:40AM -0700, Mark Glines wrote:
> On Fri, 7 Nov 2008 15:28:40 -0700
> chromatic <[EMAIL PROTECTED]> wrote:
> > On Friday 22 June 2007 02:07:32 Nicholas Clark wrote:
> > > I think that you need something like this
> > > /* concatenating with "" ensures that only literal strings are
> > > accepted as argument */ #define STR_WITH_LEN(s)  (s ""),
> > > (sizeof(s)-1)
> > >
> > > /* STR_WITH_LEN() shortcuts */
> > > #define newSVpvs(str) Perl_newSVpvn(aTHX_ STR_WITH_LEN(str))
> > 
> > I'm not sure that's what I was asking.
> > 
> > string_from_cstring()'s third parameter can be either the length of
> > the string or zero.  If it's zero, the function will call strlen() to
> > get the string's length.
> 
> It uses sizeof, not strlen.  So, it pushes the calculation to
> compile-time, so you only have to do it once, and never at runtime.
> 
> Also, using sizeof() will fix some cases that strlen() doesn't handle
> correctly, specifically, strings containing explicit null characters.
> src/objects.c has a few examples of that.  string_to_cstring(interp,
> "\0", 0) will get the size wrong, but string_to_cstring_literal(interp,
> "\0") will get it right.  So I don't really see a good excuse for not
> using it everywhere.
I think you mean "string_from_cstring_literal", not 
"string_to_cstring_literal".  At least I _hope_ that's 
what you mean.  :-)

Also, out of curiosity, do we really need "cstring" in the name?
How about simply...?

    string_from_literal(interp, "Foo")

(I'm not opposed to leaving 'cstring' in the name if it's important
to somehow make it clear that the literal is a cstring literal, I'm
just asking the question.)

Pm

Reply via email to