#ifndef _STR_H_63636f24_ #define _STR_H_63636f24_ /* This file is in the public domain. */ #include typedef struct str STR; struct str { int len; unsigned char *data; } ; typedef struct rostr ROSTR; struct rostr { int len; const unsigned char *data; } ; extern int str_equalss(STR, STR); extern int str_equalcs(ROSTR, STR); extern int str_equalcc(ROSTR, ROSTR); extern int str_equalcC(ROSTR, const char *); extern int str_equalsC(STR, const char *); extern int str_equalsb(STR, const void *, int); extern STR str_copyro(ROSTR); #define str_copy(s) str_copyro(str_to_rostr((s))) extern void free_str(STR); #ifndef STR__INLINE #define STR__INLINE extern inline #endif extern ROSTR str_to_rostr(STR); STR__INLINE ROSTR str_to_rostr(STR s) { return((ROSTR){.data=s.data,.len=s.len}); } extern ROSTR cstr_to_rostr(const char *); STR__INLINE ROSTR cstr_to_rostr(const char *s) { return((ROSTR){.data=s,.len=strlen(s)}); } extern STR blk_to_str(void *, int); STR__INLINE STR blk_to_str(void *d, int l) { return((STR){.data=d,.len=l}); } extern ROSTR blk_to_rostr(const void *, int); STR__INLINE ROSTR blk_to_rostr(const void *d, int l) { return((ROSTR){.data=d,.len=l}); } #define STRZERO_INIT {.data=0,.len=0} #define STRZERO ((STR)STRZERO_INIT) #define ROSTRZERO ((ROSTR)STRZERO_INIT) #endif