| //===- CStdLibSupport.h -- CStdLib Runtime Interface ----------------------===// |
| // |
| // The LLVM Compiler Infrast`ructure |
| // |
| // This file was developed by the LLVM research group and is distributed under |
| // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the interface of the runtime library to replace functions |
| // from the C Standard Library. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef _CSTDLIB_SUPPORT_H |
| #define _CSTDLIB_SUPPORT_H |
| |
| #include "safecode/Config/config.h" |
| |
| #include "safecode/Runtime/BBRuntime.h" |
| |
| #include <stdarg.h> |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| |
| // Use macros so that I won't pollute the namespace |
| |
| #define PPOOL safecode::DebugPoolTy* |
| #define TAG unsigned |
| #define SRC_INFO const char *, unsigned int |
| #define COMPLETE const uint8_t complete |
| #define DEBUG_INFO TAG, SRC_INFO |
| |
| extern "C" |
| { |
| // Generic C string checking functions |
| void poolcheckstr (PPOOL, const char * str); |
| void poolcheckstr_debug (PPOOL, char * str, TAG, SRC_INFO); |
| void poolcheckstrui (PPOOL, char * str); |
| void poolcheckstrui_debug (PPOOL, char * str, TAG, SRC_INFO); |
| |
| // Functions from <stdio.h>, <stdarg.h> |
| |
| int pool_vprintf (PPOOL fmtPool, char *fmt, va_list ap, COMPLETE); |
| int pool_vprintf_debug (PPOOL fmtPool, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| int pool_vfprintf (PPOOL filPool, PPOOL fmtPool, void *fil, char *fmt, va_list ap, COMPLETE); |
| int pool_vfprintf_debug (PPOOL filPool, PPOOL fmtPool, void *fil, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| int pool_vsprintf (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, va_list ap, COMPLETE); |
| int pool_vsprintf_debug (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| // Note argument order differs from library prototype. |
| int pool_vsnprintf (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, size_t sz, va_list ap, COMPLETE); |
| int pool_vsnprintf_debug (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, size_t sz, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| int pool_vscanf (PPOOL fmtPool, char *fmt, va_list ap, COMPLETE); |
| int pool_vscanf_debug (PPOOL fmtPool, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| int pool_vsscanf (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, va_list ap, COMPLETE); |
| int pool_vsscanf_debug (PPOOL strPool, PPOOL fmtPool, char *str, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| int pool_vfscanf (PPOOL filPool, PPOOL fmtPool, void *fil, char *fmt, va_list ap, COMPLETE); |
| int pool_vfscanf_debug (PPOOL filPool, PPOOL fmtPool, void *fil, char *fmt, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| // Functions from <syslog.h> |
| |
| // Note argument order differs from library prototype. |
| void pool_vsyslog (PPOOL fmtPool, char *fmt, int p, va_list ap, COMPLETE); |
| void pool_vsyslog_debug (PPOOL fmtPool, char *fmt, int p, va_list ap, COMPLETE, DEBUG_INFO); |
| |
| // Functions from <string.h> |
| |
| void *pool_memccpy (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, int c, size_t n, COMPLETE); |
| void *pool_memccpy_debug (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, int c, size_t n, COMPLETE, DEBUG_INFO); |
| |
| void *pool_memchr (PPOOL sPool, void *s, int c, size_t n, COMPLETE); |
| void *pool_memchr_debug (PPOOL sPool, void *s, int c, size_t n, COMPLETE, DEBUG_INFO); |
| |
| int pool_memcmp (PPOOL s1p,PPOOL s2p, void *s1, void *s2, size_t num, COMPLETE); |
| int pool_memcmp_debug (PPOOL s1p,PPOOL s2p, void *s1, void *s2, size_t num, COMPLETE, DEBUG_INFO); |
| |
| void *pool_memcpy (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE); |
| void *pool_memcpy_debug (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE, DEBUG_INFO); |
| |
| void *pool_memmove (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE); |
| void *pool_memmove_debug (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE, DEBUG_INFO); |
| |
| void *pool_memset (PPOOL sPool, void *s, int c, size_t n, COMPLETE); |
| void *pool_memset_debug (PPOOL sPool, void *s, int c, size_t n, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strcat (PPOOL dstPool, PPOOL srcPool, char *d, char *s, COMPLETE); |
| char *pool_strcat_debug (PPOOL dstPool, PPOOL srcPool, char *d, char *s, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strchr (PPOOL sPool, char *s, int c, COMPLETE); |
| char *pool_strchr_debug (PPOOL sPool, char *s, int c, COMPLETE, DEBUG_INFO); |
| |
| int pool_strcmp (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE); |
| int pool_strcmp_debug (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE, DEBUG_INFO); |
| |
| int pool_strcoll (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE); |
| int pool_strcoll_debug (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strcpy (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, COMPLETE); |
| char *pool_strcpy_debug (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, COMPLETE, DEBUG_INFO); |
| |
| size_t pool_strcspn (PPOOL s1p,PPOOL s2p, char *s1, char *s2, COMPLETE); |
| size_t pool_strcspn_debug (PPOOL s1p,PPOOL s2p, char *s1, char *s2, COMPLETE, DEBUG_INFO); |
| |
| // strdup () |
| |
| // strerror () |
| |
| // strerror_r () |
| |
| size_t pool_strlen (PPOOL stringPool, char *string, COMPLETE); |
| size_t pool_strlen_debug (PPOOL stringPool, char *string, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strncat (PPOOL dstPool, PPOOL srcPool, char *d, char *s, size_t n, COMPLETE); |
| char *pool_strncat_debug (PPOOL dstPool, PPOOL srcPool, char *d, char *s, size_t n, COMPLETE, DEBUG_INFO); |
| |
| int pool_strncmp (PPOOL s1p,PPOOL s2p, char *s1, char *s2, size_t num, COMPLETE); |
| int pool_strncmp_debug (PPOOL s1p,PPOOL s2p, char *s1, char *s2, size_t num, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strncpy (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, size_t n, COMPLETE); |
| char *pool_strncpy_debug (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, size_t n, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strpbrk (PPOOL sPool, PPOOL aPool, char *s, char *a, COMPLETE); |
| char *pool_strpbrk_debug (PPOOL sPool, PPOOL aPool, char *s, char *a, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strrchr (PPOOL sPool, char *s, int c, COMPLETE); |
| char *pool_strrchr_debug (PPOOL sPool, char *s, int c, COMPLETE, DEBUG_INFO); |
| |
| size_t pool_strspn (PPOOL s1p, PPOOL s2p, char *s1, char *s2, COMPLETE); |
| size_t pool_strspn_debug (PPOOL s1p,PPOOL s2p, char *s1, char *s2, COMPLETE, DEBUG_INFO); |
| |
| char *pool_strstr (PPOOL s1Pool, PPOOL s2Pool, char *s1, char *s2, COMPLETE); |
| char *pool_strstr_debug (PPOOL s1Pool, PPOOL s2Pool, char *s1, char *s2, COMPLETE, DEBUG_INFO); |
| |
| // strtok () |
| |
| // strtok_r () |
| |
| size_t pool_strxfrm (PPOOL dp, PPOOL sp, char *d, char *s, size_t n, COMPLETE); |
| size_t pool_strxfrm_debug (PPOOL dp, PPOOL sp, char *d, char *s, size_t n, COMPLETE, DEBUG_INFO); |
| |
| // Extensions to <string.h> |
| |
| #ifdef HAVE_MEMPCPY |
| void *pool_mempcpy (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE); |
| void *pool_mempcpy_debug (PPOOL dstPool, PPOOL srcPool, void *dst, void *src, size_t n, COMPLETE, DEBUG_INFO); |
| #endif |
| |
| #ifdef HAVE_STRCASESTR |
| char *pool_strcasestr (PPOOL s1Pool, PPOOL s2Pool, char *s1, char *s2, COMPLETE); |
| char *pool_strcasestr_debug (PPOOL s1Pool, PPOOL s2Pool, char *s1, char *s2, COMPLETE, DEBUG_INFO); |
| #endif |
| |
| #ifdef HAVE_STPCPY |
| char *pool_stpcpy (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, COMPLETE); |
| char *pool_stpcpy_debug (PPOOL dstPool, PPOOL srcPool, char *dst, char *src, COMPLETE, DEBUG_INFO); |
| #endif |
| |
| #ifdef HAVE_STRNLEN |
| size_t pool_strnlen (PPOOL stringPool, char *string, size_t maxlen, COMPLETE); |
| size_t pool_strnlen_debug (PPOOL stringPool, char *string, size_t maxlen, COMPLETE, DEBUG_INFO); |
| #endif |
| |
| // Functions from <strings.h> |
| |
| int pool_bcmp (PPOOL aPool, PPOOL bPool, void *a, void *b, size_t n, COMPLETE); |
| int pool_bcmp_debug (PPOOL aPool, PPOOL bPool, void *a, void *b, size_t n, COMPLETE, DEBUG_INFO); |
| |
| void pool_bcopy (PPOOL aPool, PPOOL bPool, void *a, void *b, size_t n, COMPLETE); |
| void pool_bcopy_debug (PPOOL aPool, PPOOL bPool, void *a, void *b, size_t n, COMPLETE, DEBUG_INFO); |
| |
| void pool_bzero (PPOOL sPool, void *s, size_t n, COMPLETE); |
| void pool_bzero_debug (PPOOL sPool, void *s, size_t n, COMPLETE, DEBUG_INFO); |
| |
| char *pool_index (PPOOL sPool, char *s, int c, COMPLETE); |
| char *pool_index_debug (PPOOL sPool, char *s, int c, COMPLETE, DEBUG_INFO); |
| |
| char *pool_rindex (PPOOL sPool, char *s, int c, COMPLETE); |
| char *pool_rindex_debug (PPOOL sPool, char *s, int c, COMPLETE, DEBUG_INFO); |
| |
| int pool_strcasecmp (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE); |
| int pool_strcasecmp_debug (PPOOL str1Pool, PPOOL str2Pool, char *str1, char *str2, COMPLETE, DEBUG_INFO); |
| |
| int pool_strncasecmp (PPOOL s1p,PPOOL s2p, char *s1, char *s2, size_t num, COMPLETE); |
| int pool_strncasecmp_debug (PPOOL s1p,PPOOL s2p, char *s1, char *s2, size_t num, COMPLETE, DEBUG_INFO); |
| |
| // Functions from <stdio.h> |
| |
| char * pool_fgets (PPOOL, char * s, int n, FILE * stream, COMPLETE); |
| char * pool_fgets_debug (PPOOL, char * s, int n, FILE * stream, COMPLETE, DEBUG_INFO); |
| |
| int pool_fputs (PPOOL, char * , FILE * , COMPLETE); |
| int pool_fputs_debug (PPOOL, char *, FILE *, COMPLETE, DEBUG_INFO); |
| |
| char * pool_gets (PPOOL, char *, COMPLETE); |
| char * pool_gets_debug (PPOOL, char *, COMPLETE, DEBUG_INFO); |
| |
| int pool_puts (PPOOL, char *, COMPLETE); |
| int pool_puts_debug (PPOOL, char *, COMPLETE, DEBUG_INFO); |
| |
| size_t pool_fread (PPOOL, void *, size_t, size_t, FILE *, COMPLETE); |
| size_t pool_fread_debug (PPOOL, void *, size_t, size_t, FILE *, COMPLETE, DEBUG_INFO); |
| |
| size_t pool_fwrite (PPOOL, void *, size_t, size_t, FILE *, COMPLETE); |
| size_t pool_fwrite_debug (PPOOL, void *, size_t, size_t, FILE *, COMPLETE, DEBUG_INFO); |
| |
| char * pool_tmpnam (PPOOL, char *, COMPLETE); |
| char * pool_tmpnam_debug (PPOOL, char *, COMPLETE, DEBUG_INFO); |
| |
| // Functions from <unistd.h> |
| |
| char * pool_getcwd (PPOOL, char *, size_t, COMPLETE); |
| char * pool_getcwd_debug (PPOOL, char *, size_t, COMPLETE, DEBUG_INFO); |
| |
| // Functions from <dirent.h> |
| |
| int pool_readdir_r (PPOOL, PPOOL, void *, void *, void *, COMPLETE); |
| int pool_readdir_r_debug (PPOOL, PPOOL, void *, void *, void *, COMPLETE, DEBUG_INFO); |
| |
| // System calls |
| |
| ssize_t pool_read (PPOOL, void *, int, size_t, COMPLETE); |
| ssize_t pool_read_debug (PPOOL, void *, int, size_t, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_recv (PPOOL, void *, int, size_t, int, COMPLETE); |
| ssize_t pool_recv_debug (PPOOL, void *, int, size_t, int, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_recvfrom (PPOOL, void *, int, size_t, int, struct sockaddr *, socklen_t *, COMPLETE); |
| ssize_t pool_recvfrom_debug (PPOOL, void *, int, size_t, int, struct sockaddr *, socklen_t *, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_write (PPOOL, void *, int, size_t, COMPLETE); |
| ssize_t pool_write_debug (PPOOL, void *, int, size_t, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_send (PPOOL, void *, int, size_t, int, COMPLETE); |
| ssize_t pool_send_debug (PPOOL, void *, int, size_t, int, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_sendto (PPOOL, void *, int, size_t, int, const struct sockaddr *, socklen_t, COMPLETE); |
| ssize_t pool_sendto_debug (PPOOL, void *, int, size_t, int, const struct sockaddr *, socklen_t, COMPLETE, DEBUG_INFO); |
| |
| ssize_t pool_readlink (PPOOL, PPOOL, const char *path, char *buf, size_t bufsiz, COMPLETE); |
| ssize_t pool_readlink_debug (PPOOL, PPOOL, const char *path, char *buf, size_t bufsiz, COMPLETE, DEBUG_INFO); |
| |
| char * pool_realpath (PPOOL, PPOOL, const char *path, char *buf, COMPLETE); |
| char * pool_realpath_debug (PPOOL, PPOOL, const char *path, char *buf, COMPLETE, DEBUG_INFO); |
| } |
| |
| #undef PPOOL |
| #undef TAG |
| #undef SRC_INFO |
| #undef COMPLETE |
| #undef DEBUG_INFO |
| #endif |