Scripting: A slew of buildfixes

This commit is contained in:
Vicki Pfau 2023-02-08 02:37:35 -08:00
parent 292ae8dcf8
commit e3e0957f14
2 changed files with 36 additions and 3 deletions

View File

@ -779,6 +779,12 @@ if(ENABLE_SCRIPTING)
list(APPEND DEPENDENCY_LIB json-c::json-c) list(APPEND DEPENDENCY_LIB json-c::json-c)
get_target_property(JSON_C_SONAME json-c::json-c IMPORTED_SONAME_NONE) get_target_property(JSON_C_SONAME json-c::json-c IMPORTED_SONAME_NONE)
string(SUBSTRING "${JSON_C_SONAME}" 13 -1 JSON_C_SOVER) string(SUBSTRING "${JSON_C_SONAME}" 13 -1 JSON_C_SOVER)
# This is only needed on 0.15, but the target unhelpfully does not contain version info
get_target_property(JSON_C_INCLUDE_DIR json-c::json-c INTERFACE_INCLUDE_DIRECTORIES)
if(NOT JSON_C_INCLUDE_DIR MATCHES json-c$)
include_directories(AFTER "${JSON_C_INCLUDE_DIR}/json-c")
endif()
else() else()
if(${json-c_VERSION} VERSION_LESS 0.13.0) if(${json-c_VERSION} VERSION_LESS 0.13.0)
set(JSON_C_SOVER 3) set(JSON_C_SOVER 3)

View File

@ -140,7 +140,14 @@ void mScriptStorageGetBucketPath(const char* bucket, char* out) {
mCoreConfigDirectory(out, PATH_MAX); mCoreConfigDirectory(out, PATH_MAX);
strncat(out, PATH_SEP "storage" PATH_SEP, PATH_MAX); strncat(out, PATH_SEP "storage" PATH_SEP, PATH_MAX);
#ifdef _WIN32
// TODO: Move this to vfs somewhere
WCHAR wout[MAX_PATH];
MultiByteToWideChar(CP_UTF8, 0, out, -1, wout, MAX_PATH);
CreateDirectoryW(wout, NULL);
#else
mkdir(out, 0755); mkdir(out, 0755);
#endif
char suffix[STORAGE_LEN_MAX + 6]; char suffix[STORAGE_LEN_MAX + 6];
snprintf(suffix, sizeof(suffix), "%s.json", bucket); snprintf(suffix, sizeof(suffix), "%s.json", bucket);
@ -169,8 +176,12 @@ static struct json_object* _tableToJson(struct mScriptValue* rootVal) {
struct json_object* obj; struct json_object* obj;
ok = mScriptStorageToJson(value, &obj); ok = mScriptStorageToJson(value, &obj);
if (!ok || json_object_object_add(rootObj, ckey, obj) < 0) { if (ok) {
ok = false; #if JSON_C_VERSION_NUM >= (13 << 8)
ok = json_object_object_add(rootObj, ckey, obj) >= 0;
#else
json_object_object_add(rootObj, ckey, obj);
#endif
} }
} while (mScriptTableIteratorNext(rootVal, &iter) && ok); } while (mScriptTableIteratorNext(rootVal, &iter) && ok);
} }
@ -198,7 +209,15 @@ bool mScriptStorageToJson(struct mScriptValue* value, struct json_object** out)
obj = json_object_new_boolean(value->value.u32); obj = json_object_new_boolean(value->value.u32);
break; break;
} }
#if JSON_C_VERSION_NUM >= (14 << 8)
obj = json_object_new_uint64(value->value.u64); obj = json_object_new_uint64(value->value.u64);
#else
if (value->value.u64 < (uint64_t) INT64_MAX) {
obj = json_object_new_int64(value->value.u64);
} else {
obj = json_object_new_double(value->value.u64);
}
#endif
break; break;
case mSCRIPT_TYPE_FLOAT: case mSCRIPT_TYPE_FLOAT:
obj = json_object_new_double(value->value.f64); obj = json_object_new_double(value->value.f64);
@ -207,7 +226,11 @@ bool mScriptStorageToJson(struct mScriptValue* value, struct json_object** out)
obj = json_object_new_string_len(value->value.string->buffer, value->value.string->size); obj = json_object_new_string_len(value->value.string->buffer, value->value.string->size);
break; break;
case mSCRIPT_TYPE_LIST: case mSCRIPT_TYPE_LIST:
#if JSON_C_VERSION_NUM >= (15 << 8)
obj = json_object_new_array_ext(mScriptListSize(value->value.list)); obj = json_object_new_array_ext(mScriptListSize(value->value.list));
#else
obj = json_object_new_array();
#endif
for (i = 0; i < mScriptListSize(value->value.list); ++i) { for (i = 0; i < mScriptListSize(value->value.list); ++i) {
struct json_object* listObj; struct json_object* listObj;
ok = mScriptStorageToJson(mScriptListGetPointer(value->value.list, i), &listObj); ok = mScriptStorageToJson(mScriptListGetPointer(value->value.list, i), &listObj);
@ -242,6 +265,10 @@ bool mScriptStorageToJson(struct mScriptValue* value, struct json_object** out)
return ok; return ok;
} }
#ifndef JSON_C_TO_STRING_PRETTY_TAB
#define JSON_C_TO_STRING_PRETTY_TAB 0
#endif
static bool _mScriptStorageBucketFlushVF(struct mScriptStorageBucket* bucket, struct VFile* vf) { static bool _mScriptStorageBucketFlushVF(struct mScriptStorageBucket* bucket, struct VFile* vf) {
struct json_object* rootObj; struct json_object* rootObj;
bool ok = mScriptStorageToJson(bucket->root, &rootObj); bool ok = mScriptStorageToJson(bucket->root, &rootObj);
@ -250,7 +277,7 @@ static bool _mScriptStorageBucketFlushVF(struct mScriptStorageBucket* bucket, st
return false; return false;
} }
const char* json = json_object_to_json_string_ext(rootObj, JSON_C_TO_STRING_PRETTY_TAB); const char* json = json_object_to_json_string_ext(rootObj, JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_PRETTY_TAB);
if (!json) { if (!json) {
json_object_put(rootObj); json_object_put(rootObj);
vf->close(vf); vf->close(vf);