Highly Reusable Software
#License - #Source code - #Example Use -
#include <librock/astring.h> char *librock_astrcat( char * *ppasz, const char *pSrc ); char *librock_astrn0cat( char * *ppasz, const char *pSrc, int n );
The return value (which is also stored at *ppasz) is a pointer to the possibly moved buffer, which will contain a copy of the NUL terminated string at pSrc appended, (or at most n bytes of pSrc if astrn0cat() is used.)
The NUL termination character is always stored by both functions.
n cannot be used to reserve more space, or append more bytes than strlen(pSrc) See librock_astrensure() for that need.
The point of concatenation is determined by strlen().
The caller must assume pointers into the old buffer are stale after calling these functions. See librock_afgets() implementation for a good way to use indexes and not pointers.
The allocation function, librock_astrensure(), makes realloc requests in multiples of a fixed size. The primary benefit of this strategy is to reduce realloc calls by assuming the buffer is at least a minimum size. For this and other reasons, be sure to call only with *ppasz set to 0 or a value obtained from a previous call to one of these functions.
#ifdef librock_TYPICAL_USE_astrcat char *asz = 0; librock_astrcpy(&asz,"Long buffer"); librock_astrcat(&asz,"Longer buffer"); printf("%s\n",asz); librock_astrfree(&asz); #endif
#include <librock/target/types.c> #include <librock/astring.h> char *librock_astrcatX( char * *ppasz, const char *pSrc, void *(*reallocfn)(void *,librock_SIZE_T) ); char *librock_astrn0catX( char * *ppasz, const char *pSrc, int n, void *(*reallocfn)(void *,librock_SIZE_T) );
strlen() strcpy() librock_astrensureX() // used by librock_astrcatX librock_astrcatX() realloc(). // used by librock_astrcat strlen() memchr() memcpy() librock_astrensureX() // used by librock_astrn0catX librock_astrn0catX() and realloc() // used by librock_astrn0cat
Copyright 1998-2000 Forrest J. Cavalier III, http://www.mibsoftware.com Open-source under MIT license. NO WARRANTY. Copies must retain this block. License text in <librock/license/mit.txt> librock_LIDESC_HC=cc598307414a9997b32b60a2e7a8e7c6a13d6438
Verbatim copying and distribution of this generated page is permitted in any medium provided that no changes are made.
(The source of this manual page may be covered by a more permissive license which allows modifications.)
Want to help? We welcome comments, patches. -- Need help? Request paid support.