Add error messages
authorH. Peter Anvin <hpa@zytor.com>
Sun, 6 Jan 2008 04:16:56 +0000 (20:16 -0800)
committerH. Peter Anvin <hpa@zytor.com>
Sun, 6 Jan 2008 04:16:56 +0000 (20:16 -0800)
linux.c

diff --git a/linux.c b/linux.c
index 97f0b6d..3cc6dbb 100644 (file)
--- a/linux.c
+++ b/linux.c
@@ -126,20 +126,28 @@ int wrap_kernel(const char *kernel_file, const char *cmdline,
   /* Process the kernel file */
 
   kernel_fd = open(kernel_file, O_RDONLY);
-  if (kernel_fd < 0)
+  if (kernel_fd < 0) {
+    fprintf(stderr, "%s: %s: %s\n", program, kernel_file, strerror(errno));
     goto err;
+  }
 
-  if (fstat(kernel_fd, &st))
+  if (fstat(kernel_fd, &st)) {
+    fprintf(stderr, "%s: %s: %s\n", program, kernel_file, strerror(errno));
     goto err;
+  }
 
   kernel_len = st.st_size;
 
-  if (kernel_len < 1024)
+  if (kernel_len < 1024) {
+    fprintf(stderr, "%s: %s: kernel file too small\n", program, kernel_file);
+    errno = EINVAL;
     goto err;
+  }
 
   kernel = mmap(NULL, kernel_len, PROT_READ|PROT_WRITE, MAP_PRIVATE,
                kernel_fd, 0);
   if (kernel == MAP_FAILED) {
+    fprintf(stderr, "%s: %s: %s\n", program, kernel_file, strerror(errno));
     kernel = NULL;
     goto err;
   }
@@ -208,23 +216,30 @@ int wrap_kernel(const char *kernel_file, const char *cmdline,
 
   if (ninitrd) {
     ird = calloc(ninitrd, sizeof *ird);
-    if (!ird)
+    if (!ird) {
+      fprintf(stderr, "%s: %s\n", program, strerror(errno));
       goto err;
+    }
   }
 
   initrd_len = 0;
   for (ip = initrd_list, i = 0; ip; ip = ip->next, i++) {
     ird[i].fd = open(ip->str, O_RDONLY);
-    if (ird[i].fd < 0)
-      return -1;
+    if (ird[i].fd < 0) {
+      fprintf(stderr, "%s: %s: %s", program, ip->str, strerror(errno));
+      goto err;
+    }
   
-    if (fstat(ird[i].fd, &st))
+    if (fstat(ird[i].fd, &st)) {
+      fprintf(stderr, "%s: %s: %s", program, ip->str, strerror(errno));
       goto err;
+    }
 
     ird[i].seg.length = st.st_size;
     ird[i].seg.data = mmap(NULL, ird[i].seg.length, PROT_READ,
                           MAP_SHARED, ird[i].fd, 0);
     if (ird[i].seg.data == MAP_FAILED) {
+      fprintf(stderr, "%s: %s: %s", program, ip->str, strerror(errno));
       ird[i].seg.data = NULL;
       goto err;
     }