Add a mem_is_zero function (I think we will need this) and a STRUCT_OFFSET macro (we already need this).

svn:r6810
This commit is contained in:
Nick Mathewson 2006-07-23 05:32:35 +00:00
parent 1c266c3352
commit 35960e1162
2 changed files with 25 additions and 3 deletions

View File

@ -428,13 +428,30 @@ find_whitespace(const char *s)
return s; return s;
} }
/** Return true iff the 'len' bytes at 'mem' are all zero. */
int tor_mem_is_zero(const char *mem, size_t len)
{
static const char ZERO[] = {
0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,
};
while (len >= sizeof(ZERO)) {
if (memcmp(mem, ZERO, sizeof(ZERO)))
return 0;
len -= sizeof(ZERO);
mem += sizeof(ZERO);
}
/* Deal with leftover bytes. */
if (len)
return ! memcmp(mem, ZERO, len);
return 1;
}
/** Return true iff the DIGEST_LEN bytes in digest are all zero. */ /** Return true iff the DIGEST_LEN bytes in digest are all zero. */
int int
tor_digest_is_zero(const char *digest) tor_digest_is_zero(const char *digest)
{ {
static char ZERO_DIGEST[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; return tor_mem_is_zero(digest, DIGEST_LEN);
return !memcmp(digest, ZERO_DIGEST, DIGEST_LEN);
} }
#define CHECK_STRTOX_RESULT() \ #define CHECK_STRTOX_RESULT() \

View File

@ -88,6 +88,10 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
#define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS) #define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS)
#define tor_memdup(s, n) _tor_memdup(s, n DMALLOC_ARGS) #define tor_memdup(s, n) _tor_memdup(s, n DMALLOC_ARGS)
/** Return the offset of <b>member</b> within the type <b>tp</b>, in bytes */
#define STRUCT_OFFSET(tp, member) \
((off_t) (((char*)&((tp*)0)->member)-(char*)0))
/* String manipulation */ /* String manipulation */
#define HEX_CHARACTERS "0123456789ABCDEFabcdef" #define HEX_CHARACTERS "0123456789ABCDEFabcdef"
void tor_strlower(char *s); void tor_strlower(char *s);
@ -114,6 +118,7 @@ const char *hex_str(const char *from, size_t fromlen);
const char *eat_whitespace(const char *s); const char *eat_whitespace(const char *s);
const char *eat_whitespace_no_nl(const char *s); const char *eat_whitespace_no_nl(const char *s);
const char *find_whitespace(const char *s); const char *find_whitespace(const char *s);
int tor_mem_is_zero(const char *mem, size_t len);
int tor_digest_is_zero(const char *digest); int tor_digest_is_zero(const char *digest);
char *esc_for_log(const char *string); char *esc_for_log(const char *string);
const char *escaped(const char *string); const char *escaped(const char *string);