*
* Connection Manager
*
- * Copyright (C) 2007-2010 Intel Corporation. All rights reserved.
+ * Copyright (C) 2007-2012 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
off_t ptrlen, keylen;
int fd;
- fd = open(pathname, O_RDONLY);
+ fd = open(pathname, O_RDONLY | O_CLOEXEC);
if (fd < 0)
return NULL;
}
map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (map == NULL || map == MAP_FAILED) {
+ if (!map || map == MAP_FAILED) {
close(fd);
return NULL;
}
}
ptr = memchr(ptr + 1, key[0], ptrlen - 1);
- if (ptr == NULL)
+ if (!ptr)
break;
ptrlen = st.st_size - (ptr - map);
}
- if (ptr != NULL) {
+ if (ptr) {
char *end, *val;
ptrlen = st.st_size - (ptr - map);
end = memchr(ptr, '\n', ptrlen);
- if (end != NULL)
+ if (end)
ptrlen = end - ptr;
val = memchr(ptr, '"', ptrlen);
- if (val != NULL) {
+ if (val) {
end = memchr(val + 1, '"', end - val - 1);
- if (end != NULL)
+ if (end)
str = g_strndup(val + 1, end - val - 1);
else
str = NULL;
void *dst_map;
int fd, result;
- fd = open(pathname, O_RDONLY);
+ fd = open(pathname, O_RDONLY | O_CLOEXEC);
if (fd < 0)
return -1;
}
dst_map = mmap(0, dst_st.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (dst_map == NULL || dst_map == MAP_FAILED) {
+ if (!dst_map || dst_map == MAP_FAILED) {
close(fd);
return -1;
- }
+ }
result = memcmp(src_map, dst_map, src_st->st_size);
DIR *dir;
struct dirent *d;
char *str, pathname[PATH_MAX];
+ struct stat buf;
+ int ret;
- if (subpath == NULL)
- strncpy(pathname, basepath, sizeof(pathname));
+ if (!subpath)
+ strncpy(pathname, basepath, sizeof(pathname) - 1);
else
snprintf(pathname, sizeof(pathname),
"%s/%s", basepath, subpath);
dir = opendir(pathname);
- if (dir == NULL)
+ if (!dir)
return NULL;
while ((d = readdir(dir))) {
switch (d->d_type) {
case DT_REG:
- if (subpath == NULL)
+ if (!subpath)
snprintf(pathname, PATH_MAX,
"%s/%s", basepath, d->d_name);
else
return str;
}
break;
+ case DT_UNKNOWN:
+ /*
+ * If there is no d_type support use fstatat()
+ * to check if d_name is directory
+ */
+ ret = fstatat(dirfd(dir), d->d_name, &buf, 0);
+ if (ret < 0)
+ continue;
+ if ((buf.st_mode & S_IFDIR) == 0)
+ continue;
+ /* fall through */
case DT_DIR:
- if (subpath == NULL)
+ if (!subpath)
strncpy(pathname, d->d_name, sizeof(pathname));
else
snprintf(pathname, sizeof(pathname),
"%s/%s", subpath, d->d_name);
str = find_origin(src_map, src_st, basepath, pathname);
- if (str != NULL) {
+ if (str) {
closedir(dir);
return str;
}
DBG("sysconfig zone %s", zone);
- fd = open(ETC_LOCALTIME, O_RDONLY);
+ fd = open(ETC_LOCALTIME, O_RDONLY | O_CLOEXEC);
if (fd < 0) {
g_free(zone);
return NULL;
if (S_ISREG(st.st_mode)) {
map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (map == NULL || map == MAP_FAILED) {
+ if (!map || map == MAP_FAILED) {
g_free(zone);
zone = NULL;
goto done;
}
- if (zone != NULL) {
+ if (zone) {
char pathname[PATH_MAX];
snprintf(pathname, PATH_MAX, "%s/%s",
}
}
- if (zone == NULL)
+ if (!zone)
zone = find_origin(map, &st, USR_SHARE_ZONEINFO, NULL);
munmap(map, st.st_size);
unlink(pathname);
}
- fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644);
if (fd < 0)
return -EIO;
snprintf(pathname, PATH_MAX, "%s/%s", USR_SHARE_ZONEINFO, zone);
- fd = open(pathname, O_RDONLY);
+ fd = open(pathname, O_RDONLY | O_CLOEXEC);
if (fd < 0)
return -EINVAL;
}
map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (map == NULL || map == MAP_FAILED) {
+ if (!map || map == MAP_FAILED) {
close(fd);
return -EIO;
}
return -EIO;
channel = g_io_channel_unix_new(fd);
- if (channel == NULL) {
+ if (!channel) {
close(fd);
return -EIO;
}
dirname = g_path_get_dirname(ETC_LOCALTIME);
wd = inotify_add_watch(fd, dirname, IN_DONT_FOLLOW |
- IN_MODIFY | IN_MOVED_TO);
+ IN_CLOSE_WRITE | IN_MOVED_TO);
g_free(dirname);