[7336] in bugtraq
Fast, efficient, limitless strings. In C.
daemon@ATHENA.MIT.EDU (Forrest J. Cavalier III)
Tue Jul 21 17:16:24 1998
Date: Tue, 21 Jul 1998 06:48:34 -0400
Reply-To: mibsoft@mibsoftware.com
From: "Forrest J. Cavalier III" <mibsoft@MIBSOFTWARE.COM>
To: BUGTRAQ@NETSPACE.ORG
I have an allocated string library which I'll work
on documenting and putting on a WWW page.
It implements 4 key string allocation functions, and
allows you to use the existing "standard" libc and
other null-terminated string operations we all know
(and love.) (I figured, what's the point of a string
library, if you have to re-implement strchr, strstr,
strspn, etc.)
char *astrcpy(char **pasz,const char *src);
/* mallocs or reallocs a buffer. */
char *astrn0cpy(char **pasz,const char *src,size_t len);
/* Always stores a '\0' */
char *astrcat(char **pasz,const char *src);
char *astrn0cat(char **pasz,const char *src,size_t len);
void astrfree(char **pasz); /* or call free(pasz) */
There is some string tracking and "overallocation" to
improve efficiency. In typical use, there is very
little string moving.
An added bonus: a "limitless" sprintf and fgets are
also included.
Retrofitting old code is almost as easy as writing new
code, which would look like this....
char *pasz = 0;
astrcpy(&pasz,getenv("SOME_BIG_STRING"));
if (strstr(pasz,"bad_path")) {
.....
}
Licensing is BSD-style. (Free of charge for commercial
and non-commercial use.)
Header file documentation is decent right now, but I'd
like to document things a bit better. It is ready
for beta testing, grab astring.h (5K) and astring.c
(27K) from
http://www.mibsoftware.com/libmib/astring/
Please send comments and bug reports to me.
Forrest J. Cavalier III
Mib Software