X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-crash%2Flttng-crash.c;h=c3a8b778925d1de9bed8d191b1eec1324f982d2b;hp=4f1efe96dada1b00671309b1fe39358ce4bed411;hb=8726a0458b9798953279448c13d8bd60d9907be3;hpb=309fc9bf0c244ed47c4d7c3a47119e596a40eb73 diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c index 4f1efe96d..c3a8b7789 100644 --- a/src/bin/lttng-crash/lttng-crash.c +++ b/src/bin/lttng-crash/lttng-crash.c @@ -103,7 +103,7 @@ enum rb_modes { struct crash_abi_unknown { uint8_t magic[RB_CRASH_DUMP_ABI_MAGIC_LEN]; - uint64_t mmap_length; /* Overall lenght of crash record */ + uint64_t mmap_length; /* Overall length of crash record */ uint16_t endian; /* * { 0x12, 0x34 }: big endian * { 0x34, 0x12 }: little endian @@ -323,29 +323,33 @@ error: static int copy_file(const char *file_dest, const char *file_src) { - int fd_src, fd_dest; + int fd_src = -1, fd_dest = -1; ssize_t readlen, writelen; char buf[COPY_BUFLEN]; + int ret; DBG("Copy metadata file '%s' into '%s'", file_src, file_dest); fd_src = open(file_src, O_RDONLY); if (fd_src < 0) { PERROR("Error opening %s for reading", file_src); - return fd_src; + ret = -errno; + goto error; } fd_dest = open(file_dest, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if (fd_dest < 0) { PERROR("Error opening %s for writing", file_dest); - return fd_dest; + ret = -errno; + goto error; } for (;;) { readlen = lttng_read(fd_src, buf, COPY_BUFLEN); if (readlen < 0) { PERROR("Error reading input file"); - return -1; + ret = -1; + goto error; } if (!readlen) { break; @@ -353,10 +357,25 @@ int copy_file(const char *file_dest, const char *file_src) writelen = lttng_write(fd_dest, buf, readlen); if (writelen < readlen) { PERROR("Error writing to output file"); - return -1; + ret = -1; + goto error; } } - return 0; + + ret = 0; +error: + if (fd_src >= 0) { + if (close(fd_src) < 0) { + PERROR("Error closing %s", file_src); + } + } + + if (fd_dest >= 0) { + if (close(fd_dest) < 0) { + PERROR("Error closing %s", file_dest); + } + } + return ret; } static