PM getcwd(); Fix COM32 getcwd
authorGene Cumm <gene.cumm@gmail.com>
Sun, 27 Jun 2010 02:51:39 +0000 (22:51 -0400)
committerH. Peter Anvin <hpa@zytor.com>
Sun, 27 Jun 2010 03:52:58 +0000 (20:52 -0700)
Implement getcwd() in the core; Fix COM32 getcwd() to use the new function.

This resolves the previous comment about COM32 getcwd() not working by
not using INT 22h AX=001Fh.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
com32/include/syslinux/pmapi.h
com32/lib/getcwd.c
core/fs/getcwd.c [new file with mode: 0644]
core/include/fs.h
core/pmapi.c

index f1036df..c325b62 100644 (file)
@@ -69,6 +69,7 @@ struct com32_pmapi {
     void (*reset_idle)(void);
 
     int (*chdir)(const char *);
+    char *(*getcwd)(char *, size_t);
 };
 
 #endif /* _SYSLINUX_PMAPI_H */
index 38fae52..5ce62ec 100644 (file)
@@ -2,29 +2,10 @@
  * getcwd.c
  */
 
-#include <syslinux/config.h>
-#include <klibc/compiler.h>
 #include <com32.h>
-
-#include <dirent.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
+#include <syslinux/pmapi.h>
 
 char *getcwd(char *buf, size_t size)
 {
-    static com32sys_t reg;
-    char *pwdstr, *ret;
-
-    reg.eax.w[0] = 0x001f;
-    __intcall(0x22, &reg, &reg);
-    pwdstr = MK_PTR(reg.es, reg.ebx.w[0]);
-    if ((strlen(pwdstr) < size) && (buf != NULL)) {
-       strcpy(buf, pwdstr);
-       ret = buf;
-    } else {
-       ret = NULL;
-       errno = ERANGE;
-    }
-    return ret;
+    return __com32.cs_pm->getcwd(buf, size);
 }
diff --git a/core/fs/getcwd.c b/core/fs/getcwd.c
new file mode 100644 (file)
index 0000000..a7b6c7a
--- /dev/null
@@ -0,0 +1,13 @@
+#include <string.h>
+#include "fs.h"
+
+char *getcwd(char *buf, size_t size)
+{
+    char *ret = NULL;
+
+    if((buf != NULL) && (strlen(this_fs->cwd_name) < size)) {
+        strcpy(buf, this_fs->cwd_name);
+        ret = buf;
+    }
+    return ret;
+}
index bb629c9..a01f998 100644 (file)
@@ -202,6 +202,9 @@ DIR *opendir(const char *pathname);
 struct dirent *readdir(DIR *dir);
 int closedir(DIR *dir);
 
+/* getcwd.c */
+char *getcwd(char *buf, size_t size);
+
 /*
  * Generic functions that filesystem drivers may choose to use
  */
index 18693d9..ff65533 100644 (file)
@@ -36,4 +36,5 @@ const struct com32_pmapi pm_api_vector =
     .reset_idle        = reset_idle,
 
     .chdir     = chdir,
+    .getcwd    = getcwd,
 };