return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+ const char *fopen_mode = "r";
+ if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+ fopen_mode = "a+";
+ }
- FILE *fp = fopen(set->load, "r");
+ FILE *fp = fopen(set->load, fopen_mode);
if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno));
return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+ const char *fopen_mode = "r";
+ if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+ fopen_mode = "a+";
+ }
- FILE *fp = fopen(set->load, "r");
+ FILE *fp = fopen(set->load, fopen_mode);
if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno));
return 0;
SCLogConfig("dataset: %s loading from '%s'", set->name, set->load);
+ const char *fopen_mode = "r";
+ if (strlen(set->save) > 0 && strcmp(set->save, set->load) == 0) {
+ fopen_mode = "a+";
+ }
- FILE *fp = fopen(set->load, "r");
+ FILE *fp = fopen(set->load, fopen_mode);
if (fp == NULL) {
SCLogError(SC_ERR_DATASET, "fopen '%s' failed: %s",
set->load, strerror(errno));
} else if (strlen(save) != 0 && strlen(load) == 0) {
if (SetupSavePath(de_ctx, save, sizeof(save)) != 0)
return -1;
+ /* use 'save' logic for 'state', but put the resulting
+ * path into 'load' as well. */
+ } else if (strlen(save) != 0 && strlen(load) != 0 &&
+ strcmp(save, load) == 0) {
+ if (SetupSavePath(de_ctx, save, sizeof(save)) != 0)
+ return -1;
+ strlcpy(load, save, sizeof(load));
}
SCLogDebug("name '%s' load '%s' save '%s'", name, load, save);