Files
WrenchBoradWeb/wrenchboard/src/core/safestring.cc
T
2019-05-31 11:26:35 -04:00

180 lines
2.7 KiB
C++

#include "safestring.h"
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
char * strsafecpy( char * dest, const char * src, int size )
{
if ( src==dest ) return dest;
if ( size<=0 ) return dest;
dest[0] = 0;
if ( !src ) return dest;
int len = strlen( src );
if ( len>=size )
len = size-1; // to be safe
strncpy( dest, src, len );
dest[ len ] = 0;
return dest;
}
char * strnsafecpy( char * dest, const char * src, int n, int size )
{
if ( size<=0 ) return dest;
dest[0] = 0;
if ( !src ) return dest;
if ( n>=size )
n = size-1;
strncpy( dest, src, n );
dest[ n ] = 0;
return dest;
}
char * strsafecat( char * dest, const char * src, int size )
{
int len = strlen( src );
int start = strlen(dest);
size -= start;
if ( len>=size )
len = size-1; // to be safe
strncat( dest, src, len );
dest[ start+len ] = 0;
return dest;
}
char * strnsafecat( char * dest, const char * src, int n, int size )
{
int len = strlen( src );
if ( n<len ) len = n;
int start = strlen(dest);
size -= start;
if ( len>=size )
len = size-1; // to be safe
strncat( dest, src, len );
dest[ start+len ] = 0;
return dest;
}
char * strcatf( char * dest, int size, const char * fmt, ... )
{
va_list ap;
va_start( ap, fmt );
int len = strlen( dest );
if ( size-len > 0 )
vsnprintf( &dest[len], size-len, fmt, ap );
dest[ size-1 ] = 0;
va_end( ap );
return dest;
}
char * toupper( char * s, char * dest/*=NULL*/, int sz/*=0*/ )
{
if (!s) return NULL;
char *c = s;
char *d = dest?dest:s;
while (*c) {
if (d-dest>=sz-1) break;
*d = toupper(*c);
c++; d++;
}
*d = 0;
return dest?dest:s;
}
char * tolower( char * s, char * dest/*=NULL*/, int sz/*=0*/ )
{
if (!s) return NULL;
char *c = s;
char *d = dest?dest:s;
while (*c) {
if ( dest && (d-dest>=sz-1) ) break;
*d = tolower(*c);
c++; d++;
}
*d = 0;
return dest?dest:s;
}
char * toupper( const char * s, char * dest, int sz )
{
return toupper( (char*)s, dest, sz );
}
char * tolower( const char * s, char * dest, int sz )
{
return tolower( (char*)s, dest, sz );
}
char * last_line( char * buf ) // find the last line and return the pointer to its beginning
{
char * line = buf, *bufend = buf + strlen(buf);
while ( char * c = strpbrk( line, "\r\n" ) )
{
c += strspn( c, "\r\n" );
if ( c==bufend )
return line;
line = c;
}
return line;
}
char * safestrdup( const char *s )
{
return s ? strdup( s ) : NULL;
}
char * strreverse( char *s )
{
int len = strlen(s);
int end = len/2;
unsigned char c;
for ( int i=0; i<end; i++ )
{
c = s[i];
s[i] = s[len-i-1];
s[len-i-1] = c;
}
return s;
}