/* safestr.h. Generated by configure. */
/*
** (c) Copyright 2003-2005 Matt Messier and John Viega
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**
** Redistributions of source code must retain the above copyright notice,
** this list of conditions and the following disclaimer.
**
** Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
**
** Neither the name of the primary nor the names of the contributors may
** be used to endorse or promote products derived from this software
** without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef SAFESTR_H
#define SAFESTR_H
#ifndef WIN32
/* BEGIN: autoconf substitutions */
/* #undef STDC_HEADERS */
/* #undef HAVE_SYS_TYPES_H */
/* #undef size_t */
/* #undef const */
/* #undef volatile */
/* END: autoconf substitutions */
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef STDC_HEADERS
#include <stdio.h>
#include <stdarg.h>
#include <stddef.h>
#include <errno.h>
#endif
#else
#include <stdio.h>
#include <stdarg.h>
#include <stddef.h>
#include <errno.h>
#endif
#ifndef WIN32
#define SAFESTR_API
#else
#ifdef SAFESTR_EXPORTS
#define SAFESTR_API __declspec(dllexport)
#else
#define SAFESTR_API __declspec(dllimport)
#endif
#endif
#ifndef WIN32
#include "safestr-c99.h"
#else
typedef signed char int8_t;
typedef unsigned char u_int8_t;
typedef signed short int16_t;
typedef unsigned short u_int16_t;
typedef signed long int32_t, ssize_t;
typedef unsigned long u_int32_t, uptrdiff_t;
typedef signed __int64 int64_t, intmax_t;
typedef unsigned __int64 u_int64_t, uintmax_t;
#endif
#define SAFESTR_ERROR_NONE 0
#define SAFESTR_ERROR_OUT_OF_MEMORY ENOMEM
#define SAFESTR_ERROR_INVALID_PARAMETER EINVAL
#define SAFESTR_ERROR_BAD_ADDRESS EFAULT
#define SAFESTR_ERROR_INVALID_FORMAT_STRING E2BIG
#define SAFESTR_ERROR_IMMUTABLE_STRING 0x80000001
#define SAFESTR_ERROR_INDEX_OUT_OF_RANGE 0x80000002
#define SAFESTR_ERROR_PRNG_FAILURE 0x80000003
#define SAFESTR_ERROR_TOO_MANY_FORMAT_ARGS 0x80000004
#define SAFESTR_ERROR_ILLEGAL_PERCENT_N 0x80000005
#define SAFESTR_ERROR_INVALID_FORMAT_ARG 0x80000006
#define SAFESTR_ERROR_STRING_TOO_LONG 0x80000007
#define SAFESTR_ERROR_INVALID_FORMAT 0x80000008
#define SAFESTR_ERROR_TOO_MANY_REFERENCES 0x80000009
#define SAFESTR_ERROR_NOTFOUND 0xFFFFFFFF
#define SAFESTR_COMPARE_NOCASE 0x1 /* do NOT consider case in compares */
#define SAFESTR_COMPARE_LIMIT 0x2 /* restrict comparison to length */
#define SAFESTR_TEMPORARY 0x1
#define SAFESTR_IMMUTABLE 0x2
#define SAFESTR_TRUSTED 0x4
#define SAFESTR_ASSET_PERMANENT 0x00
#define SAFESTR_ASSET_TEMPORARY 0x10
#define SAFESTR_ASSET_PROMOTE 0x20
#define SAFESTR_ASSET_DEMOTE 0x30
#define SAFESTR_COPY_LIMIT 0x1
#define SAFESTR_FIND_REVERSE 0x01 /* start search from end of string */
#define SAFESTR_FIND_FROMCHAR 0x02 /* start search from specified position */
#define SAFESTR_FIND_FROMNTH 0x04 /* start search from nth occurrence */
#define SAFESTR_FIND_NTH 0x08 /* find the nth occurrence */
#define SAFESTR_FIND_NOMATCHCASE 0x10 /* search case insensitively */
#define SAFESTR_FIND_CHARACTER 0x20 /* search for a single character */
#define SAFESTR_TRIM_LEADING 0x01
#define SAFESTR_TRIM_TRAILING 0x02
#define SAFESTR_TRIM_BOTH (SAFESTR_TRIM_LEADING | SAFESTR_TRIM_TRAILING)
#define SAFESTR_CONVERT_UPPERCASE 0x00000001
#define SAFESTR_CONVERT_LOWERCASE 0x00000002
#define SAFESTR_CONVERT_TITLECASE 0x00000004
/* Convenience Macros */
#define SAFESTR_ALLOC(x) safestr_do_alloc((x), 0, __FILE__, __LINE__)
#define SAFESTR_CLONE(x) safestr_do_clone((x), 0, __FILE__, __LINE__)
#define SAFESTR_CREATE(x) safestr_do_create((x), 0, __FILE__, __LINE__)
#define SAFESTR_TEMP(x) safestr_do_create((x), SAFESTR_TEMPORARY | \
SAFESTR_IMMUTABLE, \
__FILE__, __LINE__)
#define SAFESTR_TEMP_TRUSTED(x) safestr_do_create((x), SAFESTR_TEMPORARY | \
SAFESTR_IMMUTABLE | \
SAFESTR_TRUSTED, \
__FILE__, __LINE__)
#define safestr_release(x) safestr_free((x))
#define safestr_append(x, y) safestr_concatenate((x), (y), 0)
#define safestr_nappend(x, y, z) safestr_concatenate((x), (y), SAFESTR_COPY_LIMIT, (z))
#define safestr_find(x, y) safestr_search((x), (y), 0)
#define safestr_findchar(x, y) safestr_search((x), NULL, SAFESTR_FIND_CHARACTER, (y))
#define safestr_rfind(x, y) safestr_search((x), (y), SAFESTR_FIND_REVERSE)
#define safestr_rfindchar(x, y) safestr_search((x), NULL, SAFESTR_FIND_REVERSE | SAFESTR_FIND_CHARACTER, (y))
#define safestr_copy(x, y) safestr_duplicate((x), (y), 0)
#define safestr_ncopy(x, y, z) safestr_duplicate((x), (y), SAFESTR_COPY_LIMIT, (z))
#define safestr_ncompare(x, y, z) safestr_compare((x), (y), SAFESTR_COMPARE_LIMIT, (z))
#define safestr_alloc(x, y) safestr_do_alloc((x), (y), __FILE__, __LINE__)
#define safestr_clone(x, y) safestr_do_clone((x), (y), __FILE__, __LINE__)
#define safestr_convertarray(x, y) safestr_do_convertarray((x), (y), __FILE__, __LINE__)
#define safestr_create(x, y) safestr_do_create((x), (y), __FILE__, __LINE__)
#define safestr_getpassword(x, y) safestr_do_getpassword((x), (y), __FILE__, __LINE__)
#define safestr_join(x, y) safestr_do_join((x), (y), __FILE__, __LINE__)
#define safestr_readline(x) safestr_do_readline((x), __FILE__, __LINE__)
#define safestr_slice(x, y, z) safestr_do_slice((x), (y), (z), __FILE__, __LINE__)
#define safestr_split(x, y) safestr_do_split((x), (y), __FILE__, __LINE__)
#define safestr_strdup(x) safestr_do_strdup((x), __FILE__, __LINE__)
#ifdef __cplusplus
extern "C" {
#endif
typedef struct safestr_struct_t
{
char s;
} *safestr_t;
typedef void * (*safestr_malloc_t) (size_t, const char *, unsigned int);
typedef void * (*safestr_realloc_t)(void *, size_t, const char *, unsigned int);
typedef void (*safestr_free_t) (void *, const char *, unsigned int);
extern SAFESTR_API safestr_t safestr_do_alloc (u_int32_t, u_int32_t, const char *, unsigned int);
extern SAFESTR_API safestr_t safestr_do_clone (safestr_t, u_int32_t, const char *, unsigned int);
extern SAFESTR_API safestr_t * safestr_do_convertarray (char **, u_int32_t, const char *, unsigned int);
extern SAFESTR_API safestr_t safestr_do_create (char *, u_int32_t, const char *, unsigned int);
extern SAFESTR_API safestr_t safestr_do_join (safestr_t *, safestr_t, const char *, unsigned int);
extern SAFESTR_API safestr_t safestr_do_slice (safestr_t, u_int32_t, u_int32_t, const char *, unsigned int);
extern SAFESTR_API safestr_t * safestr_do_split (safestr_t, safestr_t, const char *, unsigned int);
extern SAFESTR_API char * safestr_do_strdup (char *, const char *, unsigned int);
extern SAFESTR_API u_int32_t safestr_asprintf (safestr_t *, safestr_t, ...);
extern SAFESTR_API char safestr_charat (safestr_t, u_int32_t);
extern SAFESTR_API void safestr_cleanup_asset (void *, void *);
extern SAFESTR_API int safestr_compare (safestr_t, safestr_t, u_int32_t, ...);
extern SAFESTR_API void safestr_concatenate (safestr_t *, safestr_t, u_int32_t, ...);
extern SAFESTR_API void safestr_delete (safestr_t *, u_int32_t, u_int32_t);
extern SAFESTR_API void safestr_duplicate (safestr_t *, safestr_t, u_int32_t, ...);
extern SAFESTR_API int safestr_endswith (safestr_t, safestr_t);
extern SAFESTR_API int safestr_equal (safestr_t, safestr_t, u_int32_t, ...);
extern SAFESTR_API u_int32_t safestr_fprintf (FILE *, safestr_t, ...);
extern SAFESTR_API void safestr_free (safestr_t);
extern SAFESTR_API void safestr_freelist (safestr_t *);
extern SAFESTR_API void safestr_insert (safestr_t *, u_int32_t, safestr_t);
extern SAFESTR_API u_int32_t safestr_length (safestr_t);
extern SAFESTR_API void safestr_memzero (volatile void *, u_int32_t);
extern SAFESTR_API u_int32_t safestr_printf (safestr_t, ...);
extern SAFESTR_API safestr_t safestr_reference (safestr_t);
extern SAFESTR_API void safestr_replace (safestr_t *, safestr_t, safestr_t);
extern SAFESTR_API u_int32_t safestr_search (safestr_t, safestr_t, u_int32_t, ...);
extern SAFESTR_API void safestr_setcharat (safestr_t, u_int32_t, char, int);
extern SAFESTR_API void safestr_setmemfns (safestr_malloc_t, safestr_realloc_t, safestr_free_t);
extern SAFESTR_API u_int32_t safestr_sprintf (safestr_t *, safestr_t, ...);
extern SAFESTR_API int safestr_startswith (safestr_t, safestr_t);
extern SAFESTR_API void safestr_truncate (safestr_t *, u_int32_t);
extern SAFESTR_API u_int32_t safestr_vasprintf (safestr_t *, safestr_t, va_list);
extern SAFESTR_API u_int32_t safestr_vfprintf (FILE *, safestr_t fmt, va_list);
extern SAFESTR_API u_int32_t safestr_vprintf (safestr_t, va_list);
extern SAFESTR_API u_int32_t safestr_vsprintf (safestr_t *, safestr_t, va_list);
extern SAFESTR_API void safestr_trust (safestr_t);
extern SAFESTR_API void safestr_untrust (safestr_t);
extern SAFESTR_API int safestr_istrusted (safestr_t);
extern SAFESTR_API void safestr_makereadonly (safestr_t);
extern SAFESTR_API void safestr_makewritable (safestr_t);
extern SAFESTR_API int safestr_isreadonly (safestr_t);
extern SAFESTR_API void safestr_convert (safestr_t, u_int32_t);
extern SAFESTR_API safestr_t safestr_do_getpassword (FILE *, safestr_t, const char *file, unsigned int lineno);
extern SAFESTR_API safestr_t safestr_do_readline (FILE *f, const char *file, unsigned int lineno);
extern SAFESTR_API double safestr_todouble (safestr_t);
extern SAFESTR_API int32_t safestr_toint32 (safestr_t, int);
extern SAFESTR_API int64_t safestr_toint64 (safestr_t, int);
extern SAFESTR_API u_int32_t safestr_touint32 (safestr_t, int);
extern SAFESTR_API u_int64_t safestr_touint64 (safestr_t, int);
extern SAFESTR_API void safestr_trim (safestr_t, u_int32_t);
extern SAFESTR_API void * safestr_default_malloc (size_t, const char *, unsigned int);
extern SAFESTR_API void * safestr_default_realloc (void *, size_t, const char *, unsigned int);
extern SAFESTR_API void safestr_default_free (void *, const char *, unsigned int);
#ifdef __cplusplus
}
#endif
#endif /* SAFESTR_H */
syntax highlighted by Code2HTML, v. 0.9.1