]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/string-private.h
Update usage info.
[thirdparty/cups.git] / cups / string-private.h
index d542d89afe7166748ef7155800d2882237a66cf6..e1ae603a51e5d9bed01f0f29a18c43286de76935 100644 (file)
@@ -1,18 +1,11 @@
 /*
- * "$Id$"
+ * Private string definitions for CUPS.
  *
- *   Private string definitions for CUPS.
+ * Copyright © 2007-2018 by Apple Inc.
+ * Copyright © 1997-2006 by Easy Software Products.
  *
- *   Copyright 2007-2010 by Apple Inc.
- *   Copyright 1997-2006 by Easy Software Products.
- *
- *   These coded instructions, statements, and computer programs are the
- *   property of Apple Inc. and are protected by Federal copyright
- *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
- *   which should have been included with this file.  If this file is
- *   file is missing or damaged, see the license at "http://www.cups.org/".
- *
- *   This file is subject to the Apple OS-Developed Software exception.
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
  */
 
 #ifndef _CUPS_STRING_PRIVATE_H_
  * Include necessary headers...
  */
 
+#  include "config.h"
 #  include <stdio.h>
 #  include <stdlib.h>
 #  include <stdarg.h>
 #  include <ctype.h>
 #  include <errno.h>
 #  include <locale.h>
+#  include <time.h>
 
-#  include "config.h"
+#  include <cups/versioning.h>
 
 #  ifdef HAVE_STRING_H
 #    include <string.h>
 #    include <bstring.h>
 #  endif /* HAVE_BSTRING_H */
 
-
-/*
- * Stuff for WIN32 and OS/2...
- */
-
-#  if defined(WIN32) || defined(__EMX__)
-#    define strcasecmp _stricmp
-#    define strncasecmp        _strnicmp
-#  endif /* WIN32 || __EMX__ */
+#  if defined(_WIN32) && !defined(__CUPS_SSIZE_T_DEFINED)
+#    define __CUPS_SSIZE_T_DEFINED
+#    include <stddef.h>
+/* Windows does not support the ssize_t type, so map it to long... */
+typedef long ssize_t;                  /* @private@ */
+#  endif /* _WIN32 && !__CUPS_SSIZE_T_DEFINED */
 
 
 /*
@@ -79,48 +71,112 @@ typedef struct _cups_sp_item_s             /**** String Pool Item ****/
 } _cups_sp_item_t;
 
 
+/*
+ * Replacements for the ctype macros that are not affected by locale, since we
+ * really only care about testing for ASCII characters when parsing files, etc.
+ *
+ * The _CUPS_INLINE definition controls whether we get an inline function body,
+ * and external function body, or an external definition.
+ */
+
+#  if defined(__GNUC__) || __STDC_VERSION__ >= 199901L
+#    define _CUPS_INLINE static inline
+#  elif defined(_MSC_VER)
+#    define _CUPS_INLINE static __inline
+#  elif defined(_CUPS_STRING_C_)
+#    define _CUPS_INLINE
+#  endif /* __GNUC__ || __STDC_VERSION__ */
+
+#  ifdef _CUPS_INLINE
+_CUPS_INLINE int                       /* O - 1 on match, 0 otherwise */
+_cups_isalnum(int ch)                  /* I - Character to test */
+{
+  return ((ch >= '0' && ch <= '9') ||
+          (ch >= 'A' && ch <= 'Z') ||
+          (ch >= 'a' && ch <= 'z'));
+}
+
+_CUPS_INLINE int                       /* O - 1 on match, 0 otherwise */
+_cups_isalpha(int ch)                  /* I - Character to test */
+{
+  return ((ch >= 'A' && ch <= 'Z') ||
+          (ch >= 'a' && ch <= 'z'));
+}
+
+_CUPS_INLINE int                       /* O - 1 on match, 0 otherwise */
+_cups_islower(int ch)                  /* I - Character to test */
+{
+  return (ch >= 'a' && ch <= 'z');
+}
+
+_CUPS_INLINE int                       /* O - 1 on match, 0 otherwise */
+_cups_isspace(int ch)                  /* I - Character to test */
+{
+  return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch == '\t' ||
+          ch == '\v');
+}
+
+_CUPS_INLINE int                       /* O - 1 on match, 0 otherwise */
+_cups_isupper(int ch)                  /* I - Character to test */
+{
+  return (ch >= 'A' && ch <= 'Z');
+}
+
+_CUPS_INLINE int                       /* O - Converted character */
+_cups_tolower(int ch)                  /* I - Character to convert */
+{
+  return (_cups_isupper(ch) ? ch - 'A' + 'a' : ch);
+}
+
+_CUPS_INLINE int                       /* O - Converted character */
+_cups_toupper(int ch)                  /* I - Character to convert */
+{
+  return (_cups_islower(ch) ? ch - 'a' + 'A' : ch);
+}
+#  else
+extern int _cups_isalnum(int ch);
+extern int _cups_isalpha(int ch);
+extern int _cups_islower(int ch);
+extern int _cups_isspace(int ch);
+extern int _cups_isupper(int ch);
+extern int _cups_tolower(int ch);
+extern int _cups_toupper(int ch);
+#  endif /* _CUPS_INLINE */
+
+
 /*
  * Prototypes...
  */
 
