X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fstkstring.h;h=8f58aec736b87012c1990fde567e118de8e6c348;hb=6829bc0163f6ecfc8ae70ee7b3ce2b79e7484dfe;hp=6337a26b5b2c5f2da0901d7a154f12bfa2b32c67;hpb=512c07b430959e72f574e34cc2bd60b8e4672ad8;p=libucw.git diff --git a/lib/stkstring.h b/lib/stkstring.h index 6337a26b..8f58aec7 100644 --- a/lib/stkstring.h +++ b/lib/stkstring.h @@ -1,7 +1,8 @@ /* * UCW Library -- Strings Allocated on the Stack * - * (c) 2005 Martin Mares + * (c) 2005--2006 Martin Mares + * (c) 2005 Tomas Valla * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -11,6 +12,7 @@ #include #define stk_strdup(s) ({ char *_s=(s); uns _l=strlen(_s)+1; char *_x=alloca(_l); memcpy(_x, _s, _l); _x; }) +#define stk_strndup(s,n) ({ char *_s=(s); uns _l=strnlen(_s,(n)); char *_x=alloca(_l+1); memcpy(_x, _s, _l); _x[_l]=0; _x; }) #define stk_strcat(s1,s2) ({ char *_s1=(s1); char *_s2=(s2); uns _l1=strlen(_s1); uns _l2=strlen(_s2); char *_x=alloca(_l1+_l2+1); memcpy(_x,_s1,_l1); memcpy(_x+_l1,_s2,_l2+1); _x; }) #define stk_strmulticat(s...) ({ char *_s[]={s}; char *_x=alloca(stk_array_len(_s, ARRAY_SIZE(_s)-1)); stk_array_copy(_x, _s, ARRAY_SIZE(_s)-1); _x; }) #define stk_strarraycat(s,n) ({ char **_s=(s); int _n=(n); char *_x=alloca(stk_array_len(_s,_n)); stk_array_copy(_x, _s, _n); _x; })