|
@@ -8,6 +8,7 @@ |
|
|
#include <context.hpp> |
|
|
#include <context.hpp> |
|
|
#include <patch.hpp> |
|
|
#include <patch.hpp> |
|
|
#include <asset.hpp> |
|
|
#include <asset.hpp> |
|
|
|
|
|
#include <system.hpp> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace rack { |
|
|
namespace rack { |
|
@@ -491,14 +492,17 @@ void save(std::string path) { |
|
|
json_t* rootJ = toJson(); |
|
|
json_t* rootJ = toJson(); |
|
|
if (!rootJ) |
|
|
if (!rootJ) |
|
|
return; |
|
|
return; |
|
|
|
|
|
DEFER({json_decref(rootJ);}); |
|
|
|
|
|
|
|
|
FILE* file = std::fopen(path.c_str(), "w"); |
|
|
|
|
|
|
|
|
std::string tmpPath = path + ".tmp"; |
|
|
|
|
|
FILE* file = std::fopen(tmpPath.c_str(), "w"); |
|
|
if (!file) |
|
|
if (!file) |
|
|
return; |
|
|
return; |
|
|
DEFER({std::fclose(file);}); |
|
|
|
|
|
|
|
|
|
|
|
json_dumpf(rootJ, file, JSON_INDENT(2)); |
|
|
json_dumpf(rootJ, file, JSON_INDENT(2)); |
|
|
json_decref(rootJ); |
|
|
|
|
|
|
|
|
std::fclose(file); |
|
|
|
|
|
system::remove(path); |
|
|
|
|
|
system::rename(tmpPath, path); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void load(std::string path) { |
|
|
void load(std::string path) { |
|
@@ -515,9 +519,9 @@ void load(std::string path) { |
|
|
json_t* rootJ = json_loadf(file, 0, &error); |
|
|
json_t* rootJ = json_loadf(file, 0, &error); |
|
|
if (!rootJ) |
|
|
if (!rootJ) |
|
|
throw Exception("Settings file has invalid JSON at %d:%d %s", error.line, error.column, error.text); |
|
|
throw Exception("Settings file has invalid JSON at %d:%d %s", error.line, error.column, error.text); |
|
|
|
|
|
DEFER({json_decref(rootJ);}); |
|
|
|
|
|
|
|
|
fromJson(rootJ); |
|
|
fromJson(rootJ); |
|
|
json_decref(rootJ); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|