X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftimezone.c;h=8e912670e9c2ed35579c0c08648cece33f5c8788;hb=70730f50e09cac648b1c3b48f0a1e6ed40cc510f;hp=5b17c005381b6009782316d742a0f0139e8d9eec;hpb=c94b607044db60e5ff6a4b0a861a90bee35b3bc0;p=platform%2Fupstream%2Fconnman.git diff --git a/src/timezone.c b/src/timezone.c old mode 100644 new mode 100755 index 5b17c00..8e91267 --- a/src/timezone.c +++ b/src/timezone.c @@ -2,7 +2,7 @@ * * 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 @@ -59,7 +59,7 @@ static char *read_key_file(const char *pathname, const char *key) } 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; } @@ -80,25 +80,25 @@ static char *read_key_file(const char *pathname, const char *key) } 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; @@ -136,10 +136,10 @@ static int compare_file(void *src_map, struct stat *src_st, } 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); @@ -156,15 +156,17 @@ static char *find_origin(void *src_map, struct stat *src_st, 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))) { @@ -176,7 +178,7 @@ static char *find_origin(void *src_map, struct stat *src_st, switch (d->d_type) { case DT_REG: - if (subpath == NULL) + if (!subpath) snprintf(pathname, PATH_MAX, "%s/%s", basepath, d->d_name); else @@ -191,15 +193,26 @@ static char *find_origin(void *src_map, struct stat *src_st, 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; } @@ -234,14 +247,14 @@ char *__connman_timezone_lookup(void) 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", @@ -253,7 +266,7 @@ char *__connman_timezone_lookup(void) } } - if (zone == NULL) + if (!zone) zone = find_origin(map, &st, USR_SHARE_ZONEINFO, NULL); munmap(map, st.st_size); @@ -317,7 +330,7 @@ int __connman_timezone_change(const char *zone) } 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; } @@ -401,7 +414,7 @@ int __connman_timezone_init(void) return -EIO; channel = g_io_channel_unix_new(fd); - if (channel == NULL) { + if (!channel) { close(fd); return -EIO; } @@ -419,7 +432,7 @@ int __connman_timezone_init(void) 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);