Changeset 3866 for trunk/psLib/src/sysUtils
- Timestamp:
- May 6, 2005, 8:15:25 AM (21 years ago)
- Location:
- trunk/psLib/src/sysUtils
- Files:
-
- 2 edited
-
psString.c (modified) (2 diffs)
-
psString.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sysUtils/psString.c
r3264 r3866 9 9 * @author Eric Van Alst, MHPCC 10 10 * 11 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2005-0 2-17 19:26:24$11 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-05-06 18:15:25 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 55 55 return returnValue; 56 56 } 57 58 ssize_t psStringAppend(char **dest, const char *format, ...) 59 { 60 va_list args; 61 size_t length; // complete string length (sans \0) 62 size_t oldLength; // original string length (sans \0) 63 ssize_t tailLength; // length of string to append 64 65 if (!*dest) { 66 *dest = psStringCopy(""); 67 oldLength = 0; 68 } else { 69 // size of existing string 70 oldLength = strlen(*dest); 71 } 72 73 // find the size of the string to append 74 va_start(args, format); 75 // C99 guarentees vsnprintf() to work as expected with size = 0 76 tailLength = vsnprintf(*dest, 0, format, args); 77 va_end(args); 78 79 // if the new tail is zero length, return the length of the old string. if 80 // it's a format error, return the error code. 81 if (tailLength < 1) { 82 return tailLength == 0 ? oldLength : tailLength; 83 } 84 85 // new string length (sans \0) 86 length = oldLength + tailLength; 87 88 // realloc string to string + tail + \0 89 *dest = psRealloc(*dest, length + 1); 90 91 // append tail + \0 92 va_start(args, format); 93 vsnprintf(*dest + oldLength, tailLength + 1, format, args); 94 va_end(args); 95 96 return length; 97 } 98 99 ssize_t psStringPrepend(char **dest, const char *format, ...) 100 { 101 va_list args; 102 size_t length; // complete string length (sans \0) 103 ssize_t headLength; // length of string to prepend 104 char *oldDest; // copy of original string 105 106 if (!*dest) { 107 // makes the string backup and concatination pointless 108 *dest = psStringCopy(""); 109 length = 0; 110 } else { 111 // size of existing string 112 length = strlen(*dest); 113 } 114 115 // find the size of the string to prepend 116 va_start(args, format); 117 // C99 guarentees vsnprintf() to work as expected with size = 0 118 headLength = vsnprintf(*dest, 0, format, args); 119 va_end(args); 120 121 // if the new head is zero length, return the length of the old string. if 122 // it's a format error, return the error code. 123 if (headLength < 1) { 124 return headLength == 0 ? length : headLength; 125 } 126 127 // backup original string 128 oldDest = psStringCopy(*dest); 129 130 // new string length (sans \0) 131 length += headLength; 132 133 // realloc string to head + string + \0 134 *dest = psRealloc(*dest, length + 1); 135 136 // copy the new head to the beginning of string 137 va_start(args, format); 138 vsnprintf(*dest, length + 1, format, args); 139 va_end(args); 140 141 // append the original string 142 strncat(*dest, oldDest, length + 1); 143 144 psFree(oldDest); 145 146 return length; 147 } -
trunk/psLib/src/sysUtils/psString.h
r3264 r3866 10 10 * @author Eric Van Alst, MHPCC 11 11 * 12 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-0 2-17 19:26:24$12 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-05-06 18:15:25 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 19 19 #define PS_STRING_H 20 20 21 #include <sys/types.h> 21 22 #include "psType.h" 22 23 … … 67 68 ); 68 69 70 /** Appends a format onto a string 71 * 72 * This function shall allocate a new string if dest is NULL. dest shall be 73 * automatically extended to the size of the new string. 74 * 75 * @return The length of the new string (excluding '\0') 76 */ 77 78 ssize_t psStringAppend( 79 char **dest, ///< existing string 80 const char *format, ///< format to append 81 ... ///< format arguments 82 ); 83 84 /** Prepends a format onto a string 85 * 86 * This function shall allocate a new string if dest is NULL. dest shall be 87 * automatically extended to the size of the new string. 88 * 89 * @return The length of the new string (excluding '\0') 90 */ 91 92 ssize_t psStringPrepend( 93 char **dest, ///< existing string 94 const char *format, ///< format to append 95 ... ///< format arguments 96 ); 97 69 98 /* @} */// Doxygen - End of SystemGroup Functions 70 99
Note:
See TracChangeset
for help on using the changeset viewer.
