1/* 2 * "$Id: string-private.h 11093 2013-07-03 20:48:42Z msweet $" 3 * 4 * Private string definitions for CUPS. 5 * 6 * Copyright 2007-2013 by Apple Inc. 7 * Copyright 1997-2006 by Easy Software Products. 8 * 9 * These coded instructions, statements, and computer programs are the 10 * property of Apple Inc. and are protected by Federal copyright 11 * law. Distribution and use rights are outlined in the file "LICENSE.txt" 12 * which should have been included with this file. If this file is 13 * file is missing or damaged, see the license at "http://www.cups.org/". 14 * 15 * This file is subject to the Apple OS-Developed Software exception. 16 */ 17 18#ifndef _CUPS_STRING_PRIVATE_H_ 19# define _CUPS_STRING_PRIVATE_H_ 20 21/* 22 * Include necessary headers... 23 */ 24 25# include <stdio.h> 26# include <stdlib.h> 27# include <stdarg.h> 28# include <ctype.h> 29# include <errno.h> 30# include <locale.h> 31 32# include "config.h" 33 34# ifdef HAVE_STRING_H 35# include <string.h> 36# endif /* HAVE_STRING_H */ 37 38# ifdef HAVE_STRINGS_H 39# include <strings.h> 40# endif /* HAVE_STRINGS_H */ 41 42# ifdef HAVE_BSTRING_H 43# include <bstring.h> 44# endif /* HAVE_BSTRING_H */ 45 46 47/* 48 * C++ magic... 49 */ 50 51# ifdef __cplusplus 52extern "C" { 53# endif /* __cplusplus */ 54 55 56/* 57 * String pool structures... 58 */ 59 60# define _CUPS_STR_GUARD 0x12344321 61 62typedef struct _cups_sp_item_s /**** String Pool Item ****/ 63{ 64# ifdef DEBUG_GUARDS 65 unsigned int guard; /* Guard word */ 66# endif /* DEBUG_GUARDS */ 67 unsigned int ref_count; /* Reference count */ 68 char str[1]; /* String */ 69} _cups_sp_item_t; 70 71 72/* 73 * Replacements for the ctype macros that are not affected by locale, since we 74 * really only care about testing for ASCII characters when parsing files, etc. 75 * 76 * The _CUPS_INLINE definition controls whether we get an inline function body, 77 * and external function body, or an external definition. 78 */ 79 80# if defined(__GNUC__) || __STDC_VERSION__ >= 199901L 81# define _CUPS_INLINE static inline 82# elif defined(_MSC_VER) 83# define _CUPS_INLINE static __inline 84# elif defined(_CUPS_STRING_C_) 85# define _CUPS_INLINE 86# endif /* __GNUC__ || __STDC_VERSION__ */ 87 88# ifdef _CUPS_INLINE 89_CUPS_INLINE int /* O - 1 on match, 0 otherwise */ 90_cups_isalnum(int ch) /* I - Character to test */ 91{ 92 return ((ch >= '0' && ch <= '9') || 93 (ch >= 'A' && ch <= 'Z') || 94 (ch >= 'a' && ch <= 'z')); 95} 96 97_CUPS_INLINE int /* O - 1 on match, 0 otherwise */ 98_cups_isalpha(int ch) /* I - Character to test */ 99{ 100 return ((ch >= 'A' && ch <= 'Z') || 101 (ch >= 'a' && ch <= 'z')); 102} 103 104_CUPS_INLINE int /* O - 1 on match, 0 otherwise */ 105_cups_islower(int ch) /* I - Character to test */ 106{ 107 return (ch >= 'a' && ch <= 'z'); 108} 109 110_CUPS_INLINE int /* O - 1 on match, 0 otherwise */ 111_cups_isspace(int ch) /* I - Character to test */ 112{ 113 return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' || 114 ch == '\v'); 115} 116 117_CUPS_INLINE int /* O - 1 on match, 0 otherwise */ 118_cups_isupper(int ch) /* I - Character to test */ 119{ 120 return (ch >= 'A' && ch <= 'Z'); 121} 122 123_CUPS_INLINE int /* O - Converted character */ 124_cups_tolower(int ch) /* I - Character to convert */ 125{ 126 return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch); 127} 128 129_CUPS_INLINE int /* O - Converted character */ 130_cups_toupper(int ch) /* I - Character to convert */ 131{ 132 return (_cups_islower(ch) ? ch - 'a' + 'A' : ch); 133} 134# else 135extern int _cups_isalnum(int ch); 136extern int _cups_isalpha(int ch); 137extern int _cups_islower(int ch); 138extern int _cups_isspace(int ch); 139extern int _cups_isupper(int ch); 140extern int _cups_tolower(int ch); 141extern int _cups_toupper(int ch); 142# endif /* _CUPS_INLINE */ 143 144 145/* 146 * Prototypes... 147 */ 148 149extern void _cups_strcpy(char *dst, const char *src); 150 151# ifndef HAVE_STRDUP 152extern char *_cups_strdup(const char *); 153# define strdup _cups_strdup 154# endif /* !HAVE_STRDUP */ 155 156extern int _cups_strcasecmp(const char *, const char *); 157 158extern int _cups_strncasecmp(const char *, const char *, size_t n); 159 160# ifndef HAVE_STRLCAT 161extern size_t _cups_strlcat(char *, const char *, size_t); 162# define strlcat _cups_strlcat 163# endif /* !HAVE_STRLCAT */ 164 165# ifndef HAVE_STRLCPY 166extern size_t _cups_strlcpy(char *, const char *, size_t); 167# define strlcpy _cups_strlcpy 168# endif /* !HAVE_STRLCPY */ 169 170# ifndef HAVE_SNPRINTF 171extern int _cups_snprintf(char *, size_t, const char *, ...) 172 __attribute__ ((__format__ (__printf__, 3, 4))); 173# define snprintf _cups_snprintf 174# endif /* !HAVE_SNPRINTF */ 175 176# ifndef HAVE_VSNPRINTF 177extern int _cups_vsnprintf(char *, size_t, const char *, va_list); 178# define vsnprintf _cups_vsnprintf 179# endif /* !HAVE_VSNPRINTF */ 180 181/* 182 * String pool functions... 183 */ 184 185extern char *_cupsStrAlloc(const char *s); 186extern void _cupsStrFlush(void); 187extern void _cupsStrFree(const char *s); 188extern char *_cupsStrRetain(const char *s); 189extern size_t _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes); 190 191 192/* 193 * Floating point number functions... 194 */ 195 196extern char *_cupsStrFormatd(char *buf, char *bufend, double number, 197 struct lconv *loc); 198extern double _cupsStrScand(const char *buf, char **bufptr, 199 struct lconv *loc); 200 201 202/* 203 * C++ magic... 204 */ 205 206# ifdef __cplusplus 207} 208# endif /* __cplusplus */ 209 210#endif /* !_CUPS_STRING_H_ */ 211 212/* 213 * End of "$Id: string-private.h 11093 2013-07-03 20:48:42Z msweet $". 214 */ 215