aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Ericson <de.ericson@gmail.com>2012-05-28 06:54:15 -0300
committerMatt Fleming <matt.fleming@intel.com>2012-06-08 08:10:22 +0100
commit6bf3351711fe6c3f5731e519c2fbb298c6bcf2b4 (patch)
tree115642c96c3df39e1a97e90d202634eabe1fa825
parente7bd19def830e8341b1a100956345f1028740b9e (diff)
downloadsyslinux-6bf3351711fe6c3f5731e519c2fbb298c6bcf2b4.tar.gz
syslinux-6bf3351711fe6c3f5731e519c2fbb298c6bcf2b4.tar.xz
syslinux-6bf3351711fe6c3f5731e519c2fbb298c6bcf2b4.zip
ldlinux: fixes bug that happens when using fullpath for a COM32 module
When using full path for a com32 module, for example, /boot/syslinux/ls.c32 it fails without any error message. This patch fixes it by looking first if the argv[0] is the path to a module before looking for it at PATH. Since we're using fopen to open module files (which works for both absolute paths and paths relative to the current working directory) we no longer need to include "." in PATH and neither the code to handle it. Signed-off-by: Andre Ericson <de.ericson@gmail.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r--com32/lib/sys/module/common.c13
-rw-r--r--core/include/fs.h2
2 files changed, 5 insertions, 10 deletions
diff --git a/com32/lib/sys/module/common.c b/com32/lib/sys/module/common.c
index eeb26075..19742e65 100644
--- a/com32/lib/sys/module/common.c
+++ b/com32/lib/sys/module/common.c
@@ -64,6 +64,10 @@ static FILE *findpath(char *name)
char *p, *n;
int i;
+ f = fopen(name, "rb"); /* for full path */
+ if (f)
+ return f;
+
p = PATH;
again:
i = 0;
@@ -74,15 +78,6 @@ again:
if (*p == ':')
p++;
- if (path[0] == '.' && i == 1) {
- if (!core_getcwd(path, sizeof(path))) {
- DBG_PRINT("Could not get cwd\n");
- return NULL;
- }
-
- i = strlen(path);
- }
-
n = name;
while (*n && i < FILENAME_MAX)
path[i++] = *n++;
diff --git a/core/include/fs.h b/core/include/fs.h
index 481e085c..ded8c154 100644
--- a/core/include/fs.h
+++ b/core/include/fs.h
@@ -179,7 +179,7 @@ static inline struct file *handle_to_file(uint16_t handle)
return handle ? &files[handle-1] : NULL;
}
-#define PATH_DEFAULT ".:/boot/syslinux/:/boot/"
+#define PATH_DEFAULT "/boot/syslinux/:/boot/"
extern char *PATH;
/* fs.c */