__tzstring (string) const char *string;
__tzstring (const char *s)
__tzstring (string)     const char *string;{  struct tzstring_head *h;  size_t needed;  char *p;  /* Look through time zone string list for a duplicate of this one.  */  for (h = &tzstring_list.head;  ;  h = h->next)    {      for (p = (char *) (h + 1);  p[0] | p[1];  ++p)	if (strcmp (p, string) == 0)	  return p;      if (! h->next)	break;    }  /* No duplicate was found.  Copy to the end of this buffer if there's room;     otherwise, append a large-enough new buffer to the list and use it.  */  ++p;  needed = strlen (string) + 2; /* Need 2 trailing '\0's after last string.  */  if ((size_t) ((char *) (h + 1) + tzstring_last_buffer_size - p) < needed)    {      size_t buffer_size = tzstring_last_buffer_size;      while ((buffer_size *= 2) < needed)	continue;      h = malloc (sizeof *h + buffer_size);      if (h == NULL)	return NULL;      h->next = NULL;      tzstring_last_buffer_size = buffer_size;      p = (char *) (h + 1);    }  return strncpy (p, string, needed);}