/*
- Copyright (C) 2015-2018 "IoT.bzh"
+ Copyright (C) 2015-2019 "IoT.bzh"
author: José Bollo <jose.bollo@iot.bzh>
struct locale_folder {
struct locale_folder *parent;
size_t length;
- char name[1];
+ char name[];
};
struct locale_container {
struct locale_root *root;
struct locale_search_node *head;
int refcount;
- char definition[1];
+ char definition[];
};
struct locale_root {
if (folders != NULL) {
container->folders = folders;
length = strlen(name);
- folders[count] = malloc(sizeof **folders + length);
+ folders[count] = malloc(sizeof **folders + 1 + length);
if (folders[count] != NULL) {
folders[count]->parent = NULL;
folders[count]->length = length;
*/
static int init_container(struct locale_container *container, int dirfd)
{
- int rc, sfd;
+ int rc = 0, sfd;
DIR *dir;
struct dirent *dent;
struct stat st;
return -1;
break;
}
- if (dent->d_type == DT_DIR || (dent->d_type == DT_UNKNOWN && fstatat(sfd, dent->d_name, &st, 0) == 0 && S_ISDIR(st.st_mode))) {
+ rc = fstatat(sfd, dent->d_name, &st, 0);
+ if (rc == 0 && S_ISDIR(st.st_mode)) {
/* directory aka folder */
if (dent->d_name[0] == '.' && (dent->d_name[1] == 0 || (dent->d_name[1] == '.' && dent->d_name[2] == 0))) {
/* nothing to do for special directories, basic detection, improves if needed */
struct locale_search_node *node;
/* allocate the structure */
- search = malloc(sizeof *search + length);
+ search = malloc(sizeof *search + 1 + length);
if (search == NULL) {
errno = ENOMEM;
} else {