aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rfsv32.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rfsv32.cc')
-rw-r--r--lib/rfsv32.cc99
1 files changed, 24 insertions, 75 deletions
diff --git a/lib/rfsv32.cc b/lib/rfsv32.cc
index 5a23c08..8808879 100644
--- a/lib/rfsv32.cc
+++ b/lib/rfsv32.cc
@@ -25,16 +25,16 @@
#include <stream.h>
#include <stdlib.h>
-#include <fstream.h>
-#include <iomanip.h>
+#include <fstream>
+#include <iomanip>
#include <time.h>
-#include <string.h>
+#include <string>
-#include "bool.h"
#include "rfsv32.h"
#include "bufferstore.h"
#include "ppsocket.h"
#include "bufferarray.h"
+#include "plpdirent.h"
rfsv32::rfsv32(ppsocket * _skt)
{
@@ -126,7 +126,7 @@ fopendir(const long attr, const char * const name, long &handle)
{
bufferStore a;
char *n = convertSlash(name);
- a.addDWord(attr);
+ a.addDWord(attr | EPOC_ATTR_GETUID);
a.addWord(strlen(n));
a.addString(n);
free(n);
@@ -163,7 +163,7 @@ closedir(rfsvDirhandle &dH) {
}
Enum<rfsv::errs> rfsv32::
-readdir(rfsvDirhandle &dH, bufferStore &s) {
+readdir(rfsvDirhandle &dH, PlpDirent &e) {
Enum<rfsv::errs> res = E_PSI_GEN_NONE;
if (dH.b.getLen() < 17) {
@@ -174,23 +174,21 @@ readdir(rfsvDirhandle &dH, bufferStore &s) {
res = getResponse(dH.b);
}
if ((res == E_PSI_GEN_NONE) && (dH.b.getLen() > 16)) {
- long shortLen = dH.b.getDWord(0);
- long attributes = attr2std(dH.b.getDWord(4));
- long size = dH.b.getDWord(8);
- // long uid1 = dH.b.getDWord(20);
- // long uid2 = dH.b.getDWord(24);
- // long uid3 = dH.b.getDWord(28);
- long longLen = dH.b.getDWord(32);
- PsiTime *date = new PsiTime(dH.b.getDWord(16), dH.b.getDWord(12));
-
- s.init();
- s.addDWord((unsigned long)date);
- s.addDWord(size);
- s.addDWord(attributes);
+ long shortLen = dH.b.getDWord(0);
+ long longLen = dH.b.getDWord(32);
+
+ e.attr = attr2std(dH.b.getDWord(4));
+ e.size = dH.b.getDWord(8);
+ e.uid[0] = dH.b.getDWord(20);
+ e.uid[1] = dH.b.getDWord(24);
+ e.uid[2] = dH.b.getDWord(28);
+ e.time = PsiTime(dH.b.getDWord(16), dH.b.getDWord(12));
+ e.name = "";
+ e.attrstr = string(attr2String(e.attr));
+
int d = 36;
for (int i = 0; i < longLen; i++, d++)
- s.addByte(dH.b.getByte(d));
- s.addByte(0);
+ e.name += dH.b.getByte(d);
while (d % 4)
d++;
d += shortLen;
@@ -202,70 +200,21 @@ readdir(rfsvDirhandle &dH, bufferStore &s) {
}
Enum<rfsv::errs> rfsv32::
-dir(const char *name, bufferArray &files)
+dir(const char *name, PlpDir &files)
{
rfsvDirhandle h;
+ files.clear();
Enum<rfsv::errs> res = opendir(PSI_A_HIDDEN | PSI_A_SYSTEM | PSI_A_DIR, name, h);
while (res == E_PSI_GEN_NONE) {
- bufferStore b;
- res = readdir(h, b);
+ PlpDirent e;
+ res = readdir(h, e);
if (res == E_PSI_GEN_NONE)
- files += b;
+ files.push_back(e);
}
closedir(h);
if (res == E_PSI_FILE_EOF)
res = E_PSI_GEN_NONE;
return res;
-#if 0
- long handle;
- Enum<rfsv::errs> res = fopendir(EPOC_ATTR_HIDDEN | EPOC_ATTR_SYSTEM | EPOC_ATTR_DIRECTORY, name, handle);
- if (res != E_PSI_GEN_NONE)
- return res;
-
- while (1) {
- bufferStore a;
- a.addDWord(handle);
- if (!sendCommand(READ_DIR, a))
- return E_PSI_FILE_DISC;
- res = getResponse(a);
- if (res != E_PSI_GEN_NONE)
- break;
- while (a.getLen() > 16) {
- long shortLen = a.getDWord(0);
- long attributes = attr2std(a.getDWord(4));
- long size = a.getDWord(8);
- //unsigned long modLow = a.getDWord(12);
- //unsigned long modHi = a.getDWord(16);
- // long uid1 = a.getDWord(20);
- // long uid2 = a.getDWord(24);
- // long uid3 = a.getDWord(28);
- long longLen = a.getDWord(32);
-
- //long date = micro2time(modHi, modLow);
- PsiTime *date = new PsiTime(a.getDWord(16), a.getDWord(12));
-
- bufferStore s;
- s.addDWord((unsigned long)date);
- s.addDWord(size);
- s.addDWord(attributes);
- int d = 36;
- for (int i = 0; i < longLen; i++, d++)
- s.addByte(a.getByte(d));
- s.addByte(0);
- while (d % 4)
- d++;
- files += s;
- d += shortLen;
- while (d % 4)
- d++;
- a.discardFirstBytes(d);
- }
- }
- if (res == E_PSI_FILE_EOF)
- res = E_PSI_GEN_NONE;
- fclose(handle);
- return res;
-#endif
}
long rfsv32::