while(isspace(*p) || *p == '=') p++;
while (isspace (*p) || *p == '=') ++p;
static int read_config_file(struct hesiod_p *ctx, const char *filename){  char *key, *data, *p, **which;  char buf[MAXDNAME + 7];  int n;  FILE *fp;  /* Set default query classes. */  ctx->classes[0] = C_IN;  ctx->classes[1] = C_HS;  /* Try to open the configuration file. */  fp = fopen(filename, "r");  if (!fp)    {      /* Use compiled in default domain names. */      ctx->lhs = malloc(strlen(DEF_LHS) + 1);      ctx->rhs = malloc(strlen(DEF_RHS) + 1);      if (ctx->lhs && ctx->rhs)	{	  strcpy(ctx->lhs, DEF_LHS);	  strcpy(ctx->rhs, DEF_RHS);	  return 0;	}      else	{	  __set_errno (ENOMEM);	  return -1;	}    }  ctx->lhs = NULL;  ctx->rhs = NULL;  while (fgets(buf, sizeof(buf), fp) != NULL)    {      p = buf;      if (*p == '#' || *p == '\n' || *p == '\r')	continue;      while(*p == ' ' || *p == '\t')	p++;      key = p;      while(*p != ' ' && *p != '\t' && *p != '=')	p++;      *p++ = 0;      while(isspace(*p) || *p == '=')	p++;      data = p;      while(!isspace(*p))	p++;      *p = 0;      if (cistrcmp(key, "lhs") == 0 || cistrcmp(key, "rhs") == 0)	{	  which = (strcmp(key, "lhs") == 0) ? &ctx->lhs : &ctx->rhs;	  *which = malloc(strlen(data) + 1);	  if (!*which)	    {	      __set_errno (ENOMEM);	      return -1;	    }	  strcpy(*which, data);	}      else if (cistrcmp(key, "classes") == 0)	{	  n = 0;	  while (*data && n < 2)	    {	      p = data;	      while (*p && *p != ',')		p++;	      if (*p)		*p++ = 0;	      if (cistrcmp(data, "IN") == 0)		ctx->classes[n++] = C_IN;	      else if (cistrcmp(data, "HS") == 0)		ctx->classes[n++] = C_HS;	      data = p;	    }	  while (n < 2)	    ctx->classes[n++] = 0;	}    }  fclose(fp);  if (!ctx->rhs || ctx->classes[0] == 0 || ctx->classes[0] == ctx->classes[1])    {      __set_errno (ENOEXEC);      return -1;    }  return 0;}