[freetds] hard-coded UCS-2 strings and the C standard
Brian Bruns
brian.bruns at gmail.com
Sat Jun 11 15:15:08 EDT 2005
Jim,
I like the change. I find the null embeded string hard to read and
frankly ugly. We don't run these things often enough for the slight
processing time to add the nulls to matter. Plus, if you wanted to
get down to that level, the old version increases the size of the
binaries. ;-)
Brian
2005/6/11, James K. Lowden <jklowden at freetds.org>:
> Frediano Ziglio wrote:
> > Il giorno ven, 10-06-2005 alle 14:55 -0400, Lowden, James K ha scritto:
> > > In src/tds/query.c we have several hard-coded UCS-2 strings e.g.:
> > >
> > > tds_put_n(tds, "s\0p\0_\0c\0u\0r\0s\0o\0r\0c\0l\0o\0s\0e", 28);
> > >
> > > Standard C (C99?) lets this be written as:
> > >
> > > tds_put_n(tds, L"sp_cursorclose", 28);
> > >
> >
> > This is a wide string, not a UCS-2 string. On many Unix systems (*BSD,
> > Linux) is encoded in UCS-4, not UCS-2. "s\0p\0_\0c\0u\0r\0s\0o\0r\0c\0l
> > \0o\0s\0e" is always UCS2-LE.
>
> Oh. Thanks for the education. :-)
>
> I find the hard-coded strings unpretty and hard to read (and scan for).
> So, I wrote the attached patch. It would let us replace:
>
> $ grep put_n *.c |grep s..p.._
> query.c: tds_put_n(tds,
> "s\0p\0_\0e\0x\0e\0c\0u\0t\0e\0s\0q\0l", 26);
> query.c: tds_put_n(tds,
> "s\0p\0_\0p\0r\0e\0p\0a\0r\0e", 20);
> query.c: tds_put_n(tds,
> "s\0p\0_\0e\0x\0e\0c\0u\0t\0e\0s\0q\0l", 26);
> query.c: tds_put_n(tds, "s\0p\0_\0e\0x\0e\0c\0u\0t\0e",
> 20);
> query.c: tds_put_n(tds,
> "s\0p\0_\0u\0n\0p\0r\0e\0p\0a\0r\0e", 24);
> query.c: tds_put_n(tds,
> "s\0p\0_\0c\0u\0r\0s\0o\0r\0o\0p\0e\0n", 26);
> query.c: tds_put_n(tds,
> "s\0p\0_\0c\0u\0r\0s\0o\0r\0f\0e\0t\0c\0h", 28);
> query.c: tds_put_n(tds,
> "s\0p\0_\0c\0u\0r\0s\0o\0r\0c\0l\0o\0s\0e", 28);
>
> with:
>
> $ grep put_n *.c |grep s..p.._ \
> |sed 's/, 2[0-9]//;s/tds_put_n/&_as_UCS2/;s:\\0::g'
> query.c: tds_put_n_as_UCS2(tds, "sp_executesql");
> query.c: tds_put_n_as_UCS2(tds, "sp_prepare");
> query.c: tds_put_n_as_UCS2(tds, "sp_executesql");
> query.c: tds_put_n_as_UCS2(tds, "sp_execute");
> query.c: tds_put_n_as_UCS2(tds, "sp_unprepare");
> query.c: tds_put_n_as_UCS2(tds, "sp_cursoropen");
> query.c: tds_put_n_as_UCS2(tds, "sp_cursorfetch");
> query.c: tds_put_n_as_UCS2(tds, "sp_cursorclose");
>
> What do you think?
>
> --jkl
>
>
> _______________________________________________
> FreeTDS mailing list
> FreeTDS at lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
>
>
>
>
More information about the FreeTDS
mailing list