Changeset 5002:35d2d75c1504 in roaraudio


Ignore:
Timestamp:
05/24/11 00:55:30 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added roar_mm_strlcpy(), roar_mm_strlcat() and roar_mm_strtok_r()

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/memmgr.h

    r5001 r5002  
    133133#endif 
    134134 
     135#ifndef ROAR_HAVE_STRLCPY 
     136ssize_t roar_mm_strlcpy(char *dst, const char *src, size_t size); 
     137#else 
     138#define roar_mm_strlcpy(dst,src,size) strlcpy((dst),(src),(size)) 
     139#endif 
     140 
     141#ifndef ROAR_HAVE_STRLCAT 
     142ssize_t roar_mm_strlcat(char *dst, const char *src, size_t size); 
     143#else 
     144#define roar_mm_strlcat(dst,src,size) strlcat((dst),(src),(size)) 
     145#endif 
     146 
     147#ifndef ROAR_HAVE_STRTOK_R 
     148char * roar_mm_strtok_r(char *str, const char *delim, char **saveptr); 
     149#else 
     150#define roar_mm_strtok_r(str,delim,saveptr) strtok_r((str),(delim),(saveptr)) 
     151#endif 
     152 
    135153#endif 
    136154 
  • libroar/memmgr.c

    r5001 r5002  
    301301} 
    302302 
     303 
     304#ifndef ROAR_HAVE_STRLCPY 
     305ssize_t roar_mm_strlcpy(char *dst, const char *src, size_t size) { 
     306 ssize_t len; 
     307 
     308 if ( dst == NULL || src == NULL ) { 
     309  roar_err_set(ROAR_ERROR_FAULT); 
     310  return -1; 
     311 } 
     312 
     313 if ( size == 0 ) 
     314  return 0; 
     315 
     316 len = roar_mm_strlen(src); 
     317 if ( len == -1 ) 
     318  return -1; 
     319 
     320 if ( len < (ssize_t)size ) { 
     321  memcpy(dst, src, len); 
     322  dst[len] = 0; 
     323 } else { 
     324  memcpy(dst, src, size - 1); 
     325  dst[size-1] = 0; 
     326 } 
     327 
     328 return len; 
     329} 
     330#endif 
     331 
     332#ifndef ROAR_HAVE_STRLCAT 
     333ssize_t roar_mm_strlcat(char *dst, const char *src, size_t size) { 
     334 ssize_t slen; 
     335 ssize_t dlen; 
     336 int err; 
     337 
     338 if ( dst == NULL || src == NULL ) { 
     339  roar_err_set(ROAR_ERROR_FAULT); 
     340  return -1; 
     341 } 
     342 
     343 if ( size == 0 ) 
     344  return 0; 
     345 
     346 slen = roar_mm_strlen(src); 
     347 if ( slen == -1 ) 
     348  return -1; 
     349 
     350 dlen = roar_mm_strnlen(dst, size); 
     351 err  = roar_error; 
     352 if ( dlen == -1 && err == ROAR_ERROR_MSGSIZE ) 
     353  dlen = size; 
     354 
     355 if ( dlen == -1 ) 
     356  return -1; 
     357 
     358 if ( (dlen + slen) < (ssize_t)size ) { 
     359  memcpy(dst+dlen, src, slen); 
     360  dst[dlen+slen] = 0; 
     361 } else if ( dlen != size ) { 
     362  memcpy(dst+dlen, src, size-dlen-1); 
     363  dst[size-1] = 0; 
     364 } 
     365 
     366 return dlen+slen; 
     367} 
     368#endif 
     369 
     370#ifndef ROAR_HAVE_STRTOK_R 
     371char * roar_mm_strtok_r(char *str, const char *delim, char **saveptr) { 
     372 char * next; 
     373 
     374 if ( delim == NULL || saveptr == NULL ) { 
     375  roar_err_set(ROAR_ERROR_FAULT); 
     376  return NULL; 
     377 } 
     378 
     379 if ( delim[0] == 0 ) { 
     380  roar_err_set(ROAR_ERROR_NOTSUP); 
     381  return NULL; 
     382 } 
     383 
     384 if ( delim[1] != 0 ) { 
     385  roar_err_set(ROAR_ERROR_NOTSUP); 
     386  return NULL; 
     387 } 
     388 
     389 if ( str != NULL ) { 
     390  next = str; 
     391 } else { 
     392  next = *saveptr; 
     393 } 
     394 
     395 if ( next == NULL ) { 
     396  roar_err_set(ROAR_ERROR_NODATA); 
     397  return NULL; 
     398 } 
     399 
     400 *saveptr = strstr(next, delim); 
     401 
     402 if ( *saveptr != NULL ) { 
     403  **saveptr = 0; 
     404  (*saveptr)++; 
     405 } 
     406 
     407 return next; 
     408} 
     409#endif 
     410 
    303411//ll 
Note: See TracChangeset for help on using the changeset viewer.