示例#1
0
int rtems_bsd_rc_conf_find(rtems_bsd_rc_conf*           rc_conf,
                           const char*                  expression,
                           rtems_bsd_rc_conf_argc_argv* argc_argv)
{
  if (argc_argv_valid(argc_argv) < 0)
    return -1;
  free(rc_conf->find_regex);
  rc_conf->find_regex = strdup(expression);
  rc_conf->line = 0;
  if (rc_conf->find_regex == NULL) {
    errno = ENOMEM;
    return -1;
  }
  return rtems_bsd_rc_conf_find_next(rc_conf, argc_argv);
}
示例#2
0
static int
test_service(rtems_bsd_rc_conf* rc_conf)
{
  rtems_bsd_rc_conf_argc_argv* aa;
  int                          r;

  test_service_last_num = 1;

  assert((aa = rtems_bsd_rc_conf_argc_argv_create()) != NULL);
  r = rtems_bsd_rc_conf_find(rc_conf, "test_regex_.*", aa);
  assert(r == 0 || (r < 0 && errno == ENOENT));
  if (r < 0 && errno == ENOENT)
    return -1;

  while (r == 0) {
    int num;
    int arg;
    rtems_bsd_rc_conf_print_cmd(rc_conf, "test_service", aa->argc, aa->argv);
    assert(strncasecmp(aa->argv[0], "test_regex_", strlen("test_regex_")) == 0);
    num = atoi(aa->argv[0] + strlen("test_regex_"));
    assert(num == (test_regex_last_num + 1));
    assert((num - 1) < NUM_OF_TEST_REGEX_);
    for (arg = 0; arg < aa->argc; ++arg) {
      const char* a = aa->argv[arg];
      size_t      l = strlen(a);
      if (l > 0) {
        assert(!isspace(a[0]));
        assert(!isspace(a[l - 1]));
        assert(a[0] != '"');
        assert(a[l - 1] != '"');
      }
    }
    test_regex_results[num - 1] = true;
    ++test_regex_last_num;
    r = rtems_bsd_rc_conf_find_next(rc_conf, aa);
    assert(r == 0 || (r < 0 && errno == ENOENT));
  }
  rtems_bsd_rc_conf_argc_argv_destroy(aa);
  puts("test_service done");
  return 0;
}