Return to string.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / isc-dhcp |
1.1 ! misho 1: /* ! 2: * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") ! 3: * Copyright (C) 2000, 2001, 2003 Internet Software Consortium. ! 4: * ! 5: * Permission to use, copy, modify, and/or distribute this software for any ! 6: * purpose with or without fee is hereby granted, provided that the above ! 7: * copyright notice and this permission notice appear in all copies. ! 8: * ! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH ! 10: * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ! 11: * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, ! 12: * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM ! 13: * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE ! 14: * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ! 15: * PERFORMANCE OF THIS SOFTWARE. ! 16: */ ! 17: ! 18: /* $Id: string.h,v 1.2 2007-11-16 11:04:11 shane Exp $ */ ! 19: ! 20: #ifndef ISC_STRING_H ! 21: #define ISC_STRING_H 1 ! 22: ! 23: /*! \file isc/string.h */ ! 24: ! 25: #include <isc-dhcp/formatcheck.h> ! 26: #include <isc-dhcp/int.h> ! 27: #include <isc-dhcp/lang.h> ! 28: /*#include <isc-dhcp/platform.h>*/ ! 29: #include <isc-dhcp/types.h> ! 30: #include <isc-dhcp/result.h> ! 31: ! 32: #include <string.h> ! 33: ! 34: #ifdef ISC_PLATFORM_HAVESTRINGSH ! 35: #include <strings.h> ! 36: #endif ! 37: ! 38: #define ISC_STRING_MAGIC 0x5e ! 39: ! 40: ISC_LANG_BEGINDECLS ! 41: ! 42: isc_uint64_t ! 43: isc_string_touint64(char *source, char **endp, int base); ! 44: /*%< ! 45: * Convert the string pointed to by 'source' to isc_uint64_t. ! 46: * ! 47: * On successful conversion 'endp' points to the first character ! 48: * after conversion is complete. ! 49: * ! 50: * 'base': 0 or 2..36 ! 51: * ! 52: * If base is 0 the base is computed from the string type. ! 53: * ! 54: * On error 'endp' points to 'source'. ! 55: */ ! 56: ! 57: isc_result_t ! 58: isc_string_copy(char *target, size_t size, const char *source); ! 59: /* ! 60: * Copy the string pointed to by 'source' to 'target' which is a ! 61: * pointer to a string of at least 'size' bytes. ! 62: * ! 63: * Requires: ! 64: * 'target' is a pointer to a char[] of at least 'size' bytes. ! 65: * 'size' an integer > 0. ! 66: * 'source' == NULL or points to a NUL terminated string. ! 67: * ! 68: * Ensures: ! 69: * If result == ISC_R_SUCCESS ! 70: * 'target' will be a NUL terminated string of no more ! 71: * than 'size' bytes (including NUL). ! 72: * ! 73: * If result == ISC_R_NOSPACE ! 74: * 'target' is undefined. ! 75: * ! 76: * Returns: ! 77: * ISC_R_SUCCESS -- 'source' was successfully copied to 'target'. ! 78: * ISC_R_NOSPACE -- 'source' could not be copied since 'target' ! 79: * is too small. ! 80: */ ! 81: ! 82: void ! 83: isc_string_copy_truncate(char *target, size_t size, const char *source); ! 84: /* ! 85: * Copy the string pointed to by 'source' to 'target' which is a ! 86: * pointer to a string of at least 'size' bytes. ! 87: * ! 88: * Requires: ! 89: * 'target' is a pointer to a char[] of at least 'size' bytes. ! 90: * 'size' an integer > 0. ! 91: * 'source' == NULL or points to a NUL terminated string. ! 92: * ! 93: * Ensures: ! 94: * 'target' will be a NUL terminated string of no more ! 95: * than 'size' bytes (including NUL). ! 96: */ ! 97: ! 98: isc_result_t ! 99: isc_string_append(char *target, size_t size, const char *source); ! 100: /* ! 101: * Append the string pointed to by 'source' to 'target' which is a ! 102: * pointer to a NUL terminated string of at least 'size' bytes. ! 103: * ! 104: * Requires: ! 105: * 'target' is a pointer to a NUL terminated char[] of at ! 106: * least 'size' bytes. ! 107: * 'size' an integer > 0. ! 108: * 'source' == NULL or points to a NUL terminated string. ! 109: * ! 110: * Ensures: ! 111: * If result == ISC_R_SUCCESS ! 112: * 'target' will be a NUL terminated string of no more ! 113: * than 'size' bytes (including NUL). ! 114: * ! 115: * If result == ISC_R_NOSPACE ! 116: * 'target' is undefined. ! 117: * ! 118: * Returns: ! 119: * ISC_R_SUCCESS -- 'source' was successfully appended to 'target'. ! 120: * ISC_R_NOSPACE -- 'source' could not be appended since 'target' ! 121: * is too small. ! 122: */ ! 123: ! 124: void ! 125: isc_string_append_truncate(char *target, size_t size, const char *source); ! 126: /* ! 127: * Append the string pointed to by 'source' to 'target' which is a ! 128: * pointer to a NUL terminated string of at least 'size' bytes. ! 129: * ! 130: * Requires: ! 131: * 'target' is a pointer to a NUL terminated char[] of at ! 132: * least 'size' bytes. ! 133: * 'size' an integer > 0. ! 134: * 'source' == NULL or points to a NUL terminated string. ! 135: * ! 136: * Ensures: ! 137: * 'target' will be a NUL terminated string of no more ! 138: * than 'size' bytes (including NUL). ! 139: */ ! 140: ! 141: isc_result_t ! 142: isc_string_printf(char *target, size_t size, const char *format, ...) ! 143: ISC_FORMAT_PRINTF(3, 4); ! 144: /* ! 145: * Print 'format' to 'target' which is a pointer to a string of at least ! 146: * 'size' bytes. ! 147: * ! 148: * Requires: ! 149: * 'target' is a pointer to a char[] of at least 'size' bytes. ! 150: * 'size' an integer > 0. ! 151: * 'format' == NULL or points to a NUL terminated string. ! 152: * ! 153: * Ensures: ! 154: * If result == ISC_R_SUCCESS ! 155: * 'target' will be a NUL terminated string of no more ! 156: * than 'size' bytes (including NUL). ! 157: * ! 158: * If result == ISC_R_NOSPACE ! 159: * 'target' is undefined. ! 160: * ! 161: * Returns: ! 162: * ISC_R_SUCCESS -- 'format' was successfully printed to 'target'. ! 163: * ISC_R_NOSPACE -- 'format' could not be printed to 'target' since it ! 164: * is too small. ! 165: */ ! 166: ! 167: void ! 168: isc_string_printf_truncate(char *target, size_t size, const char *format, ...) ! 169: ISC_FORMAT_PRINTF(3, 4); ! 170: /* ! 171: * Print 'format' to 'target' which is a pointer to a string of at least ! 172: * 'size' bytes. ! 173: * ! 174: * Requires: ! 175: * 'target' is a pointer to a char[] of at least 'size' bytes. ! 176: * 'size' an integer > 0. ! 177: * 'format' == NULL or points to a NUL terminated string. ! 178: * ! 179: * Ensures: ! 180: * 'target' will be a NUL terminated string of no more ! 181: * than 'size' bytes (including NUL). ! 182: */ ! 183: ! 184: ! 185: /* ! 186: char * ! 187: isc_string_regiondup(isc_mem_t *mctx, const isc_region_t *source); ! 188: */ ! 189: /* ! 190: * Copy the region pointed to by r to a NUL terminated string ! 191: * allocated from the memory context pointed to by mctx. ! 192: * ! 193: * The result should be deallocated using isc_mem_free() ! 194: * ! 195: * Requires: ! 196: * 'mctx' is a point to a valid memory context. ! 197: * 'source' is a pointer to a valid region. ! 198: * ! 199: * Returns: ! 200: * a pointer to a NUL terminated string or ! 201: * NULL if memory for the copy could not be allocated ! 202: * ! 203: */ ! 204: ! 205: char * ! 206: isc_string_separate(char **stringp, const char *delim); ! 207: ! 208: #ifdef ISC_PLATFORM_NEEDSTRSEP ! 209: #define strsep isc_string_separate ! 210: #endif ! 211: ! 212: #ifdef ISC_PLATFORM_NEEDMEMMOVE ! 213: #define memmove(a,b,c) bcopy(b,a,c) ! 214: #endif ! 215: ! 216: size_t ! 217: isc_string_strlcpy(char *dst, const char *src, size_t size); ! 218: ! 219: ! 220: #ifdef ISC_PLATFORM_NEEDSTRLCPY ! 221: #define strlcpy isc_string_strlcpy ! 222: #endif ! 223: ! 224: ! 225: size_t ! 226: isc_string_strlcat(char *dst, const char *src, size_t size); ! 227: ! 228: #ifdef ISC_PLATFORM_NEEDSTRLCAT ! 229: #define strlcat isc_string_strlcat ! 230: #endif ! 231: ! 232: ISC_LANG_ENDDECLS ! 233: ! 234: #endif /* ISC_STRING_H */