diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/alloc.c b/src/alloc.c index 0eb54f8b271..4cc9b3e1a13 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -788,10 +788,19 @@ xpalloc (void *pa, ptrdiff_t *nitems, ptrdiff_t nitems_incr_min, char * xstrdup (const char *s) { - size_t len = strlen (s) + 1; - char *p = xmalloc (len); - memcpy (p, s, len); - return p; + ptrdiff_t size; + eassert (s); + size = strlen (s) + 1; + return memcpy (xmalloc (size), s, size); +} + +/* Like above, but duplicates Lisp string to C string. */ + +char * +xlispstrdup (Lisp_Object string) +{ + ptrdiff_t size = SBYTES (string) + 1; + return memcpy (xmalloc (size), SSDATA (string), size); } /* Like putenv, but (1) use the equivalent of xmalloc and (2) the @@ -4057,7 +4066,7 @@ live_string_p (struct mem_node *m, void *p) { if (m->type == MEM_TYPE_STRING) { - struct string_block *b = (struct string_block *) m->start; + struct string_block *b = m->start; ptrdiff_t offset = (char *) p - (char *) &b->strings[0]; /* P must point to the start of a Lisp_String structure, and it @@ -4080,7 +4089,7 @@ live_cons_p (struct mem_node *m, void *p) { if (m->type == MEM_TYPE_CONS) { - struct cons_block *b = (struct cons_block *) m->start; + struct cons_block *b = m->start; ptrdiff_t offset = (char *) p - (char *) &b->conses[0]; /* P must point to the start of a Lisp_Cons, not be @@ -4106,7 +4115,7 @@ live_symbol_p (struct mem_node *m, void *p) { if (m->type == MEM_TYPE_SYMBOL) { - struct symbol_block *b = (struct symbol_block *) m->start; + struct symbol_block *b = m->start; ptrdiff_t offset = (char *) p - (char *) &b->symbols[0]; /* P must point to the start of a Lisp_Symbol, not be @@ -4132,7 +4141,7 @@ live_float_p (struct mem_node *m, void *p) { if (m->type == MEM_TYPE_FLOAT) { - struct float_block *b = (struct float_block *) m->start; + struct float_block *b = m->start; ptrdiff_t offset = (char *) p - (char *) &b->floats[0]; /* P must point to the start of a Lisp_Float and not be @@ -4156,7 +4165,7 @@ live_misc_p (struct mem_node *m, void *p) { if (m->type == MEM_TYPE_MISC) { - struct marker_block *b = (struct marker_block *) m->start; + struct marker_block *b = m->start; ptrdiff_t offset = (char *) p - (char *) &b->markers[0]; /* P must point to the start of a Lisp_Misc, not be @@ -4183,7 +4192,7 @@ live_vector_p (struct mem_node *m, void *p) if (m->type == MEM_TYPE_VECTOR_BLOCK) { /* This memory node corresponds to a vector block. */ - struct vector_block *block = (struct vector_block *) m->start; + struct vector_block *block = m->start; struct Lisp_Vector *vector = (struct Lisp_Vector *) block->data; /* P is in the block's allocation range. Scan the block |
