if (len == 0) len = strlen (str) + 1;
newstring (struct Strtab *st, const char *str, size_t len){  struct Strent *newstr;  size_t align;  int i;  /* Compute the string length if the caller doesn't know it.  */  if (len == 0)    len = strlen (str) + 1;  /* Compute the amount of padding needed to make the structure aligned.  */  align = ((__alignof__ (struct Strent)	    - (((uintptr_t) st->backp)	       & (__alignof__ (struct Strent) - 1)))	   & (__alignof__ (struct Strent) - 1));  /* Make sure there is enough room in the memory block.  */  if (st->left < align + sizeof (struct Strent) + len)    {      morememory (st, sizeof (struct Strent) + len);      align = 0;    }  /* Create the reserved string.  */  newstr = (struct Strent *) (st->backp + align);  newstr->string = str;  newstr->len = len;  newstr->next = NULL;  newstr->left = NULL;  newstr->right = NULL;  newstr->offset = 0;  for (i = len - 2; i >= 0; --i)    newstr->reverse[i] = str[len - 2 - i];  newstr->reverse[len - 1] = '\0';  st->backp += align + sizeof (struct Strent) + len;  st->left -= align + sizeof (struct Strent) + len;  return newstr;}