summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>2000-05-02 09:52:50 +0000
committergoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>2000-05-02 09:52:50 +0000
commit2e3f67f3c0dfeade33f742b2279a33fd52170adb (patch)
treee786818fe591e6a4fe88a067ffffed1bba4d03bb /src
parent95ddf6ca8d39a2c205c809256cabd4f9960b1e13 (diff)
Moved the util string functions to one place.
Added Util_StrSep - same functionality as strsep. Renamed CCTK_StrDup as Util_Strdup. Tom git-svn-id: http://svn.cactuscode.org/flesh/trunk@1621 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src')
-rw-r--r--src/include/util_String.h28
-rw-r--r--src/util/Misc.c89
-rw-r--r--src/util/String.c261
-rw-r--r--src/util/make.code.defn3
4 files changed, 291 insertions, 90 deletions
diff --git a/src/include/util_String.h b/src/include/util_String.h
new file mode 100644
index 00000000..3da4a444
--- /dev/null
+++ b/src/include/util_String.h
@@ -0,0 +1,28 @@
+ /*@@
+ @header util_String.h
+ @date Tue May 2 11:00:39 2000
+ @author Tom Goodale
+ @desc
+ String routines
+ @enddesc
+ @version $History$
+ @@*/
+
+#ifndef _UTIL_STRING_H_
+#define _UTIL_STRING_H_ 1
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+const char *Util_StrSep(const char **stringp, const char *delim);
+int Util_SplitString(char **before, char **after, const char *string, const char *sep);
+char *Util_Strdup(const char *s);
+int Util_StrCmpi(const char *string1, const char *string2);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UTIL_STRING_H_ */
diff --git a/src/util/Misc.c b/src/util/Misc.c
index 2581b7ff..261d2a17 100644
--- a/src/util/Misc.c
+++ b/src/util/Misc.c
@@ -38,95 +38,6 @@ int CCTK_RegexMatch(const char *string,
const int nmatch,
regmatch_t *pmatch);
- /*@@
- @routine Util_SplitString
- @date Wed Jan 20 10:14:00 1999
- @author Tom Goodale
- @desc
- Splits a string into two parts at the given seperator.
- Assigns memory for the two resulting strings, so this should be freed
- when no longer needed.
- @enddesc
- @calls
- @calledby
- @history
-
- @endhistory
-
-@@*/
-int Util_SplitString(char **before, char **after, const char *string, const char *sep)
-{
- int retval=0;
- char *position;
-
- /* Find location of the seperator */
- position = strstr(string, sep);
-
- if(position)
- {
- /*Allocate memory for return strings. */
- *before = (char *)malloc((size_t)((position-string+1)*sizeof(char)));
- *after = (char *)malloc((size_t)((strlen(string)-(position-string)-strlen(sep)+1)*sizeof(char)));
-
- /* Check that the allocation succeeded. */
- if(!*before || !*after)
- {
- free(*before);
- *before = NULL;
- free(*after);
- *after = NULL;
- retval = 2;
- }
- else
- {
- retval = 3;
- }
- }
- else
- {
- *before = NULL;
- *after = NULL;
- retval = 1;
- }
-
- if(position && *before && *after)
- {
- /* Copy the data */
- strncpy(*before, string, (int)(position-string));
- (*before)[(int)(position-string)] = '\0';
-
- strncpy(*after, position+strlen(sep), strlen(string)-(int)(position-string)-strlen(sep));
- (*after)[strlen(string)-(position-string)-strlen(sep)] = '\0';
-
- retval = 0;
- }
-
- return retval;
-}
-
- /*@@
- @routine CCTK_Strdup
- @date Thu Mar 28 11:20:27 2000
- @author Gerd Lanfermann
- @desc
- CCTK version of strdup, since it's not guaranteed to be there.
- @enddesc
- @calls
- @calledby
- @history
-
- @endhistory
-
-@@*/
-char *CCTK_Strdup(const char *s)
-{
- char *retstr;
-
- retstr = (char*) malloc((strlen(s)+1)*sizeof(char));
- sprintf(retstr,"%s",s);
-
- return(retstr);
-}
/*@@
@routine CCTK_Equals
diff --git a/src/util/String.c b/src/util/String.c
new file mode 100644
index 00000000..4c61b8e9
--- /dev/null
+++ b/src/util/String.c
@@ -0,0 +1,261 @@
+ /*@@
+ @file String.c
+ @date Tue May 2 10:44:19 2000
+ @author Tom Goodale
+ @desc
+ Routines dealing with strings.
+ @enddesc
+ @version $Header$
+ @@*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "util_String.h"
+
+#include "cctk_Flesh.h"
+static char *rcsid = "$Header$";
+
+CCTK_FILEVERSION(util_String_c)
+
+ /*@@
+ @routine CCTK_StrSep
+ @date Tue May 2 10:29:07 2000
+ @author Tom Goodale
+ @desc
+ The strsep() function returns the next token from the string stringp which is delimited by delim. The token
+ is terminated with a `\0' character and stringp is updated to point past the token.
+
+ RETURN VALUE
+ The strsep() function returns a pointer to the token, or NULL if delim is not found in stringp.
+
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+const char *Util_StrSep(const char **stringp, const char *delim)
+{
+ int retlength = 0;
+ static char *retval = NULL;
+ char *temp;
+ const char *start;
+ const char *end;
+
+ start = *stringp;
+
+ end = strstr(start, delim);
+
+ /* Is the delimiter part of the string */
+ if(end)
+ {
+ if(retlength < (end-start)+1)
+ {
+ temp = realloc(retval, (end-start+1));
+
+ if(temp)
+ {
+ retval = temp;
+ retlength = end-start+1;
+ }
+ else
+ {
+ free(retval);
+ retval = NULL;
+ retlength = 0;
+ }
+ }
+
+ if(retval)
+ {
+ strncpy(retval, start, end-start);
+ retval[end-start] = '\0';
+
+ *stringp = end+strlen(delim);
+ }
+
+ }
+ else
+ {
+ free(retval);
+ retval = NULL;
+ retlength = 0;
+ }
+
+ return retval;
+}
+
+ /*@@
+ @routine Util_SplitString
+ @date Wed Jan 20 10:14:00 1999
+ @author Tom Goodale
+ @desc
+ Splits a string into two parts at the given seperator.
+ Assigns memory for the two resulting strings, so this should be freed
+ when no longer needed.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+int Util_SplitString(char **before, char **after, const char *string, const char *sep)
+{
+ int retval=0;
+ char *position;
+
+ /* Find location of the seperator */
+ position = strstr(string, sep);
+
+ if(position)
+ {
+ /*Allocate memory for return strings. */
+ *before = (char *)malloc((size_t)((position-string+1)*sizeof(char)));
+ *after = (char *)malloc((size_t)((strlen(string)-(position-string)-strlen(sep)+1)*sizeof(char)));
+
+ /* Check that the allocation succeeded. */
+ if(!*before || !*after)
+ {
+ free(*before);
+ *before = NULL;
+ free(*after);
+ *after = NULL;
+ retval = 2;
+ }
+ else
+ {
+ retval = 3;
+ }
+ }
+ else
+ {
+ *before = NULL;
+ *after = NULL;
+ retval = 1;
+ }
+
+ if(position && *before && *after)
+ {
+ /* Copy the data */
+ strncpy(*before, string, (int)(position-string));
+ (*before)[(int)(position-string)] = '\0';
+
+ strncpy(*after, position+strlen(sep), strlen(string)-(int)(position-string)-strlen(sep));
+ (*after)[strlen(string)-(position-string)-strlen(sep)] = '\0';
+
+ retval = 0;
+ }
+
+ return retval;
+}
+
+ /*@@
+ @routine Util_Strdup
+ @date Thu Mar 28 11:20:27 2000
+ @author Gerd Lanfermann
+ @desc
+ Homegrown ersion of strdup, since it's not guaranteed to be there.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+char *Util_Strdup(const char *s)
+{
+ char *retstr;
+
+ retstr = (char*) malloc((strlen(s)+1)*sizeof(char));
+
+ strcpy(retstr,s);
+
+ return retstr;
+}
+
+ /*@@
+ @routine Util_StrCmpi
+ @date Mon Jul 5 01:19:00 1999
+ @author Tom Goodale
+ @desc
+ Case independent strcmp
+ @enddesc
+ @calls
+ @calledby
+ @history
+ @hdate Wed Oct 13 15:30:57 1999 @hauthor Tom Goodale
+ @hdesc Checks the length of the two string first.
+ @endhistory
+
+@@*/
+int Util_StrCmpi(const char *string1, const char *string2)
+{
+ int retval;
+ int position;
+
+ retval = 0;
+
+ if(! retval)
+ {
+ for(position = 0;
+ string1[position] && string2[position];
+ position++)
+ {
+ if((retval = (tolower(string1[position]) - tolower(string2[position]))))
+ {
+ break;
+ }
+ }
+ }
+
+ if(! retval)
+ {
+ retval = strlen(string1) - strlen(string2);
+ }
+
+
+ return retval;
+}
+
+
+#ifdef TEST_Util_STRSEP
+
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ const char *argument;
+ char *delim;
+ const char *token;
+
+ if(argc < 3)
+ {
+ printf("Usage: %s <string> <delim>\n", argv[0]);
+ exit(1);
+ }
+
+ argument = argv[1];
+ delim = argv[2];
+
+ while((token = Util_StrSep(&argument, delim)))
+ {
+ printf("Token is '%s'\n", token);
+ }
+
+ if(argument - argv[1] < strlen(argv[1]))
+ {
+ printf("Remainder is '%s'\n", argument);
+ }
+
+ return 0;
+
+}
+
+#endif /*TEST_CCTK_STRSEP */
+
diff --git a/src/util/make.code.defn b/src/util/make.code.defn
index 5d74477b..26f791bc 100644
--- a/src/util/make.code.defn
+++ b/src/util/make.code.defn
@@ -11,4 +11,5 @@ StoreHandledData.c\
SKBinTree.c\
Hash.c\
Cache.c\
-Malloc.c
+Malloc.c\
+String.c