safec 3.15
Safe C Library - ISO TR24731 Bounds Checking Interface
Loading...
Searching...
No Matches
safe_compile.h File Reference
This graph shows which files directly or indirectly include this file:

Macros

#define _SAFEC_HAS_DIAGNOSE_IF   0
 Since clang-5 most constraints can be caught at compile-time.
#define BOS_UNKNOWN   ((size_t)-1)
#define _BOS_KNOWN(dest)
#define BOS(dest)
#define BOSW(dest)
#define _BOS_CHK(dest, dmax)
#define _BOS_OVR(dest, dmax)
#define _BOS_ZERO(dest, dmax)
#define _BOS_NULL(dest)
#define _BOSW_CHK(dest, dmax)
#define _BOSW_OVR(dest, dmax)
#define _BOS_CHK_N(dest, dmax)
#define _BOS_OVR_N(dest, dmax)
#define _BOSW_CHK_N(dest, dmax)
#define _BOSW_OVR_N(dest, dmax)
#define bos_chk_err   "error"
#define _BOS_UCHK(ok, uchk, chk)
#define _BOS_UCHK_IF(ok, cond, uchk, chk)
#define _BOS_UCHK_MOVE(ok, dest, src, nbytes, chk)
#define _BOS_PTR(p)
#define _BOS_DISJOINT(dest, dlen, src, slen)
#define _BOS_MEMCPY(dest, dlen, src, slen, n)
#define _BOS_DMAX_OK(dest, n, size)
#define _BOS_SRC_OK(src, n, size)
#define _BOS_UCHK_DEST(name, dest, dmax)
#define _BOS_UCHK_STR(name, str, smax)
#define _XSTR(s)
#define _STR(s)
#define BOS_CHK(dest)
#define BOSW_CHK(dest)
#define BOS_CHK2(buf, bufsize)
#define BOSW_CHK2(buf, bufsize)
#define BOS_OVR_BUTNULL(dest)
#define BOSW_OVR_BUTNULL(dest)
#define BOS_CHK_BUTZERO(dest, slen)
#define BOSW_CHK_BUTZERO(dest, slen)
#define BOS_OVR2(buf, bufsize)
#define BOSW_OVR2(buf, bufsize)
#define BOS_OVR2Z(buf, bufsize)
#define BOSW_OVR2Z(buf, bufsize)
#define BOS_OVR2_BUTZERO(buf, bufsize)
#define BOSW_OVR2_BUTZERO(buf, bufsize)
#define BOS_OVR2_BUTNULL(buf, bufsize)
#define BOSW_OVR2_BUTNULL(buf, bufsize)
#define VAL_OVR2(value, vmax)
#define VAL_OVR2_BUTZERO(value, vmax)
#define BOS_NULL(buf)
#define BOS_NULLPTR(buf)
#define BOS_FMT(fmt)
#define BOS_ATTR(chk, msg)

Typedefs

typedef void(* constraint_handler_t) (const char *restrict, void *restrict, errno_t)

Macro Definition Documentation

◆ _SAFEC_HAS_DIAGNOSE_IF

#define _SAFEC_HAS_DIAGNOSE_IF   0

Since clang-5 most constraints can be caught at compile-time.

For pointer sizes we need BOS/__builtin_object_size(), for diagnostics attribute((diagnose_if())) gcc violations might be caught with _Static_assert, but this is limited.

◆ BOS_UNKNOWN

#define BOS_UNKNOWN   ((size_t)-1)

◆ _BOS_KNOWN

#define _BOS_KNOWN ( dest)
Value:
((size_t)BOS(dest) != BOS_UNKNOWN)

◆ BOS

#define BOS ( dest)
Value:

◆ BOSW

#define BOSW ( dest)
Value:

◆ _BOS_CHK

#define _BOS_CHK ( dest,
dmax )
Value:
0

◆ _BOS_OVR

#define _BOS_OVR ( dest,
dmax )
Value:
0

◆ _BOS_ZERO

#define _BOS_ZERO ( dest,
dmax )
Value:
((dmax) == 0)

◆ _BOS_NULL

#define _BOS_NULL ( dest)
Value:
(!(dest))

◆ _BOSW_CHK

#define _BOSW_CHK ( dest,
dmax )
Value:
0

◆ _BOSW_OVR

#define _BOSW_OVR ( dest,
dmax )
Value:
0

◆ _BOS_CHK_N

#define _BOS_CHK_N ( dest,
dmax )
Value:
0

◆ _BOS_OVR_N

#define _BOS_OVR_N ( dest,
dmax )
Value:
0

◆ _BOSW_CHK_N

#define _BOSW_CHK_N ( dest,
dmax )
Value:
0

◆ _BOSW_OVR_N

