- p = xmalloc(sz); /* Create a new symbol block */
- p->next = bin->next; /* Set up the next pointer */
- p->hash = hash; /* Set up the hash value too */
- p->len = len; /* And set up the string length */
- if (len <= SYM_BUFSZ)
- memcpy(p->name.b, n, len); /* And copy the string over */
- else {
- TRY {
- p->name.p = sub_alloc(len); /* Allocate a block for the name */
- memcpy(p->name.p, n, len); /* And copy the string over */
- } CATCH {
- free(p);
- TRACK_POP;
- RETHROW;
- } END_TRY;
+ p = xmalloc(sz);
+ p->next = bin->next;
+ p->hash = hash;
+ p->len = len;
+ if (n) {
+ if (len <= SYM_BUFSZ)
+ memcpy(p->name.b, n, len);
+ else {
+ TRY {
+ p->name.p = sub_alloc(len);
+ memcpy(p->name.p, n, len);
+ } CATCH {
+ free(p);
+ TRACK_POP;
+ RETHROW;
+ } END_TRY;
+ }