blob: 759e0d3517bb840d8a891f1a58f51503485af5fa [file] [log] [blame]
//===- 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