[syslinux] Confusing error message when pointing the linux installer at a missing directory.
Matt Fleming
matt at console-pimps.org
Thu Apr 25 07:29:13 PDT 2013
On 04/17/2013 09:37 PM, Jack Kelly wrote:
> Last night, I was trying to install syslinux (5.01) to a SD card of
> mine, writing to a subdirectory to keep the layout neat:
>
> syslinux-5.01/linux# ./syslinux -i -d /boot /dev/mmcblk0p1
> /dev/mmcblk0p1: No such file or directory
>
> The message is coming from do_open_file() in syslinux.c: the call to
> open() fails because the containing directory isn't present, and then it
> calls perror(opt.device).
>
> If the directory is present, syslinux installs and will boot. It's just
> a matter of either improving the error message or trying to make the
> directory before populating it.
Thanks for the report, I queued up the following patch. Note it will
print something like,
/tmp/syslinux.XXX/boot/ldlinux.sys: No such file or directory
which still isn't entirely clear, but is at least more helpful than what
we have currently.
---
>From faff52ef2bd3dca503a6fef3129f02284e9b6ca4 Mon Sep 17 00:00:00 2001
From: Matt Fleming <matt.fleming at intel.com>
Date: Thu, 25 Apr 2013 15:14:18 +0100
Subject: [PATCH] linux: Clear up error message
Passing opt.device to perror() in do_open_file() results in confusing
error messages, as Jack reports,
Last night, I was trying to install syslinux (5.01) to a SD card of
mine, writing to a subdirectory to keep the layout neat:
syslinux-5.01/linux# ./syslinux -i -d /boot /dev/mmcblk0p1
/dev/mmcblk0p1: No such file or directory
The message is coming from do_open_file() in syslinux.c: the call to
open() fails because the containing directory isn't present, and then it
calls perror(opt.device).
We should instead be passing 'name' to perror() so that we know _which_
file doesn't exist.
Reported-by: Jack Kelly <jack at jackkelly.name>
Signed-off-by: Matt Fleming <matt.fleming at intel.com>
---
linux/syslinux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux/syslinux.c b/linux/syslinux.c
index f4749ea..f64834b 100755
--- a/linux/syslinux.c
+++ b/linux/syslinux.c
@@ -251,7 +251,7 @@ int do_open_file(char *name)
unlink(name);
fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, 0444);
if (fd < 0)
- perror(opt.device);
+ perror(name);
return fd;
}
--
1.8.1.4
--
Matt Fleming, Intel Open Source Technology Center
More information about the Syslinux
mailing list