{
__u8 buf[INTERNAL_LOG_MAX_BYTE_TRANSFER];
__u8 head_buf[INTERNAL_LOG_MAX_BYTE_TRANSFER];
- char file_path[PATH_MAX] = {0};
+ _cleanup_free_ char *file_path = NULL;
char file_name[] = "AssertLog.bin";
struct assert_dump_header *ad = (struct assert_dump_header *) head_buf;
struct nvme_passthru_cmd cmd = {
if (err)
return err;
- snprintf(file_path, sizeof(file_path), "%.*s/%s",
- (int) (sizeof(file_path) - sizeof(file_name) - 1), ilog->cfg->out_dir, file_name);
+ if (asprintf(&file_path, "%.*s/%s",
+ (int) (sizeof(file_path) - sizeof(file_name) - 1),
+ ilog->cfg->out_dir, file_name) < 0)
+ return -errno;
output = open(file_path, O_WRONLY | O_CREAT | O_TRUNC, LOG_FILE_PERMISSION);
if (output < 0)
return -errno;
{
__u8 buf[INTERNAL_LOG_MAX_BYTE_TRANSFER];
__u8 head_buf[INTERNAL_LOG_MAX_BYTE_TRANSFER];
- char file_path[PATH_MAX] = {0};
+ _cleanup_free_ char *file_path = NULL;
struct event_dump_header *ehdr = (struct event_dump_header *) head_buf;
struct nvme_passthru_cmd cmd = {
.opcode = 0xd2,
err = read_header(&cmd, dev_fd(ilog->dev));
if (err)
return err;
- snprintf(file_path, sizeof(file_path) - 1, "%s/EventLog.bin", ilog->cfg->out_dir);
+ if (asprintf(&file_path, "%s/EventLog.bin", ilog->cfg->out_dir))
+ return -errno;
output = open(file_path, O_WRONLY | O_CREAT | O_TRUNC, LOG_FILE_PERMISSION);
if (output < 0)
return -errno;
int err = 0;
__u32 count, core_num;
__u8 buf[INTERNAL_LOG_MAX_BYTE_TRANSFER];
- char file_path[PATH_MAX] = {0};
+ _cleanup_free_ char *file_path = NULL;
struct nlog_dump_header_common *nlog_header = (struct nlog_dump_header_common *)buf;
struct nvme_passthru_cmd cmd = {
.opcode = 0xd2,
count = nlog_header->totalnlogs;
core_num = core < 0 ? nlog_header->corecount : 0;
if (!header_size) {
- snprintf(file_path, sizeof(file_path) - 1, "%s/NLog.bin",
- ilog->cfg->out_dir);
- output = open(file_path, O_WRONLY | O_CREAT | O_TRUNC,
- LOG_FILE_PERMISSION);
- if (output < 0)
+ if (asprintf(&file_path, "%s/NLog.bin", ilog->cfg->out_dir) >= 0) {
+ output = open(file_path, O_WRONLY | O_CREAT | O_TRUNC,
+ LOG_FILE_PERMISSION);
+ if (output < 0)
+ return -errno;
+ } else
return -errno;
header_size = get_nlog_header_size(nlog_header);
is_open = true;
print_nlog_header(buf);
cmd.cdw13 = 0x400;
err = cmd_dump_repeat(&cmd, nlog_header->nlogbytesize / 4,
- output, dev_fd(ilog->dev), true);
+ output, dev_fd(ilog->dev), true);
if (err)
break;
} while (++log_select.selectNlog < count);
int ensure_dir(const char *parent_dir_name, const char *name)
{
- char file_path[PATH_MAX] = {0};
+ _cleanup_free_ char *file_path = NULL;
struct stat sb;
- snprintf(file_path, sizeof(file_path) - 1, "%s/%s", parent_dir_name, name);
+ if (asprintf(&file_path, "%s/%s", parent_dir_name, name) < 0)
+ return -errno;
+
if (!(stat(file_path, &sb) == 0 && S_ISDIR(sb.st_mode))) {
if (mkdir(file_path, 777) != 0) {
perror(file_path);
return -errno;
}
}
+
return 0;
}
const char *file_name, __u8 *buffer, size_t buf_size)
{
_cleanup_fd_ int output = -1;
- char file_path[PATH_MAX] = {0};
+ _cleanup_free_ char *file_path = NULL;
size_t bytes_remaining = 0;
ensure_dir(parent_dir_name, subdir_name);
- snprintf(file_path, sizeof(file_path) - 1, "%s/%s/%s", parent_dir_name, subdir_name,
- file_name);
+ if (asprintf(&file_path, "%s/%s/%s", parent_dir_name, subdir_name, file_name) < 0)
+ return -errno;
+
output = open(file_path, O_WRONLY | O_CREAT | O_TRUNC, LOG_FILE_PERMISSION);
if (output < 0)
return -errno;
{
__u8 data[NVME_IDENTIFY_DATA_SIZE];
__u8 *buff = cns->buffer ? cns->buffer : data;
- char filename[sizeof(
- "cntid_XXXXX_cns_XXX_nsid_XXXXXXXXXX_nvmsetid_XXXXX_csi_XXX.bin")] = {0};
+ _cleanup_free_ char *filename = NULL;
int err = nvme_identify_cns_nsid(dev_fd(ilog->dev), cns->id, nsid, buff);
if (err)
return err;
- snprintf(filename, sizeof(filename) - 1, "cntid_0_cns_%d_nsid_%d_nvmsetid_0_csi_0.bin",
- cns->id, nsid);
+ if (asprintf(&filename, "cntid_0_cns_%d_nsid_%d_nvmsetid_0_csi_0.bin", cns->id, nsid) < 0)
+ return -errno;
+
return log_save(cns, ilog->cfg->out_dir, "identify", filename, buff, sizeof(data));
}
static int ilog_dump_log_page(struct ilog *ilog, struct log *lp, __u32 nsid)
{
__u8 *buff = lp->buffer;
- char filename[sizeof("lid_0xXX_lsp_0xXX_lsi_0xXXXX.bin")] = {0};
- int err;
+ _cleanup_free_ char *filename = NULL;
+ int err;
if (!lp->buffer_size)
return -EINVAL;
if (!buff) {
if (err)
return err;
- snprintf(filename, sizeof(filename), "lid_0x%02x_lsp_0x00_lsi_0x0000.bin",
- lp->id);
+ if (asprintf(&filename, "lid_0x%02x_lsp_0x00_lsi_0x0000.bin", lp->id) < 0)
+ return -errno;
+
return log_save(lp, ilog->cfg->out_dir, "log_pages", filename, buff, lp->buffer_size);
}
{
char sn_prefix[sizeof(((struct nvme_id_ctrl *)0)->sn)+1];
char date_str[sizeof("-YYYYMMDDHHMMSS")];
- char full_folder[PATH_MAX] = {0};
- char unique_folder[sizeof(sn_prefix)+sizeof(date_str)-1] = {0};
+ _cleanup_free_ char *full_folder = NULL;
+ _cleanup_free_ char *unique_folder = NULL;
+ _cleanup_free_ char *zip_name = NULL;
+
char *initial_folder;
- char zip_name[PATH_MAX] = {0};
char *output_path;
struct ilog ilog = {0};
int err;
current_time = time(NULL);
strftime(date_str, sizeof(date_str), "-%Y%m%d%H%M%S", localtime(¤t_time));
- snprintf(unique_folder, sizeof(unique_folder), "%s%s", sn_prefix, date_str);
- snprintf(full_folder, sizeof(full_folder) - 1, "%s/%s", cfg.out_dir, unique_folder);
+ if (asprintf(&unique_folder, "%s%s", sn_prefix, date_str) < 0)
+ return -errno;
+ if (asprintf(&full_folder, "%s/%s", cfg.out_dir, unique_folder) < 0)
+ return -errno;
+
if (mkdir(full_folder, 0755) != 0) {
perror("mkdir");
return -errno;
}
+
cfg.out_dir = full_folder;
output_path = full_folder;
if (ilog.count > 0) {
int ret_cmd;
- char *cmd;
+ _cleanup_free_ char *cmd = NULL;
char *quiet = cfg.verbose ? "" : " -q";
- snprintf(zip_name, sizeof(zip_name) - 1, "%s.zip", unique_folder);
+ if (asprintf(&zip_name, "%s.zip", unique_folder) < 0)
+ return -errno;
+
if (asprintf(&cmd, "cd \"%s\" && zip -MM -r \"../%s\" ./* %s", cfg.out_dir,
zip_name, quiet) < 0) {
err = errno;
perror(cmd);
else {
output_path = zip_name;
- free(cmd);
if (asprintf(&cmd, "rm -rf %s", cfg.out_dir) < 0) {
err = errno;
perror("Can't allocate string for cleanup");
if (system(cmd) != 0)
perror("Failed removing logs folder");
}
- free(cmd);
}
out: