diff options
Diffstat (limited to 'src/crash-manager/crash-manager.c')
-rw-r--r-- | src/crash-manager/crash-manager.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/src/crash-manager/crash-manager.c b/src/crash-manager/crash-manager.c index eaafab9..3f3e089 100644 --- a/src/crash-manager/crash-manager.c +++ b/src/crash-manager/crash-manager.c @@ -275,6 +275,7 @@ static int get_config(void) dictionary *ini = NULL; char key[KEY_MAX]; int value; + int result = 1; char *value_str; system_max_use = SYSTEM_MAX_USE; @@ -368,7 +369,8 @@ static int get_config(void) crash_root_path = strdup(value_str); if (crash_root_path == NULL) { _E("strdup error: %m\n"); - return -1; + result = -1; + goto out; } } @@ -388,8 +390,9 @@ static int get_config(void) } } +out: iniparser_freedict(ini); - return 1; + return result; } static int make_dump_dir(void) @@ -485,31 +488,31 @@ static int set_prstatus() crash_info.prstatus_fd = shm_open(prstatus_name, O_RDWR | O_CREAT, 0600); if (crash_info.prstatus_fd < 0) { - _E("shm_open: %s", strerror(errno)); + _E("shm_open: %m"); goto close_fd; } ret = shm_unlink(prstatus_name); if (ret < 0) { - _E("shm_unlink: %s", strerror(errno)); + _E("shm_unlink: %m"); goto close_fd; } ret = fcntl(crash_info.prstatus_fd, F_GETFD); if (ret < 0) { - _E("fcntl(): %s", strerror(errno)); + _E("fcntl(): %m"); goto close_fd; } ret = fcntl(crash_info.prstatus_fd, F_SETFD, ret & ~FD_CLOEXEC); if (ret < 0) { - _E("fcntl(): %s", strerror(errno)); + _E("fcntl(): %m"); goto close_fd; } ret = ftruncate(crash_info.prstatus_fd, sizeof(struct elf_prstatus)); if (ret < 0) { - _E("ftruncate(): %s", strerror(errno)); + _E("ftruncate(): %m"); goto close_fd; } @@ -837,14 +840,24 @@ static int execute_minicoredump(int argc, char *argv[]) if (!dump_core) { int ret = -1; int errno_unlink = 0; + char errno_buff[128]; + char *err_str = NULL; int dirfd = open(crash_info.pfx, O_DIRECTORY); if (dirfd != -1) { ret = unlinkat(dirfd, coredump_name, 0); errno_unlink = errno; close(dirfd); } + + if (ret != 0) { + err_str = strerror_r(errno_unlink, errno_buff, sizeof(errno_buff)); + if (err_str == NULL) + _E("strerror_r() error: %m\n"); + goto out; + } + _D("Saving core disabled - removing coredump %s/%s: %s", crash_info.pfx, coredump_name, - ret == 0 ? "success" : strerror(errno_unlink)); + ret == 0 ? "success" : err_str); } out: |