summaryrefslogtreecommitdiff
path: root/com32/lib/readdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/lib/readdir.c')
-rw-r--r--com32/lib/readdir.c42
1 files changed, 6 insertions, 36 deletions
diff --git a/com32/lib/readdir.c b/com32/lib/readdir.c
index 3737d1ad..d59ad3a2 100644
--- a/com32/lib/readdir.c
+++ b/com32/lib/readdir.c
@@ -16,42 +16,12 @@ struct dirent *readdir(DIR * dir)
{
struct dirent *newde;
com32sys_t regs;
-
- newde = NULL;
- if ((dir != NULL) && (dir->dd_fd != 0) && (dir->dd_stat >= 0)) {
- memset(__com32.cs_bounce, 0, 32);
- memset(&regs, 0, sizeof(regs));
-
- regs.eax.w[0] = 0x0021;
- regs.esi.w[0] = dir->dd_fd;
- regs.edi.w[0] = OFFS(__com32.cs_bounce);
- regs.es = SEG(__com32.cs_bounce);
-
- __com32.cs_intcall(0x22, &regs, &regs);
-
-#if 0
- /* Don't do this as we won't be able to rewind. */
- dir->dd_fd = regs.esi.w[0]; /* Shouldn't be needed? */
-#endif
- if ((!(regs.eflags.l & EFLAGS_CF)) && (regs.esi.w[0] != 0)) {
- newde = calloc(1, sizeof(newde));
- if (newde != NULL) {
- strcpy(newde->d_name, __com32.cs_bounce);
- newde->d_mode = regs.edx.b[0];
- newde->d_size = regs.eax.l;
- newde->d_ino = regs.ebx.l;
- dir->dd_stat = 1;
- } else {
- dir->dd_stat = -2;
- errno = ENOMEM;
- }
- } else {
- dir->dd_stat = -1;
- errno = EIO; /* Is this the right nmber? */
- }
- } else {
- errno = EBADF;
- }
+
+ memset(&regs, 0, sizeof(regs));
+ regs.eax.w[0] = 0x0021;
+ regs.esi.l = (uint32_t)dir;
+ __com32.cs_intcall(0x22, &regs, &regs);
+ newde = (struct dirent *)(regs.eax.l);
return newde;
}