/* DStrInternal.h */

#ifndef DStrInternal_h
#define DStrInternal_h 1

#ifdef __cplusplus
extern "C"
{
#endif	/* __cplusplus */

typedef struct DStr {
	char *s;
	size_t len;
	size_t allocSize;
} DStr, *DStrPtr;


#ifdef __cplusplus
}
#endif	/* __cplusplus */

/* These checks should catch most cases where an
 * uninitialized or trashed DStr structure has
 * been passed in.  As a consequence, it limits
 * our strings to a maximum length of 16777215.
 *
 * The assumptions are that malloc never
 * returns an unaligned pointer, and that our
 * allocation sizes are always multiples of 16
 * bytes.
 */
#define IS_DSTR_CORRUPT(dst) \
	((((long) dst->s & 1) != 0) || ((dst->allocSize & 0xFF00000F) != 0) || ((dst->len & 0xFF000000) != 0))

#endif
