postgresql/src/bin/psql/stringutils.c

105 lines
2.1 KiB
C

/*-------------------------------------------------------------------------
*
* stringutils.c--
* simple string manipulation routines
*
* Copyright (c) 1994, Regents of the University of California
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/psql/stringutils.c,v 1.1.1.1 1996/07/09 06:22:15 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include "stringutils.h"
/* all routines assume null-terminated strings! */
/* removes whitespaces from the left, right and both sides of a string */
/* MODIFIES the string passed in and returns the head of it */
char* leftTrim(char* s)
{
char* s2 = s;
int shift=0;
int j=0;
while (isspace(*s))
{ s++; shift++;}
if (shift > 0)
{
while ( (s2[j] = s2[j+shift]) !='\0')
j++;
}
return s2;
}
char* rightTrim(char* s)
{
char* sEnd;
sEnd = s+strlen(s)-1;
while (isspace(*sEnd))
sEnd--;
if (sEnd < s)
s[0]='\0';
else
s[sEnd-s+1]='\0';
return s;
}
char* doubleTrim(char* s)
{
strcpy(s,leftTrim(rightTrim(s)));
return s;
}
/* dupstr : copies a string, while allocating space for it.
the CALLER is responsible for freeing the space
returns NULL if the argument is NULL*/
char* dupstr(char *s)
{
char* result;
if (s == NULL)
return NULL;
result = (char*)malloc(strlen(s)+1);
strcpy(result, s);
return result;
}
#ifdef STRINGUTILS_TEST
void testStringUtils()
{
static char* tests[] = {" goodbye \n", /* space on both ends */
"hello world", /* no spaces to trim */
"", /* empty string */
"a", /* string with one char*/
" ", /* string with one whitespace*/
NULL_STR};
int i=0;
while (tests[i]!=NULL_STR)
{
char* t;
t = dupstr(tests[i]);
printf("leftTrim(%s) = ",t);
printf("%sEND\n", leftTrim(t));
t = dupstr(tests[i]);
printf("rightTrim(%s) = ",t);
printf("%sEND\n", rightTrim(t));
t = dupstr(tests[i]);
printf("doubleTrim(%s) = ",t);
printf("%sEND\n", doubleTrim(t));
i++;
}
}
#endif