#define _BOSW_OVR_N ( dest,
dmax )
Value:
0

◆ bos_chk_err

#define bos_chk_err   "error"

◆ _BOS_UCHK

#define _BOS_UCHK ( ok,
uchk,
chk )
Value:
(chk)

◆ _BOS_UCHK_IF

#define _BOS_UCHK_IF ( ok,
cond,
uchk,
chk )
Value:
(chk)

◆ _BOS_UCHK_MOVE

#define _BOS_UCHK_MOVE ( ok,
dest,
src,
nbytes,
chk )
Value:
(chk)

◆ _BOS_PTR

#define _BOS_PTR ( p)
Value:
((uintptr_t)(const void *)(p))

◆ _BOS_DISJOINT

#define _BOS_DISJOINT ( dest,
dlen,
src,
slen )
Value:
(_BOS_PTR(src) - _BOS_PTR(dest) >= (size_t)(dlen) && \
_BOS_PTR(dest) - _BOS_PTR(src) >= (size_t)(slen))

◆ _BOS_MEMCPY

#define _BOS_MEMCPY ( dest,
dlen,
src,
slen,
n )
Value:
__builtin_memmove(dest, src, n)

◆ _BOS_DMAX_OK

#define _BOS_DMAX_OK ( dest,
n,
size )
Value:
(_BOS_KNOWN(dest) && (size_t)(n) != 0 && (size_t)(n) <= BOS(dest) / (size))

◆ _BOS_SRC_OK

#define _BOS_SRC_OK ( src,
n,
size )
Value:
(_BOS_KNOWN(src) && (size_t)(n) <= BOS(src) / (size))

◆ _BOS_UCHK_DEST

#define _BOS_UCHK_DEST ( name,
dest,
dmax )
Value:
_BOS_UCHK(_BOS_DMAX_OK(dest, dmax, 1), _##name##_uchk(dest, dmax), \
_##name##_chk(dest, dmax, BOS(dest)))

◆ _BOS_UCHK_STR

#define _BOS_UCHK_STR ( name,
str,
smax )
Value:
_BOS_UCHK(_BOS_DMAX_OK(str, smax, 1) && (size_t)(smax) <= RSIZE_MAX_STR, \
_##name##_uchk(str, smax), _##name##_chk(str, smax, BOS(str)))

◆ _XSTR

#define _XSTR ( s)
Value:
_STR(s)

◆ _STR

#define _STR ( s)
Value:
#s

◆ BOS_CHK

EXTERN int BOS_CHK ( dest)

◆ BOSW_CHK

EXTERN int BOSW_CHK ( dest)

◆ BOS_CHK2

#define BOS_CHK2 ( buf,
bufsize )

◆ BOSW_CHK2

#define BOSW_CHK2 ( buf,
bufsize )

◆ BOS_OVR_BUTNULL

#define BOS_OVR_BUTNULL ( dest)

◆ BOSW_OVR_BUTNULL

#define BOSW_OVR_BUTNULL ( dest)

◆ BOS_CHK_BUTZERO

#define BOS_CHK_BUTZERO ( dest,
slen )

◆ BOSW_CHK_BUTZERO

#define BOSW_CHK_BUTZERO ( dest,
slen )

◆ BOS_OVR2

#define BOS_OVR2 ( buf,
bufsize )

◆ BOSW_OVR2

#define BOSW_OVR2 ( buf,
bufsize )

◆ BOS_OVR2Z

#define BOS_OVR2Z ( buf,
bufsize )

◆ BOSW_OVR2Z

#define BOSW_OVR2Z ( buf,
bufsize )

◆ BOS_OVR2_BUTZERO

#define BOS_OVR2_BUTZERO ( buf,
bufsize )

◆ BOSW_OVR2_BUTZERO

#define BOSW_OVR2_BUTZERO ( buf,
bufsize )

◆ BOS_OVR2_BUTNULL

#define BOS_OVR2_BUTNULL ( buf,
bufsize )

◆ BOSW_OVR2_BUTNULL

#define BOSW_OVR2_BUTNULL ( buf,
bufsize )

◆ VAL_OVR2

#define VAL_OVR2 ( value,
vmax )

◆ VAL_OVR2_BUTZERO

#define VAL_OVR2_BUTZERO ( value,
vmax )

◆ BOS_NULL

#define BOS_NULL ( buf)

◆ BOS_NULLPTR

#define BOS_NULLPTR ( buf)

◆ BOS_FMT

EXTERN int BOS_FMT ( fmt)

◆ BOS_ATTR

#define BOS_ATTR ( chk,
msg )

Typedef Documentation

◆ constraint_handler_t

typedef void(* constraint_handler_t) (const char *restrict, void *restrict, errno_t)