Commit 03040be5 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

protobuf: Print the image filename on error

For example

 | Error (protobuf.c:574): Unexpected EOF on /home/crtools/tools/cpt2/test/out/utsns-1.img
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 401b4b89
...@@ -533,6 +533,15 @@ void do_pb_show_plain(int fd, int type, int single_entry, ...@@ -533,6 +533,15 @@ void do_pb_show_plain(int fd, int type, int single_entry,
} }
} }
static char *image_name(int fd)
{
static char image_path[PATH_MAX];
if (read_fd_link(fd, image_path, sizeof(image_path)) == 0)
return image_path;
return NULL;
}
/* /*
* Reads PB record (header + packed object) from file @fd and unpack * Reads PB record (header + packed object) from file @fd and unpack
* it with @unpack procedure to the pointer @pobj * it with @unpack procedure to the pointer @pobj
...@@ -552,7 +561,8 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof) ...@@ -552,7 +561,8 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof)
int ret; int ret;
if (!cr_pb_descs[type].pb_desc) { if (!cr_pb_descs[type].pb_desc) {
pr_err("Wrong object requested %d\n", type); pr_err("Wrong object requested %d on %s\n",
type, image_name(fd));
return -1; return -1;
} }
...@@ -563,12 +573,14 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof) ...@@ -563,12 +573,14 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof)
if (eof) { if (eof) {
return 0; return 0;
} else { } else {
pr_err("Unexpected EOF\n"); pr_err("Unexpected EOF on %s\n",
image_name(fd));
return -1; return -1;
} }
} else if (ret < sizeof(size)) { } else if (ret < sizeof(size)) {
pr_perror("Read %d bytes while %d expected", pr_perror("Read %d bytes while %d expected on %s",
ret, (int)sizeof(size)); ret, (int)sizeof(size),
image_name(fd));
return -1; return -1;
} }
...@@ -581,10 +593,12 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof) ...@@ -581,10 +593,12 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof)
ret = read(fd, buf, size); ret = read(fd, buf, size);
if (ret < 0) { if (ret < 0) {
pr_perror("Can't read %d bytes from file", size); pr_perror("Can't read %d bytes from file %s",
size, image_name(fd));
goto err; goto err;
} else if (ret != size) { } else if (ret != size) {
pr_perror("Read %d bytes while %d expected", ret, size); pr_perror("Read %d bytes while %d expected from %s",
ret, size, image_name(fd));
ret = -1; ret = -1;
goto err; goto err;
} }
...@@ -592,7 +606,8 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof) ...@@ -592,7 +606,8 @@ int do_pb_read_one(int fd, void **pobj, int type, bool eof)
*pobj = cr_pb_descs[type].unpack(NULL, size, buf); *pobj = cr_pb_descs[type].unpack(NULL, size, buf);
if (!*pobj) { if (!*pobj) {
ret = -1; ret = -1;
pr_err("Failed unpacking object %p\n", pobj); pr_err("Failed unpacking object %p from %s\n",
pobj, image_name(fd));
goto err; goto err;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment