summaryrefslogtreecommitdiff
path: root/src/crash-manager/crash-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/crash-manager/crash-manager.c')
-rw-r--r--src/crash-manager/crash-manager.c29
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: