X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-common.c;h=60e0a0fa686d3a58240dad45a0df65a1af0590a9;hb=65353dce81a629e042800bb7b86fcd869a76727e;hp=e8fe4b724ee2d3b0c379471b05a0f14dcef61005;hpb=5dd6480727cc1ecb12483fc4d971d73176505748;p=src%2Fapp-framework-binder.git diff --git a/src/afb-common.c b/src/afb-common.c index e8fe4b72..60e0a0fa 100644 --- a/src/afb-common.c +++ b/src/afb-common.c @@ -1,5 +1,5 @@ -/* - * Copyright (C) 2015 "IoT.bzh" +/* + * Copyright (C) 2015-2020 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,73 +17,68 @@ #define _GNU_SOURCE -#include -#include -#include +#include +#include +#include +#include #include "afb-common.h" +#include "locale-root.h" -/* -struct sd_event *afb_common_get_thread_event_loop() +static const char *default_locale = NULL; +static struct locale_root *rootdir = NULL; + +void afb_common_default_locale_set(const char *locale) { - sd_event *result; - int rc = sd_event_default(&result); - if (rc != 0) { - errno = -rc; - result = NULL; - } - return result; + default_locale = locale; } -*/ -static void *sdopen(void **p, int (*f)(void **)) +const char *afb_common_default_locale_get() { - if (*p == NULL) { - int rc = f(p); - if (rc < 0) { - errno = -rc; - *p = NULL; - } - } - return *p; + return default_locale; } -static struct sd_bus *sdbusopen(struct sd_bus **p, int (*f)(struct sd_bus **)) +int afb_common_rootdir_set(const char *dirname) { - if (*p == NULL) { - int rc = f(p); - if (rc < 0) { - errno = -rc; - *p = NULL; + int dirfd, rc; + struct locale_root *root; + struct locale_search *search; + + rc = -1; + dirfd = openat(AT_FDCWD, dirname, O_PATH|O_DIRECTORY); + if (dirfd < 0) { + /* TODO message */ + } else { + root = locale_root_create(dirfd); + if (root == NULL) { + /* TODO message */ + close(dirfd); } else { - rc = sd_bus_attach_event(*p, afb_common_get_event_loop(), 0); - if (rc < 0) { - sd_bus_unref(*p); - errno = -rc; - *p = NULL; + rc = 0; + if (default_locale != NULL) { + search = locale_root_search(root, default_locale, 0); + if (search == NULL) { + /* TODO message */ + } else { + locale_root_set_default_search(root, search); + locale_search_unref(search); + } } + locale_root_unref(rootdir); + rootdir = root; } } - return *p; + return rc; } -struct sd_event *afb_common_get_event_loop() +int afb_common_rootdir_get_fd() { - static sd_event *result = NULL; - return sdopen((void*)&result, (void*)sd_event_new); + return locale_root_get_dirfd(rootdir); } -struct sd_bus *afb_common_get_user_bus() +int afb_common_rootdir_open_locale(const char *filename, int flags, const char *locale) { - static struct sd_bus *result = NULL; - return sdbusopen((void*)&result, (void*)sd_bus_open_user); + return locale_root_open(rootdir, filename, flags, locale); } -struct sd_bus *afb_common_get_system_bus() -{ - static struct sd_bus *result = NULL; - return sdbusopen((void*)&result, (void*)sd_bus_open_system); -} - -