aboutsummaryrefslogtreecommitdiffstats
path: root/plpnfsd/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'plpnfsd/main.cc')
-rw-r--r--plpnfsd/main.cc125
1 files changed, 72 insertions, 53 deletions
diff --git a/plpnfsd/main.cc b/plpnfsd/main.cc
index 6dc472b..c20b24d 100644
--- a/plpnfsd/main.cc
+++ b/plpnfsd/main.cc
@@ -34,13 +34,21 @@ extern "C" {
#include "rfsv_api.h"
}
-static rfsv32 *a;
+static rfsv32 *a = 0L;
+static ppsocket *skt = 0L;
+
+long rfsv_isalive() {
+ if (!a)
+ return 0;
+ return (a->getStatus() == 0);
+}
long rfsv_dir(const char *file, dentry **e) {
+ if (!a)
+ return -1;
bufferArray entries;
dentry *tmp;
long ret = a->dir(&(*file), &entries);
- psion_alive = (a->getStatus() == 0);
while (!entries.empty()) {
bufferStore s;
s = entries.popBuffer();
@@ -58,113 +66,121 @@ long rfsv_dir(const char *file, dentry **e) {
}
long rfsv_dircount(const char *file, long *count) {
- long ret = a->dircount(&(*file), &(*count));
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->dircount(&(*file), &(*count));
}
long rfsv_rmdir(const char *name) {
- long ret = a->rmdir(name);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->rmdir(name);
}
long rfsv_mkdir(const char *file) {
- long ret = a->mkdir(file);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->mkdir(file);
}
long rfsv_remove(const char *file) {
- long ret = a->remove(file);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->remove(file);
}
long rfsv_fclose(long handle) {
- long ret = a->fclose(handle);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->fclose(handle);
}
long rfsv_fopen(long attr, const char *file, long *handle) {
+ if (!a)
+ return -1;
long ph;
long ret = a->fopen(attr, file, ph);
*handle = ph;
- psion_alive = (a->getStatus() == 0);
return ret;
}
long rfsv_fcreate(long attr, const char *file, long *handle) {
+ if (!a)
+ return -1;
long ph;
long ret = a->fcreatefile(attr, file, ph);
*handle = ph;
- psion_alive = (a->getStatus() == 0);
return ret;
}
long rfsv_read(char *buf, long offset, long len, long handle) {
+ if (!a)
+ return -1;
long ret = a->fseek(handle, offset, rfsv32::PSEEK_SET);
if (ret >= 0)
ret = a->fread(handle, buf, len);
- psion_alive = (a->getStatus() == 0);
return ret;
}
long rfsv_write(char *buf, long offset, long len, long handle) {
+ if (!a)
+ return -1;
long ret = a->fseek(handle, offset, rfsv32::PSEEK_SET);
if (ret >= 0)
ret = a->fwrite(handle, buf, len);
- psion_alive = (a->getStatus() == 0);
return ret;
}
long rfsv_setmtime(const char *name, long time) {
- long ret = a->fsetmtime(name, time);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->fsetmtime(name, time);
}
long rfsv_setsize(const char *name, long size) {
+ if (!a)
+ return -1;
long ph;
long ret = a->fopen(0x200, name, ph);
if (!ret) {
ret = a->fsetsize(ph, size);
a->fclose(ph);
}
- psion_alive = (a->getStatus() == 0);
return ret;
}
long rfsv_setattr(const char *name, long sattr, long dattr) {
- long ret = a->fsetattr(name, dattr, sattr);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->fsetattr(name, dattr, sattr);
}
long rfsv_getattr(const char *name, long *attr, long *size, long *time) {
- long ret = a->fgeteattr(&(*name), &(*attr), &(*size), &(*time));
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->fgeteattr(&(*name), &(*attr), &(*size), &(*time));
}
long rfsv_statdev(char letter) {
+ if (!a)
+ return -1;
long vfree, vtotal, vattr, vuniqueid;
int devnum = letter - 'A';
char *name;
name = a->devinfo(devnum, &vfree, &vtotal, &vattr, &vuniqueid);
- psion_alive = (a->getStatus() == 0);
return (name == NULL);
}
long rfsv_rename(const char *oldname, const char *newname) {
- long ret = a->rename(oldname, newname);
- psion_alive = (a->getStatus() == 0);
- return ret;
+ if (!a)
+ return -1;
+ return a->rename(oldname, newname);
}
long rfsv_drivelist(int *cnt, device **dlist) {
+ if (!a)
+ return -1;
*dlist = NULL;
long devbits;
long ret;
@@ -190,26 +206,29 @@ long rfsv_drivelist(int *cnt, device **dlist) {
}
devbits >>= 1;
}
- psion_alive = (a->getStatus() == 0);
return ret;
}
+void rfsv_startup()
+{
+ bool res;
+
+ if (a) {
+ delete a;
+ a = 0L;
+ }
+ if (skt) {
+ delete skt;
+ skt = 0L;
+ }
+ skt = new ppsocket();
+ skt->startup();
+ res = skt->connect(NULL, DEFAULT_SOCKET);
+ a = new rfsv32(skt);
+}
+
int main(int argc, char**argv) {
- ppsocket *skt;
- bool res;
-
- // Command line parameter processing
- int sockNum = DEFAULT_SOCKET;
-
- skt = new ppsocket();
- skt->startup();
- res = skt->connect(NULL, sockNum);
-
- a = new rfsv32(skt);
-
- char *mp_args[] = { "mp_main", "-v", "-dir", "/mnt/psion", NULL };
- mp_main(4, mp_args);
-
- delete a;
- return 0;
+ char *mp_args[] = { "mp_main", "-v", "-dir", "/mnt/psion", NULL };
+ mp_main(4, mp_args);
+ return 0;
}