diff options
author | José Bollo <jose.bollo@iot.bzh> | 2015-12-09 14:35:04 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2015-12-09 14:35:04 +0100 |
commit | bf7b5918fcc07713a29b9ca32f766b65b15a4ec2 (patch) | |
tree | a4ad318995f3213cee35a2065fc3c4911e2012dc /wgt-locales.c | |
parent | 0270b7281b783cbea5c1f0ebb4440d2be1bd79fa (diff) |
refactoring sources
Change-Id: Id6d52eee86b706958972e9b345ec0d4d1e488146
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'wgt-locales.c')
-rw-r--r-- | wgt-locales.c | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/wgt-locales.c b/wgt-locales.c deleted file mode 100644 index 9b97cc4..0000000 --- a/wgt-locales.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - Copyright 2015 IoT.bzh - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -#define _GNU_SOURCE -#include <string.h> -#include <errno.h> -#include <unistd.h> -#include <ctype.h> - -#include "wgt.h" - -struct locarr { - int count; - char **arr; -}; - -static struct locarr locarr = { 0, NULL }; - -static int add(const char *locstr, int length) -{ - int i; - char *item, **ptr; - - item = strndup(locstr, length); - if (item != NULL) { - for (i = 0 ; item[i] ; i++) - item[i] = tolower(item[i]); - for (i = 0 ; i < locarr.count ; i++) - if (!strcmp(item, locarr.arr[i])) { - free(item); - return 0; - } - - ptr = realloc(locarr.arr, (1 + locarr.count) * sizeof(locarr.arr[0])); - if (ptr) { - locarr.arr = ptr; - locarr.arr[locarr.count++] = item; - return 0; - } - free(item); - } - errno = ENOMEM; - return -1; -} - -void locales_reset() -{ - while (locarr.count) - free(locarr.arr[--locarr.count]); -} - -int locales_add(const char *locstr) -{ - const char *stop, *next; - while (*locstr) { - stop = strchrnul(locstr, ','); - next = stop + !!*stop; - while (locstr != stop) { - if (add(locstr, stop - locstr)) - return -1; - do { stop--; } while(stop > locstr && *stop != '-'); - } - locstr = next; - } - return 0; -} - -int locales_score(const char *lang) -{ - int i; - - if (lang) - for (i = 0 ; i < locarr.count ; i++) - if (!strcasecmp(lang, locarr.arr[i])) - return i; - - return INT_MAX; -} - -char *locales_locate_file(const char *filename) -{ - int i; - char path[PATH_MAX]; - char * result; - - for (i = 0 ; i < locarr.count ; i++) { - if (snprintf(path, sizeof path, "locales/%s/%s", locarr.arr[i], filename) >= (int)(sizeof path)) { - errno = EINVAL; - return NULL; - } - if (widget_has(path)) { - result = strdup(path); - if (!result) - errno = ENOMEM; - return result; - } - } - if (widget_has(filename)) { - result = strdup(filename); - if (!result) - errno = ENOMEM; - return result; - } - errno = ENOENT; - return NULL; -} - |