Changeset 10446 for trunk/psLib/src/sys/psString.c
- Timestamp:
- Dec 4, 2006, 12:15:04 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/sys/psString.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sys/psString.c
r10286 r10446 13 13 * @author David Robbins, MHPCC 14 14 * 15 * @version $Revision: 1.4 6$ $Name: not supported by cvs2svn $16 * @date $Date: 2006-1 1-29 21:33:09$15 * @version $Revision: 1.47 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2006-12-04 22:15:04 $ 17 17 * 18 18 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 275 275 // given the input string, search for all copies of the key, and replace with the replacement value 276 276 // the input string may be freed if not needed 277 psString psStringSubstitute(psString input, 278 const char *replace, 279 const char *key) 280 { 277 ssize_t psStringSubstitute(psString *input, 278 const char *replace, 279 const char *key) 280 { 281 PS_ASSERT_PTR_NON_NULL(input, 0); 282 281 283 // Empty input gives empty output 282 if (! input || strlen(input) == 0) {283 return input;284 if (!*input || strlen(*input) == 0) { 285 return 0; 284 286 } 285 287 // No key gives the same as the input 286 288 if (!key || strlen(key) == 0) { 287 return input;288 } 289 if (!psMemCheckString( input)) {289 return strlen(*input); 290 } 291 if (!psMemCheckString(*input)) { 290 292 psError(PS_ERR_BAD_PARAMETER_TYPE, true, "This function requires a psString as input.\n"); 291 return NULL;293 return 0; 292 294 } 293 295 … … 302 304 } 303 305 304 char *search = input;// Search this string306 char *search = *input; // Search this string 305 307 while (true) { 306 308 char *found = strstr(search, key); // Found occurence of the key 307 309 if (!found) { 308 return input;310 return strlen(*input); 309 311 } 310 312 … … 313 315 314 316 // this is safe since we will subtract strlen(key) elements from input 315 psString output = psStringAlloc(strlen( input) + replaceLength + 1); // Output string316 int numChar = found - input; // Number of characters to copy317 psString output = psStringAlloc(strlen(*input) + replaceLength + 1); // Output string 318 int numChar = found - *input; // Number of characters to copy 317 319 318 320 // copy the first segement into 'output' 319 strncpy(output, input, numChar);321 strncpy(output, *input, numChar); 320 322 321 323 // copy the key replacement to the start of the key … … 328 330 strcpy(output + numChar, found + strlen(key)); 329 331 330 psFree( input);331 input = output;332 psFree(*input); 333 *input = output; 332 334 search = output + numChar; 333 335 } 334 336 335 337 psAbort(__func__, "Should never get here.\n"); 336 return NULL;338 return 0; 337 339 } 338 340
Note:
See TracChangeset
for help on using the changeset viewer.
