mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-06 13:14:21 +01:00
Global: drop json-c and switch to yyjson
This commit is contained in:
@@ -119,7 +119,6 @@ static void defaultConfig(FFinstance* instance)
|
||||
ffStrbufInit(&instance->config.libGLX);
|
||||
ffStrbufInit(&instance->config.libOSMesa);
|
||||
ffStrbufInit(&instance->config.libOpenCL);
|
||||
ffStrbufInit(&instance->config.libJSONC);
|
||||
ffStrbufInit(&instance->config.libfreetype);
|
||||
ffStrbufInit(&instance->config.libPulse);
|
||||
ffStrbufInit(&instance->config.libwlanapi);
|
||||
@@ -323,7 +322,6 @@ static void destroyConfig(FFinstance* instance)
|
||||
ffStrbufDestroy(&instance->config.libGLX);
|
||||
ffStrbufDestroy(&instance->config.libOSMesa);
|
||||
ffStrbufDestroy(&instance->config.libOpenCL);
|
||||
ffStrbufDestroy(&instance->config.libJSONC);
|
||||
ffStrbufDestroy(&instance->config.libfreetype);
|
||||
ffStrbufDestroy(&instance->config.libPulse);
|
||||
ffStrbufDestroy(&instance->config.libwlanapi);
|
||||
@@ -411,9 +409,6 @@ void ffListFeatures()
|
||||
#ifdef FF_HAVE_OPENCL
|
||||
"opencl\n"
|
||||
#endif
|
||||
#ifdef FF_HAVE_LIBJSONC
|
||||
"json-c\n"
|
||||
#endif
|
||||
#ifdef FF_HAVE_FREETYPE
|
||||
"freetype\n"
|
||||
#endif
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#include "common/json.h"
|
||||
|
||||
#ifdef FF_HAVE_JSONC
|
||||
|
||||
#include "common/thread.h"
|
||||
|
||||
static const FFJsonLibrary* loadLibSymbols(const FFinstance* instance)
|
||||
{
|
||||
assert(instance);
|
||||
|
||||
static FFJsonLibrary lib;
|
||||
FF_LIBRARY_LOAD(libjsonc, &instance->config.libJSONC, NULL,
|
||||
#ifdef _WIN32
|
||||
"libjson-c-5" FF_LIBRARY_EXTENSION, -1
|
||||
#else
|
||||
"libjson-c" FF_LIBRARY_EXTENSION, 5
|
||||
#endif
|
||||
)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_tokener_parse, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_is_type, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_array, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_boolean, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_double, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_int, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_string_len, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_string, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_get_object, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_object_del, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_object_get, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_object_length, NULL)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR(libjsonc, lib, json_object_put, NULL)
|
||||
libjsonc = NULL; // don't dlclose automatically
|
||||
return &lib;
|
||||
}
|
||||
|
||||
const FFJsonLibrary* ffJsonLib = NULL;
|
||||
bool ffJsonLoadLibrary(const FFinstance* instance)
|
||||
{
|
||||
static bool loaded = false;
|
||||
static FFThreadMutex mutex = FF_THREAD_MUTEX_INITIALIZER;
|
||||
|
||||
if (!loaded)
|
||||
{
|
||||
ffThreadMutexLock(&mutex);
|
||||
|
||||
if(!loaded)
|
||||
{
|
||||
loaded = true;
|
||||
ffJsonLib = loadLibSymbols(instance);
|
||||
}
|
||||
|
||||
ffThreadMutexUnlock(&mutex);
|
||||
}
|
||||
return !!ffJsonLib;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,130 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef FF_HAVE_JSONC
|
||||
|
||||
#include "fastfetch.h"
|
||||
#include "common/library.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <json-c/json.h>
|
||||
|
||||
typedef struct FFJsonLibrary
|
||||
{
|
||||
FF_LIBRARY_SYMBOL(json_tokener_parse)
|
||||
FF_LIBRARY_SYMBOL(json_object_is_type)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_array)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_boolean)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_double)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_int)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_string_len)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_string)
|
||||
FF_LIBRARY_SYMBOL(json_object_get_object)
|
||||
FF_LIBRARY_SYMBOL(json_object_object_del)
|
||||
FF_LIBRARY_SYMBOL(json_object_object_get)
|
||||
FF_LIBRARY_SYMBOL(json_object_object_length)
|
||||
FF_LIBRARY_SYMBOL(json_object_put)
|
||||
} FFJsonLibrary;
|
||||
|
||||
extern const FFJsonLibrary* ffJsonLib;
|
||||
|
||||
bool ffJsonLoadLibrary(const FFinstance* instance);
|
||||
|
||||
static inline void wrapJsoncFree(json_object** root)
|
||||
{
|
||||
assert(root);
|
||||
if (*root)
|
||||
json_object_put(*root);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
struct json_object *json_tokener_parse(const char *str)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_tokener_parse(str);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
int json_object_is_type(const json_object *obj, enum json_type type)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_is_type(obj, type);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
struct array_list *json_object_get_array(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_array(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
json_bool json_object_get_boolean(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_boolean(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
double json_object_get_double(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_double(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
int32_t json_object_get_int(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_int(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
int json_object_get_string_len(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_string_len(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
const char *json_object_get_string(json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_string(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
struct lh_table *json_object_get_object(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_get_object(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
void json_object_object_del(struct json_object *obj, const char *key)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_object_del(obj, key);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
struct json_object *json_object_object_get(const json_object *obj, const char *key)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_object_get(obj, key);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
int json_object_object_length(const json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_object_length(obj);
|
||||
}
|
||||
|
||||
extern inline __attribute__((__gnu_inline__, __always_inline__))
|
||||
int json_object_put(json_object *obj)
|
||||
{
|
||||
assert(ffJsonLib);
|
||||
return ffJsonLib->ffjson_object_put(obj);
|
||||
}
|
||||
|
||||
#endif
|
||||
+9
-13
@@ -1,33 +1,31 @@
|
||||
#include "fastfetch.h"
|
||||
#include "common/jsonconfig.h"
|
||||
|
||||
#ifdef FF_HAVE_JSONC
|
||||
|
||||
bool ffJsonConfigParseModuleArgs(const char* key, json_object* val, FFModuleArgs* moduleArgs)
|
||||
bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* moduleArgs)
|
||||
{
|
||||
if(strcasecmp(key, "key") == 0)
|
||||
{
|
||||
ffStrbufSetNS(&moduleArgs->key, (uint32_t) json_object_get_string_len(val), json_object_get_string(val));
|
||||
ffStrbufSetNS(&moduleArgs->key, (uint32_t) yyjson_get_len(val), yyjson_get_str(val));
|
||||
return true;
|
||||
}
|
||||
else if(strcasecmp(key, "format") == 0)
|
||||
{
|
||||
ffStrbufSetNS(&moduleArgs->outputFormat, (uint32_t) json_object_get_string_len(val), json_object_get_string(val));
|
||||
ffStrbufSetNS(&moduleArgs->outputFormat, (uint32_t) yyjson_get_len(val), yyjson_get_str(val));
|
||||
return true;
|
||||
}
|
||||
else if(strcasecmp(key, "error") == 0)
|
||||
{
|
||||
ffStrbufSetNS(&moduleArgs->errorFormat, (uint32_t) json_object_get_string_len(val), json_object_get_string(val));
|
||||
ffStrbufSetNS(&moduleArgs->errorFormat, (uint32_t) yyjson_get_len(val), yyjson_get_str(val));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* ffJsonConfigParseEnum(json_object* val, int* result, FFKeyValuePair pairs[])
|
||||
const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair pairs[])
|
||||
{
|
||||
if (json_object_is_type(val, json_type_int))
|
||||
if (yyjson_is_int(val))
|
||||
{
|
||||
int intVal = json_object_get_int(val);
|
||||
int intVal = yyjson_get_int(val);
|
||||
|
||||
for (const FFKeyValuePair* pPair = pairs; pPair->key; ++pPair)
|
||||
{
|
||||
@@ -40,9 +38,9 @@ const char* ffJsonConfigParseEnum(json_object* val, int* result, FFKeyValuePair
|
||||
|
||||
return "Invalid enum integer";
|
||||
}
|
||||
else if (json_object_is_type(val, json_type_string))
|
||||
else if (yyjson_is_str(val))
|
||||
{
|
||||
const char* strVal = json_object_get_string(val);
|
||||
const char* strVal = yyjson_get_str(val);
|
||||
for (const FFKeyValuePair* pPair = pairs; pPair->key; ++pPair)
|
||||
{
|
||||
if (strcasecmp(strVal, pPair->key) == 0)
|
||||
@@ -57,5 +55,3 @@ const char* ffJsonConfigParseEnum(json_object* val, int* result, FFKeyValuePair
|
||||
else
|
||||
return "Invalid enum value type; must be a string or integer";
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef FF_HAVE_JSONC
|
||||
#include <yyjson.h>
|
||||
|
||||
#include "common/json.h"
|
||||
|
||||
bool ffJsonConfigParseModuleArgs(const char* key, json_object* val, FFModuleArgs* moduleArgs);
|
||||
const char* ffJsonConfigParseEnum(json_object* val, int* result, FFKeyValuePair pairs[]);
|
||||
|
||||
#endif
|
||||
bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* moduleArgs);
|
||||
const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair pairs[]);
|
||||
|
||||
Reference in New Issue
Block a user