X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-common.c;h=087a6285795862b04ce04eb18a319bfbeea68cc6;hb=9fe2dfd3c4df334607083f989346090e1051a565;hp=3bd5514e67c5805f59b44fe8c7acb702f20ce4de;hpb=c7e9786d408f13d8f8f43c6b68da916bbb1ed5f3;p=src%2Fapp-framework-binder.git diff --git a/src/afb-common.c b/src/afb-common.c index 3bd5514e..087a6285 100644 --- a/src/afb-common.c +++ b/src/afb-common.c @@ -1,5 +1,5 @@ -/* - * Copyright (C) 2015, 2016 "IoT.bzh" +/* + * Copyright (C) 2015, 2016, 2017 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,11 +17,20 @@ #define _GNU_SOURCE +#include +#include +#include +#include #include #include #include #include "afb-common.h" +#include "locale-root.h" +#include "jobs.h" + +static const char *default_locale = NULL; +static struct locale_root *rootdir = NULL; /* struct sd_event *afb_common_get_thread_event_loop() @@ -34,7 +43,6 @@ struct sd_event *afb_common_get_thread_event_loop() } return result; } -*/ static void *sdopen(void **p, int (*f)(void **)) { @@ -47,6 +55,7 @@ static void *sdopen(void **p, int (*f)(void **)) } return *p; } +*/ static struct sd_bus *sdbusopen(struct sd_bus **p, int (*f)(struct sd_bus **)) { @@ -69,8 +78,7 @@ static struct sd_bus *sdbusopen(struct sd_bus **p, int (*f)(struct sd_bus **)) struct sd_event *afb_common_get_event_loop() { - static struct sd_event *result = NULL; - return sdopen((void*)&result, (void*)sd_event_new); + return jobs_get_sd_event(); } struct sd_bus *afb_common_get_user_bus() @@ -85,5 +93,57 @@ struct sd_bus *afb_common_get_system_bus() return sdbusopen((void*)&result, (void*)sd_bus_open_system); } +void afb_common_default_locale_set(const char *locale) +{ + default_locale = locale; +} + +const char *afb_common_default_locale_get() +{ + return default_locale; +} + +int afb_common_rootdir_set(const char *dirname) +{ + 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 = 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 rc; +} + +int afb_common_rootdir_get_fd() +{ + return locale_root_get_dirfd(rootdir); +} + +int afb_common_rootdir_open_locale(const char *filename, int flags, const char *locale) +{ + return locale_root_open(rootdir, filename, flags, locale); +}