Changeset 11711
- Timestamp:
- Feb 8, 2007, 12:27:30 PM (19 years ago)
- Location:
- trunk/psLib/src/sys
- Files:
-
- 2 edited
-
psString.c (modified) (19 diffs)
-
psString.h (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sys/psString.c
r11686 r11711 13 13 * @author David Robbins, MHPCC 14 14 * 15 * @version $Revision: 1.5 1$ $Name: not supported by cvs2svn $16 * @date $Date: 2007-02-0 7 23:52:54$15 * @version $Revision: 1.52 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2007-02-08 22:27:30 $ 17 17 * 18 18 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 33 33 #include "psMemory.h" 34 34 35 36 35 static void stringFree(psString string) 37 36 { 38 // There is non dynamic allocated item 39 } 40 41 psString psStringAlloc(long nChar) 37 // this function is only nessicary so psMemCheckString has a function 38 // pointer address to test against 39 } 40 41 42 psString p_psStringAlloc(const char *file, 43 unsigned int lineno, 44 const char *func, 45 long nChar) 42 46 { 43 47 if (nChar < 1) { 44 48 return NULL; 45 49 } 46 psString string = psAlloc(nChar + 1); 50 51 psString string = p_psAlloc(file, lineno, func, nChar + 1); 47 52 psMemSetDeallocator(string, (psFreeFunc)stringFree); 53 48 54 return string; 49 55 } 50 56 57 51 58 bool psMemCheckString(psPtr ptr) 52 59 { 53 60 PS_ASSERT_PTR(ptr, false); 54 return ( psMemGetDeallocator(ptr) == (psFreeFunc)stringFree ); 55 } 56 57 psString psStringCopy(const char *string) 61 return (psMemGetDeallocator(ptr) == (psFreeFunc)stringFree); 62 } 63 64 65 psString p_psStringCopy(const char *file, 66 unsigned int lineno, 67 const char *func, 68 const char *string) 58 69 { 59 70 // Pass through NULL values! … … 61 72 return NULL; 62 73 } 63 psString output = psStringAlloc(strlen(string) + 1); // Output string 74 75 // Output string 76 psString output = p_psStringAlloc(file, lineno, func, strlen(string) + 1); 77 64 78 // Copy input string to memory just allocated 65 79 return strcpy(output, string); 66 80 } 67 81 68 psString psStringNCopy(const char *string, 69 unsigned int nChar) 82 83 psString p_psStringNCopy(const char *file, 84 unsigned int lineno, 85 const char *func, 86 const char *string, 87 unsigned int nChar) 70 88 { 71 89 PS_ASSERT_PTR_NON_NULL(string, NULL); … … 86 104 87 105 // Copy input string to memory allocated up to nChar characters 88 psString output = p sStringAlloc((size_t) nChar + 1);106 psString output = p_psStringAlloc(file, lineno, func, (size_t) nChar + 1); 89 107 output = strncpy(output, string, (size_t) nChar); 90 108 … … 96 114 } 97 115 98 ssize_t psStringAppend(char **dest, 99 const char *format, 100 ...) 116 117 ssize_t p_psStringAppend(const char *file, 118 unsigned int lineno, 119 const char *func, 120 char **dest, 121 const char *format, 122 ...) 101 123 { 102 124 PS_ASSERT_PTR_NON_NULL(dest, 0); … … 105 127 va_list ap; 106 128 va_start(ap, format); 107 ssize_t length = p sStringAppendV(dest, format, ap);129 ssize_t length = p_psStringAppendV(file, lineno, func, dest, format, ap); 108 130 va_end(ap); 109 131 … … 111 133 } 112 134 113 ssize_t psStringAppendV(char **dest, 114 const char *format, 115 va_list ap) 135 ssize_t p_psStringAppendV(const char *file, 136 unsigned int lineno, 137 const char *func, 138 char **dest, 139 const char *format, 140 va_list ap) 116 141 { 117 142 PS_ASSERT_PTR_NON_NULL(dest, 0); … … 144 169 // realloc string to string + tail + \0 145 170 if (*dest) { 146 *dest = p sRealloc(*dest, oldLength + tailLength + 1);171 *dest = p_psRealloc(file, lineno, func, *dest, oldLength + tailLength + 1); 147 172 } else { 148 *dest = p sStringAlloc(oldLength + tailLength + 1);173 *dest = p_psStringAlloc(file, lineno, func, oldLength + tailLength + 1); 149 174 } 150 175 … … 160 185 } 161 186 162 ssize_t psStringPrepend(char **dest, 163 const char *format, 164 ...) 187 188 ssize_t p_psStringPrepend(const char *file, 189 unsigned int lineno, 190 const char *func, 191 char **dest, 192 const char *format, 193 ...) 165 194 { 166 195 PS_ASSERT_PTR_NON_NULL(dest, 0); … … 169 198 va_list ap; 170 199 va_start(ap, format); 171 ssize_t length = p sStringPrependV(dest, format, ap);200 ssize_t length = p_psStringPrependV(file, lineno, func, dest, format, ap); 172 201 va_end(ap); 173 202 … … 175 204 } 176 205 177 ssize_t psStringPrependV(char **dest, 178 const char *format, 179 va_list ap) 206 207 ssize_t p_psStringPrependV(const char *file, 208 unsigned int lineno, 209 const char *func, 210 char **dest, 211 const char *format, 212 va_list ap) 180 213 { 181 214 PS_ASSERT_PTR_NON_NULL(dest, 0); … … 188 221 if (!*dest) { 189 222 // makes the string backup and concatination pointless 190 *dest = p sStringCopy("");223 *dest = p_psStringCopy(file, lineno, func, ""); 191 224 length = 0; 192 225 } else { … … 210 243 211 244 // backup original string 212 oldDest = p sStringCopy(*dest);245 oldDest = p_psStringCopy(file, lineno, func, *dest); 213 246 214 247 // new string length (sans \0) … … 216 249 217 250 // realloc string to head + string + \0 218 *dest = p sRealloc(*dest, length + 1);251 *dest = p_psRealloc(file, lineno, func, *dest, length + 1); 219 252 220 253 // copy the new head to the beginning of string … … 234 267 } 235 268 269 236 270 // split the string by the given splitters 237 271 // NULL input string returns empty (not NULL) list … … 276 310 return values; 277 311 } 312 278 313 279 314 // given the input string, search for all copies of the key, and replace with the replacement value … … 343 378 } 344 379 380 345 381 psArray *psStringSplitArray(const char *string, const char *splitters, bool multi) 346 382 { … … 352 388 } 353 389 390 354 391 #ifndef whitespace 355 392 #define whitespace(c) (((c) == ' ') || ((c) == '\t')) … … 376 413 return i; 377 414 } 415 416 378 417 /* 379 418 * Used by PS_FILE_LINE -
trunk/psLib/src/sys/psString.h
r11694 r11711 11 11 * @author Joshua Hoblitt, University of Hawaii 12 12 * 13 * @version $Revision: 1.3 7$ $Name: not supported by cvs2svn $14 * @date $Date: 2007-02-08 01:59:28$13 * @version $Revision: 1.38 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2007-02-08 22:27:30 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 39 39 #define PS_FILE_LINE p_psFileLine(__FILE__,__LINE__) 40 40 41 41 42 /** Allocates a new psString. 42 43 * 43 44 * @return psString: Newly allocated string of length n. 44 45 */ 46 #ifdef DOXYGEN 45 47 psString psStringAlloc( 46 48 long nChar ///< Size of psString to allocate. 47 49 ); 50 #else // ifdef DOXYGEN 51 psString p_psStringAlloc( 52 const char *file, ///< File of caller 53 unsigned int lineno, ///< Line number of caller 54 const char *func, ///< Function name of caller 55 long nChar ///< Size of psString to allocate. 56 ); 57 #define psStringAlloc(nChar) \ 58 p_psStringAlloc(__FILE__, __LINE__, __func__, nChar) 59 #endif // ifdef DOXYGEN 48 60 49 61 … … 68 80 * @return psString: Copy of input string 69 81 */ 82 #ifdef DOXYGEN 70 83 psString psStringCopy( 71 const char *string ///< Input string of characters to copy 72 ); 84 const char *string ///< Input string of characters to copy 85 ); 86 #else // ifdef DOXYGEN 87 psString p_psStringCopy( 88 const char *file, ///< File of caller 89 unsigned int lineno, ///< Line number of caller 90 const char *func, ///< Function name of caller 91 const char *string ///< Input string of characters to copy 92 ); 93 #define psStringCopy(string) \ 94 p_psStringCopy(__FILE__, __LINE__, __func__, string) 95 #endif // ifdef DOXYGEN 73 96 74 97 … … 85 108 * @return psString: Copy of input string 86 109 */ 110 #ifdef DOXYGEN 87 111 psString psStringNCopy( 88 112 const char *string, ///< Input string of characters to copy 89 113 unsigned int nChar ///< Number of bytes to allocate for string copy 90 114 ); 115 #else // ifdef DOXYGEN 116 psString p_psStringNCopy( 117 const char *file, ///< File of caller 118 unsigned int lineno, ///< Line number of caller 119 const char *func, ///< Function name of caller 120 const char *string, ///< Input string of characters to copy 121 unsigned int nChar ///< Number of bytes to allocate for string copy 122 ); 123 #define psStringNCopy(string, nChar) \ 124 p_psStringNCopy(__FILE__, __LINE__, __func__, string, nChar) 125 #endif // ifdef DOXYGEN 91 126 92 127 … … 98 133 * @return ssize_t: The length of the new string (excluding '\0') 99 134 */ 135 #ifdef DOXYGEN 100 136 ssize_t psStringAppend( 137 char **dest, ///< existing string 138 const char *format, ///< format to append 139 ... ///< format arguments 140 ); 141 #else // ifdef DOXYGEN 142 ssize_t p_psStringAppend( 143 const char *file, ///< File of caller 144 unsigned int lineno, ///< Line number of caller 145 const char *func, ///< Function name of caller 101 146 char **dest, ///< existing string 102 147 const char *format, ///< format to append 103 148 ... ///< format arguments 104 149 #ifdef __GNUC__ 105 ) __attribute__((format(printf, 2, 3))); 106 #else // __GNUC__ 107 ); 108 #endif // __GNUC__ 150 ) __attribute__((format(printf, 5, 6))); 151 #else // ifdef __GNUC__ 152 ); 153 #endif // ifdef __GNUC__ 154 #define psStringAppend(dest, ...) \ 155 p_psStringAppend(__FILE__, __LINE__, __func__, dest, __VA_ARGS__) 156 #endif // ifdef DOXYGEN 109 157 110 158 … … 116 164 * @return ssize_t: The length of the new string (excluding '\0') 117 165 */ 166 #ifdef DOXYGEN 118 167 ssize_t psStringAppendV( 119 168 char **dest, ///< existing string … … 121 170 va_list ap ///< va_list of format arguments 122 171 ); 172 #else // ifdef DOXYGEN 173 ssize_t p_psStringAppendV( 174 const char *file, ///< File of caller 175 unsigned int lineno, ///< Line number of caller 176 const char *func, ///< Function name of caller 177 char **dest, ///< existing string 178 const char *format, ///< format to append 179 va_list ap ///< va_list of format arguments 180 ); 181 #define psStringAppendV(dest, format, ap) \ 182 p_psStringAppendV(__FILE__, __LINE__, __func__, dest, format, ap) 183 #endif // ifdef DOXYGEN 123 184 124 185 … … 130 191 * @return ssize_t: The length of the new string (excluding '\0') 131 192 */ 193 #ifdef DOXYGEN 132 194 ssize_t psStringPrepend( 195 char **dest, ///< existing string 196 const char *format, ///< format to append 197 ... ///< format arguments 198 ); 199 #else // ifdef DOXYGEN 200 ssize_t p_psStringPrepend( 201 const char *file, ///< File of caller 202 unsigned int lineno, ///< Line number of caller 203 const char *func, ///< Function name of caller 133 204 char **dest, ///< existing string 134 205 const char *format, ///< format to append 135 206 ... ///< format arguments 136 207 #ifdef __GNUC__ 137 ) __attribute__((format(printf, 2, 3))); 138 # else // __GNUC__ 139 ); 140 #endif // __GNUC__ 208 ) __attribute__((format(printf, 5, 6))); 209 # else // ifdef __GNUC__ 210 ); 211 #endif // ifdef __GNUC__ 212 #define psStringPrepend(dest, ...) \ 213 p_psStringPrepend(__FILE__, __LINE__, __func__, dest, __VA_ARGS__) 214 #endif // ifdef DOXYGEN 141 215 142 216 … … 148 222 * @return ssize_t: The length of the new string (excluding '\0') 149 223 */ 224 #ifdef DOXYGEN 150 225 ssize_t psStringPrependV( 151 226 char **dest, ///< existing string … … 153 228 va_list ap ///< va_list of format arguments 154 229 ); 230 #else // ifdef DOXYGEN 231 ssize_t p_psStringPrependV( 232 const char *file, ///< File of caller 233 unsigned int lineno, ///< Line number of caller 234 const char *func, ///< Function name of caller 235 char **dest, ///< existing string 236 const char *format, ///< format to append 237 va_list ap ///< va_list of format arguments 238 ); 239 #define psStringPrependV(dest, format, ap) \ 240 p_psStringPrependV(__FILE__, __LINE__, __func__, dest, format, ap) 241 #endif // ifdef DOXYGEN 155 242 156 243
Note:
See TracChangeset
for help on using the changeset viewer.
