From df8254a5fa36257630ddb9d8a9de5ac2980d6ab4 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Wed, 18 Aug 2010 02:10:23 +0000 Subject: r13983@gauss (orig r1241): gdr | 2009-07-22 15:41:19 -0500 Create jap-sandbox. r14019@gauss (orig r1258): alfredoport | 2009-08-18 19:48:31 -0500 Sync with trunk r14021@gauss (orig r1260): alfredoport | 2009-08-19 19:09:52 -0500 Update branch pre-merge r14960@gauss (orig r1681): alfredoport | 2010-07-12 20:43:04 -0500 Add some string manipulation functions and documentation r14982@gauss (orig r1697): alfredoport | 2010-07-23 20:12:44 -0500 Sync with trunk r14994@gauss (orig r1709): gdr | 2010-07-25 21:25:44 -0500 * src/lib/cfuns-c.c (oa_strcat): Document and tidy. r15021@gauss (orig r1733): alfredoport | 2010-08-01 19:25:18 -0500 Sync with trunk r15022@gauss (orig r1734): alfredoport | 2010-08-03 23:35:18 -0500 Solve compiling issues r15054@gauss (orig r1759): alfredoport | 2010-08-16 19:39:10 -0500 Sync with trunk r15056@gauss (orig r1761): gdr | 2010-08-17 19:11:08 -0500 Regenerate configure without presea r15057@gauss (orig r1762): gdr | 2010-08-17 19:13:17 -0500 Link htserach with a C++ linker. r15058@gauss (orig r1763): gdr | 2010-08-17 20:24:17 -0500 Massage htsearch. r15059@gauss (orig r1764): gdr | 2010-08-17 20:51:59 -0500 * hyper/htsearch.cc: Rename from htsearch.c to avoid confusions. r15060@gauss (orig r1765): gdr | 2010-08-17 21:04:12 -0500 * config/open-axiom.m4 (OPENAXIOM_HOST_PROGS): Don't check for awk anymore. --- src/lib/cfuns-c.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/cfuns-c.c b/src/lib/cfuns-c.c index e8f2562b..62d401dd 100644 --- a/src/lib/cfuns-c.c +++ b/src/lib/cfuns-c.c @@ -2,7 +2,7 @@ Copyright (C) 1991-2002, The Numerical Algorithms Group Ltd. All rights reserved. - Copyright (C) 2007-2009, Gabriel Dos Reis. + Copyright (C) 2007-2010, Gabriel Dos Reis. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -544,6 +544,22 @@ oa_concatenate_string(const char* lhs, const char* rhs) } } +/* Return a string object that is the result of catenating the strings + designated by `left' and `right'. */ +OPENAXIOM_EXPORT const char* +oa_strcat(const char* left, const char* right) +{ + int left_size = strlen(left); + int right_size = strlen(right); + int size = left_size + right_size; + char* buffer = malloc(size + 1); + + memcpy(buffer, left, left_size); + memcpy(buffer + left_size, right, right_size); + buffer[size] = '\0'; + return buffer; +} + /* Return the value of an environment variable. */ OPENAXIOM_EXPORT char* oa_getenv(const char* var) @@ -811,3 +827,50 @@ oa_spawn(openaxiom_process* proc, openaxiom_spawn_flags flags) return proc->id; #endif } + +OPENAXIOM_EXPORT char* +oa_substr(const char* str, const size_t begin, const size_t end) +{ + char* substring; + int len; + + if (str == NULL || strlen(str) == 0 || + strlen(str) < begin || end >= strlen(str) || + begin > end || begin < 0 || end < 0) + return NULL; + + len = (end - begin) + 2; + substring = malloc(len * sizeof(char)); + memset(substring,'\0',len); + memcpy(substring, str+begin, len-1); + + return substring; +} + +OPENAXIOM_EXPORT char** +oa_split(const char* sequence, const char* delimiter, int* size) +{ + int sequence_length = 0, newsize = 0; + char* token; + char** tokens = NULL; + char* sequence_copy; + + sequence_length = strlen(sequence); + sequence_copy = (char*) malloc((sequence_length + 1) * sizeof(char*)); + strcpy(sequence_copy,sequence); + sequence_copy[sequence_length] = '\0'; + + token = strtok(sequence_copy, delimiter); + while (token != NULL) { + + tokens = (char**) realloc(tokens,(newsize + 1) * sizeof(char*)); + tokens[newsize] = token; + newsize++; + token = strtok (NULL, delimiter); + } + + *size = newsize; + + return tokens; +} + -- cgit v1.2.3