int devtype_defaultcfg() { STREAM_DEVICE_T *pdev = NULL; unsigned int idx; enum STREAM_METHOD methods[STREAM_DEVICE_METHODS_MAX]; if(g_devtypes) { devtype_free(g_devtypes); g_devtypes = NULL; } for(idx = 0; idx < STREAM_DEVICE_METHODS_MAX; idx++) { methods[idx] = STREAM_METHOD_UNKNOWN; } if(!(pdev = create_device("unknown", "", "", methods, STREAM_DEVICE_TYPE_UNKNOWN))) { return -1; } g_devtypes = pdev; return 1; }
int devtype_loadcfg(const char *path) { STREAM_DEVICE_T *pdev = NULL; STREAM_DEVICE_T *pdevprev = NULL; FILE_HANDLE fp; char buf[1024]; const char *p; int linenum = 1; int count = 0; PARSE_ENTRY_DATA_T parseData; if(!path) { return -1; } if(g_devtypes) { devtype_free(g_devtypes); g_devtypes = NULL; } if((fp = fileops_Open(path, O_RDONLY)) == FILEOPS_INVALID_FP) { LOG(X_ERROR("Unable to open metafile for reading: %s"), path); return -1; } while(fileops_fgets(buf, sizeof(buf) - 1, fp)) { p = buf; while(*p == ' ' || *p == '\t') { p++; } if(*p == '#') { continue; } memset(&parseData, 0, sizeof(parseData)); if(strutil_parse_csv(cbparse_entry_devtype, &parseData, p) < 0) { LOG(X_ERROR("Failed to parse line %d in file %s"), linenum, path); devtype_free(g_devtypes); break; } else if((parseData.flags & PARSE_FLAG_HAVE_ALL)) { if(!(pdev = create_device(parseData.devname, parseData.strmatch, parseData.strmatch2, parseData.methods, parseData.devtype))) { LOG(X_ERROR("Failed to create device config from line %d"), linenum); devtype_free(g_devtypes); break; } else if(pdevprev) { pdevprev->pnext = pdev; } else { g_devtypes = pdev; } pdevprev = pdev; count++; } else if(strlen(p) > 1) { LOG(X_WARNING("Incomplete line %d in file %s"), linenum, path); } linenum++; } fileops_Close(fp); LOG(X_DEBUG("Read %d device profiles from %s"), count, path); //devtype_dump(g_devtypes); return count; }
static void devtype_freep(struct devtype **devtypep) { devtype_free(*devtypep); }