XCache is a fast, stable PHP opcode cacher that has been proven and is now running on production servers under high load. https://xcache.lighttpd.net/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.2 KiB

#ifdef HAVE_XCACHE_TEST
# define RELAYLINE_DC , int relayline
# define RELAYLINE_CC , __LINE__
#else
# define RELAYLINE_DC
# define RELAYLINE_CC
#endif
#ifdef HAVE_XCACHE_TEST
# undef NDEBUG
# include <assert.h>
#endif
#ifndef NDEBUG
# undef inline
#define inline
#endif
#ifdef NDEBUG
#define notnullable(ptr) (ptr)
#else
static inline void *notnullable(const void *ptr)
{
assert(ptr);
return (void *) ptr;
}
#endif
#ifdef HAVE_XCACHE_DPRINT
static void xc_dprint_indent(int indent) /* {{{ */
{
int i;
for (i = 0; i < indent; i ++) {
fprintf(stderr, " ");
}
}
/* }}} */
static void xc_dprint_str_len(const char *str, int len) /* {{{ */
{
const unsigned char *p = (const unsigned char *) str;
int i;
for (i = 0; i < len; i ++) {
if (p[i] < 32 || p[i] == 127) {
fprintf(stderr, "\\%03o", (unsigned int) p[i]);
}
else {
fputc(p[i], stderr);
}
}
}
/* }}} */
#endif
#ifdef HAVE_XCACHE_TEST
static int xc_check_names(const char *file, int line, const char *functionName, const char **assert_names, size_t assert_names_count, HashTable *done_names) /* {{{ field name checker */
{
int errors = 0;
if (assert_names_count) {
size_t i;
Bucket *b;
for (i = 0; i < assert_names_count; ++i) {
if (!zend_u_hash_exists(done_names, IS_STRING, assert_names[i], (uint) strlen(assert_names[i]) + 1)) {
fprintf(stderr
, "Error: missing field at %s `#'%d %s`' : %s\n"
, file, line, functionName
, assert_names[i]
);
++errors;
}
}
for (b = done_names->pListHead; b != NULL; b = b->pListNext) {
int known = 0;
for (i = 0; i < assert_names_count; ++i) {
if (strcmp(assert_names[i], BUCKET_KEY_S(b)) == 0) {
known = 1;
break;
}
}
if (!known) {
fprintf(stderr
, "Error: unknown field at %s `#'%d %s`' : %s\n"
, file, line, functionName
, BUCKET_KEY_S(b)
);
++errors;
}
}
}
return errors;
}
/* }}} */
#endif
#ifdef HAVE_XCACHE_TEST
static void *xc_memsetptr(void *mem, void *content, size_t n) /* {{{ */
{
void **p = (void **) mem;
void **end = (void **) ((char *) mem + n);
while (p < end - sizeof(content)) {
*p = content;
p += sizeof(content);
}
if (p < end) {
memset(p, -1, end - p);
}
return mem;
}
/* }}} */
#endif