• 读取并分析wgetrc文件


    main():

      /* If the user did not specify a config, read the system wgetrc and ~/.wgetrc. */
      if (use_userconfig == false)
        initialize ();
    initialize():

    /* Initialize the defaults and run the system wgetrc and user's own
       wgetrc.  */
    void
    initialize (void)
    {
      char *file, *env_sysrc;
      bool ok = true;
    
    
      /* Run a non-standard system rc file when the according environment
         variable has been set. For internal testing purposes only!  */
      env_sysrc = getenv ("SYSTEM_WGETRC");
      if (env_sysrc && file_exists_p (env_sysrc))
        {
          ok &= run_wgetrc (env_sysrc);
          /* If there are any problems parsing the system wgetrc file, tell
             the user and exit */
          if (! ok)
            {
              fprintf (stderr, _("\
    Parsing system wgetrc file (env SYSTEM_WGETRC) failed.  Please check\n\
    '%s',\n\
    or specify a different file using --config.\n"), env_sysrc);
              exit (2);
            }
        }
      /* Otherwise, if SYSTEM_WGETRC is defined, use it.  */
    #ifdef SYSTEM_WGETRC
      else if (file_exists_p (SYSTEM_WGETRC))
        ok &= run_wgetrc (SYSTEM_WGETRC);
      /* If there are any problems parsing the system wgetrc file, tell
         the user and exit */
      if (! ok)
        {
          fprintf (stderr, _("\
    Parsing system wgetrc file failed.  Please check\n\
    '%s',\n\
    or specify a different file using --config.\n"), SYSTEM_WGETRC);
          exit (2);
        }
    #endif
      /* Override it with your own, if one exists.  */
      file = wgetrc_file_name ();
      if (!file)
        return;
      /* #### We should canonicalize `file' and SYSTEM_WGETRC with
         something like realpath() before comparing them with `strcmp'  */
    #ifdef SYSTEM_WGETRC
      if (!strcmp (file, SYSTEM_WGETRC))
        {
          fprintf (stderr, _("\
    %s: Warning: Both system and user wgetrc point to %s.\n"),
                   exec_name, quote (file));
        }
      else
    #endif
        ok &= run_wgetrc (file);
    
    
      /* If there were errors processing either `.wgetrc', abort. */
      if (!ok)
        exit (2);
    
    
      xfree (file);
      return;
    }
    

    run_wgetrc():

    /* Initialize variables from a wgetrc file.  Returns zero (failure) if
       there were errors in the file.  */
    
    bool
    run_wgetrc (const char *file)
    {
      FILE *fp;
      char *line;
      int ln;
      int errcnt = 0;
    
      fp = fopen (file, "r");
      if (!fp)
        {
          fprintf (stderr, _("%s: Cannot read %s (%s).\n"), exec_name,
                   file, strerror (errno));
          return true;                      /* not a fatal error */
        }
      ln = 1;
      while ((line = read_whole_line (fp)) != NULL)
        {
          char *com = NULL, *val = NULL;
          int comind;
    
          /* Parse the line.  */
          switch (parse_line (line, &com, &val, &comind))
            {
            case line_ok:
              /* If everything is OK, set the value.  */
              if (!setval_internal_tilde (comind, com, val))
                {
                  fprintf (stderr, _("%s: Error in %s at line %d.\n"),
                           exec_name, file, ln);
                  ++errcnt;
                }
              break;
            case line_syntax_error:
              fprintf (stderr, _("%s: Syntax error in %s at line %d.\n"),
                       exec_name, file, ln);
              ++errcnt;
              break;
            case line_unknown_command:
              fprintf (stderr, _("%s: Unknown command %s in %s at line %d.\n"),
                       exec_name, quote (com), file, ln);
              ++errcnt;
              break;
            case line_empty:
              break;
            default:
              abort ();
            }
          xfree_null (com);
          xfree_null (val);
          xfree (line);
          ++ln;
        }
      fclose (fp);
    
      return errcnt == 0;
    }

    parse_line():

    static enum parse_line
    parse_line (const char *line, char **com, char **val, int *comind)
    {
      const char *p;
      const char *end = line + strlen (line);
      const char *cmdstart, *cmdend;
      const char *valstart, *valend;
    
      char *cmdcopy;
      int ind;
    
      /* Skip leading and trailing whitespace.  */
      while (*line && c_isspace (*line))
        ++line;
      while (end > line && c_isspace (end[-1]))
        --end;
    
      /* Skip empty lines and comments.  */
      if (!*line || *line == '#')
        return line_empty;
    
      p = line;
    
      cmdstart = p;
      while (p < end && (c_isalnum (*p) || *p == '_' || *p == '-'))
        ++p;
      cmdend = p;
    
      /* Skip '=', as well as any space before or after it. */
      while (p < end && c_isspace (*p))
        ++p;
      if (p == end || *p != '=')
        return line_syntax_error;
      ++p;
      while (p < end && c_isspace (*p))
        ++p;
    
      valstart = p;
      valend   = end;
    
      /* The syntax is valid (even though the command might not be).  Fill
         in the command name and value.  */
      *com = strdupdelim (cmdstart, cmdend);
      *val = strdupdelim (valstart, valend);
    
      /* The line now known to be syntactically correct.  Check whether
         the command is valid.  */
      BOUNDED_TO_ALLOCA (cmdstart, cmdend, cmdcopy);
      dehyphen (cmdcopy);
      ind = command_by_name (cmdcopy);
      if (ind == -1)
        return line_unknown_command;
    
      /* Report success to the caller. */
      *comind = ind;
      return line_ok;
    }
    
    




  • 相关阅读:
    转载:Tomcat发布项目时,浏览器地址栏图标的问题
    获取刚插入的主键
    便利map的四种方法
    Caused by: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
    js限制输入框只能输入整数、小数
    js如何判断小数
    错误: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils
    Tomcat内存溢出的三种情况及解决办法分析
    JAVA正则表达式语法大全
    HTTP Status 404(The requested resource is not available)异常解决
  • 原文地址:https://www.cnblogs.com/eaglegeek/p/4558018.html
Copyright © 2020-2023  润新知