-extern void    _cups_strcpy(char *dst, const char *src);
+extern ssize_t _cups_safe_vsnprintf(char *buffer, size_t bufsize, const char *format, va_list args) _CUPS_PRIVATE;
+extern void    _cups_strcpy(char *dst, const char *src) _CUPS_PRIVATE;
 
 #  ifndef HAVE_STRDUP
-extern char    *_cups_strdup(const char *);
+extern char    *_cups_strdup(const char *) _CUPS_PRIVATE;
 #    define strdup _cups_strdup
 #  endif /* !HAVE_STRDUP */
 
-#  ifndef HAVE_STRCASECMP
-extern int     _cups_strcasecmp(const char *, const char *);
-#    define strcasecmp _cups_strcasecmp
-#  endif /* !HAVE_STRCASECMP */
+extern int     _cups_strcasecmp(const char *, const char *) _CUPS_PRIVATE;
 
-#  ifndef HAVE_STRNCASECMP
-extern int     _cups_strncasecmp(const char *, const char *, size_t n);
-#    define strncasecmp _cups_strncasecmp
-#  endif /* !HAVE_STRNCASECMP */
+extern int     _cups_strncasecmp(const char *, const char *, size_t n) _CUPS_PRIVATE;
 
 #  ifndef HAVE_STRLCAT
-extern size_t _cups_strlcat(char *, const char *, size_t);
+extern size_t _cups_strlcat(char *, const char *, size_t) _CUPS_PRIVATE;
 #    define strlcat _cups_strlcat
 #  endif /* !HAVE_STRLCAT */
 
 #  ifndef HAVE_STRLCPY
-extern size_t _cups_strlcpy(char *, const char *, size_t);
+extern size_t _cups_strlcpy(char *, const char *, size_t) _CUPS_PRIVATE;
 #    define strlcpy _cups_strlcpy
 #  endif /* !HAVE_STRLCPY */
 
 #  ifndef HAVE_SNPRINTF
-extern int     _cups_snprintf(char *, size_t, const char *, ...)
-#    ifdef __GNUC__
-__attribute__ ((__format__ (__printf__, 3, 4)))
-#    endif /* __GNUC__ */
-;
+extern int     _cups_snprintf(char *, size_t, const char *, ...) _CUPS_FORMAT(3, 4) _CUPS_PRIVATE;
 #    define snprintf _cups_snprintf
 #  endif /* !HAVE_SNPRINTF */
 
 #  ifndef HAVE_VSNPRINTF
-extern int     _cups_vsnprintf(char *, size_t, const char *, va_list);
+extern int     _cups_vsnprintf(char *, size_t, const char *, va_list) _CUPS_PRIVATE;
 #    define vsnprintf _cups_vsnprintf
 #  endif /* !HAVE_VSNPRINTF */
 
@@ -128,11 +184,11 @@ extern int        _cups_vsnprintf(char *, size_t, const char *, va_list);
  * String pool functions...
  */
 
-extern char    *_cupsStrAlloc(const char *s);
-extern void    _cupsStrFlush(void);
-extern void    _cupsStrFree(const char *s);
-extern char    *_cupsStrRetain(const char *s);
-extern size_t  _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes);
+extern char    *_cupsStrAlloc(const char *s) _CUPS_PRIVATE;
+extern void    _cupsStrFlush(void) _CUPS_PRIVATE;
+extern void    _cupsStrFree(const char *s) _CUPS_PRIVATE;
+extern char    *_cupsStrRetain(const char *s) _CUPS_PRIVATE;
+extern size_t  _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes) _CUPS_PRIVATE;
 
 
 /*
@@ -140,9 +196,16 @@ extern size_t      _cupsStrStatistics(size_t *alloc_bytes, size_t *total_bytes);
  */
 
 extern char    *_cupsStrFormatd(char *buf, char *bufend, double number,
-                                struct lconv *loc);
+                                struct lconv *loc) _CUPS_PRIVATE;
 extern double  _cupsStrScand(const char *buf, char **bufptr,
-                             struct lconv *loc);
+                             struct lconv *loc) _CUPS_PRIVATE;
+
+
+/*
+ * Date function...
+ */
+
+extern char    *_cupsStrDate(char *buf, size_t bufsize, time_t timeval) _CUPS_PRIVATE;
 
 
 /*
@@ -154,7 +217,3 @@ extern double       _cupsStrScand(const char *buf, char **bufptr,
 #  endif /* __cplusplus */
 
 #endif /* !_CUPS_STRING_H_ */
-
-/*
- * End of "$Id$".
- */