1 /* 2 * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 * 9 * $Id: string.h,v 1.36 2001/06/17 21:31:11 ca Exp $ 10 */ 11 12 /* 13 ** libsm string manipulation 14 */ 15 16 #ifndef SM_STRING_H 17 # define SM_STRING_H 18 19 # include <sm/gen.h> 20 # include <sm/varargs.h> 21 # include <string.h> /* strlc{py,at}, strerror */ 22 23 /* return number of bytes left in a buffer */ 24 #define SPACELEFT(buf, ptr) (sizeof buf - ((ptr) - buf)) 25 26 extern int PRINTFLIKE(3, 4) 27 sm_snprintf __P(( 28 char *, 29 size_t, 30 const char *, 31 ...)); 32 33 extern bool 34 sm_match __P(( 35 const char *_str, 36 const char *_pattern)); 37 38 extern char * 39 sm_strdup __P(( 40 char *)); 41 42 extern char * 43 sm_strndup_x __P(( 44 const char *_str, 45 size_t _len)); 46 47 /* for "normal" data (free'd before end of process) */ 48 # define sm_strdup_x(str) strcpy(sm_malloc_x(strlen(str) + 1), str) 49 50 /* for data that is supposed to be persistent. */ 51 # define sm_pstrdup_x(str) strcpy(sm_pmalloc_x(strlen(str) + 1), str) 52 53 # define sm_strdup_tagged_x(str, file, line, group) \ 54 strcpy(sm_malloc_tagged_x(strlen(str) + 1, file, line, group), str) 55 56 extern char * 57 sm_stringf_x __P(( 58 const char *_fmt, 59 ...)); 60 61 extern char * 62 sm_vstringf_x __P(( 63 const char *_fmt, 64 va_list _ap)); 65 66 extern size_t 67 sm_strlcpy __P(( 68 char *_dst, 69 const char *_src, 70 ssize_t _len)); 71 72 extern size_t 73 sm_strlcat __P(( 74 char *_dst, 75 const char *_src, 76 ssize_t _len)); 77 78 extern size_t 79 sm_strlcat2 __P(( 80 char *, 81 const char *, 82 const char *, 83 ssize_t)); 84 85 extern size_t 86 #ifdef __STDC__ 87 sm_strlcpyn(char *dst, ssize_t len, int n, ...); 88 #else /* __STDC__ */ 89 sm_strlcpyn __P((char *, 90 ssize_t, 91 int, 92 va_dcl)); 93 #endif /* __STDC__ */ 94 95 # if !HASSTRERROR 96 extern char * 97 strerror __P(( 98 int _errno)); 99 # endif /* !HASSTRERROR */ 100 101 extern int 102 sm_strrevcmp __P(( 103 const char *, 104 const char *)); 105 106 extern int 107 sm_strrevcasecmp __P(( 108 const char *, 109 const char *)); 110 111 extern int 112 sm_strcasecmp __P(( 113 const char *, 114 const char *)); 115 116 extern int 117 sm_strncasecmp __P(( 118 const char *, 119 const char *, 120 size_t)); 121 122 extern LONGLONG_T 123 sm_strtoll __P(( 124 const char *, 125 char**, int)); 126 127 extern ULONGLONG_T 128 sm_strtoull __P(( 129 const char *, 130 char**, int)); 131 132 extern void 133 stripquotes __P((char *)); 134 135 #endif /* SM_STRING_H */ 136