示例#1
0
int cbparse_entry_devtype(void *pArg, const char *p) {
  int rc = 0;
  PARSE_ENTRY_DATA_T *pEntryData = (PARSE_ENTRY_DATA_T *) pArg;

  //fprintf(stderr, "entry '%s'\n", p);

  if(!strncasecmp(p, DEVFILE_KEY_DEVICE, strlen(DEVFILE_KEY_DEVICE))) {

    if((p = strutil_skip_key(p, strlen(DEVFILE_KEY_DEVICE)))) {
      p = avc_dequote(p, NULL, 0);
      strncpy(pEntryData->devname, p, sizeof(pEntryData->devname) - 1);
      pEntryData->flags |= PARSE_FLAG_HAVE_DEVNAME; 
    }

  } else if(!strncasecmp(p, DEVFILE_KEY_METHODS, strlen(DEVFILE_KEY_METHODS))) {

    if((p = strutil_skip_key(p, strlen(DEVFILE_KEY_METHODS)))) {
      p = avc_dequote(p, NULL, 0);

      if(strutil_parse_csv(cbparse_entry_devtype_method, pEntryData, p) < 0) {
        LOG(X_WARNING("Failed to parse device type method(s) '%s'"), p);
      }
      //fprintf(stderr, "%s %d %d %d %d\n", pEntryData->devname, pEntryData->methods[0], pEntryData->methods[1], pEntryData->methods[2], pEntryData->methods[3]);

      pEntryData->flags |= PARSE_FLAG_HAVE_METHOD; 
    }

  } else if(!strncasecmp(p, DEVFILE_KEY_METHOD, strlen(DEVFILE_KEY_METHOD))) {

    if((p = strutil_skip_key(p, strlen(DEVFILE_KEY_METHOD)))) {
      p = avc_dequote(p, NULL, 0);

      pEntryData->methods[0] = devtype_methodfromstr(p);
      pEntryData->flags |= PARSE_FLAG_HAVE_METHOD; 
    }

  } else if(!strncasecmp(p, DEVFILE_KEY_TYPE, strlen(DEVFILE_KEY_TYPE))) {

    if((p = strutil_skip_key(p, strlen(DEVFILE_KEY_TYPE)))) {
      p = avc_dequote(p, NULL, 0);
      pEntryData->devtype = devtype_typefromstr(p);
      pEntryData->flags |= PARSE_FLAG_HAVE_DEVTYPE; 
    }

  } else if(!strncasecmp(p, DEVFILE_KEY_MATCH, strlen(DEVFILE_KEY_MATCH))) {

    if((p = strutil_skip_key(p, strlen(DEVFILE_KEY_MATCH)))) {
      p = avc_dequote(p, NULL, 0);
      strncpy(pEntryData->strmatch, p, sizeof(pEntryData->strmatch) - 1);
      pEntryData->flags |= PARSE_FLAG_HAVE_MATCH; 
    }

  }

  return rc;
}
示例#2
0
static const char *store_parse_entry(const char *p, 
                               const char *key, 
                               int *pflags, 
                               int flag,  
                               char *buf, 
                               unsigned int bufsz) {

  if((p = strutil_skip_key(p, strlen(key))) && (p = avc_dequote(p, NULL, 0))) {

    if(buf && bufsz > 0) {
      strncpy(buf, p, bufsz - 1);
    }
    if(pflags && flag != 0) {
      *pflags |= flag;
    }
  }

  return p;
}