add_module (rp, directory, dir_len, modules, nmodules);
add_module (rp, directory, dir_len, modules, nmodules, modcounter++);
read_conf_file (const char *filename, const char *directory, size_t dir_len,		void **modules, size_t *nmodules){  FILE *fp = fopen (filename, "r");  char *line = NULL;  size_t line_len = 0;  /* Don't complain if a file is not present or readable, simply silently     ignore it.  */  if (fp == NULL)    return;  /* Process the known entries of the file.  Comments start with `#' and     end with the end of the line.  Empty lines are ignored.  */  while (!feof (fp))    {      char *rp, *endp, *word;      ssize_t n = __getdelim (&line, &line_len, '\n', fp);      if (n < 0)	/* An error occurred.  */	break;      rp = line;      /* Terminate the line (excluding comments or newline) by an NUL byte	 to simplify the following code.  */      endp = strchr (rp, '#');      if (endp != NULL)	*endp = '\0';      else	if (rp[n - 1] == '\n')	  rp[n - 1] = '\0';      while (isspace (*rp))	++rp;      /* If this is an empty line go on with the next one.  */      if (rp == endp)	continue;      word = rp;      while (*rp != '\0' && !isspace (*rp))	++rp;      if (rp - word == sizeof ("alias") - 1	  && memcmp (word, "alias", sizeof ("alias") - 1) == 0)	add_alias (rp);      else if (rp - word == sizeof ("module") - 1	       && memcmp (word, "module", sizeof ("module") - 1) == 0)	add_module (rp, directory, dir_len, modules, nmodules);      /* else */	/* Otherwise ignore the line.  */    }  if (line != NULL)    free (line);  fclose (fp);}