aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rfsv32.cc
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2001-02-02 04:49:20 +0000
committerFritz Elfert <felfert@to.com>2001-02-02 04:49:20 +0000
commit9fac7af37460c6a73a7debac1ba82b094a8f066c (patch)
treec6ef3e0ebd088c62348f140289f82482d82db1cf /lib/rfsv32.cc
parent4da48658c8f1dfbf5960bb1768dc6d154c528734 (diff)
downloadplptools-9fac7af37460c6a73a7debac1ba82b094a8f066c.tar.gz
plptools-9fac7af37460c6a73a7debac1ba82b094a8f066c.tar.bz2
plptools-9fac7af37460c6a73a7debac1ba82b094a8f066c.zip
Replaced lot of ugly char * by string.
Fixed bug in plpftp's filename-completion, which was introduced yesterday. Added a class PlpUID for dealing with application-UIDs Added UID->mimetype mapping in kioslave.
Diffstat (limited to 'lib/rfsv32.cc')
-rw-r--r--lib/rfsv32.cc167
1 files changed, 66 insertions, 101 deletions
diff --git a/lib/rfsv32.cc b/lib/rfsv32.cc
index 8808879..0eb9911 100644
--- a/lib/rfsv32.cc
+++ b/lib/rfsv32.cc
@@ -44,25 +44,14 @@ rfsv32::rfsv32(ppsocket * _skt)
reset();
}
-char *rfsv32::
-convertSlash(const char *name)
-{
- char *n = strdup(name);
- for (char *p = n; *p; p++)
- if (*p == '/')
- *p = '\\';
- return n;
-}
-
Enum<rfsv::errs> rfsv32::
fopen(long attr, const char *name, long &handle)
{
bufferStore a;
- char *n = convertSlash(name);
+ string n = convertSlash(name);
a.addDWord(attr);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(OPEN_FILE, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
@@ -91,11 +80,10 @@ Enum<rfsv::errs> rfsv32::
fcreatefile(long attr, const char *name, long &handle)
{
bufferStore a;
- char *n = convertSlash(name);
+ string n = convertSlash(name);
a.addDWord(attr);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(CREATE_FILE, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
@@ -108,11 +96,10 @@ Enum<rfsv::errs> rfsv32::
freplacefile(const long attr, const char * const name, long &handle)
{
bufferStore a;
- char *n = convertSlash(name);
+ string n = convertSlash(name);
a.addDWord(attr);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(REPLACE_FILE, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
@@ -125,11 +112,10 @@ Enum<rfsv::errs> rfsv32::
fopendir(const long attr, const char * const name, long &handle)
{
bufferStore a;
- char *n = convertSlash(name);
+ string n = convertSlash(name);
a.addDWord(attr | EPOC_ATTR_GETUID);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(OPEN_DIR, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
@@ -177,11 +163,9 @@ readdir(rfsvDirhandle &dH, PlpDirent &e) {
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.attr = attr2std(dH.b.getDWord(4));
+ e.size = dH.b.getDWord(8);
+ e.UID = PlpUID(dH.b.getDWord(20), dH.b.getDWord(24), dH.b.getDWord(28));
e.time = PsiTime(dH.b.getDWord(16), dH.b.getDWord(12));
e.name = "";
e.attrstr = string(attr2String(e.attr));
@@ -232,16 +216,14 @@ Enum<rfsv::errs> rfsv32::
fgetmtime(const char * const name, PsiTime &mtime)
{
bufferStore a;
- char *n = convertSlash(name);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ string n = convertSlash(name);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(MODIFIED, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
if (res != E_PSI_GEN_NONE)
return res;
- //mtime = micro2time(a.getDWord(4), a.getDWord(0));
mtime.setPsiTime(a.getDWord(4), a.getDWord(0));
return res;
}
@@ -250,14 +232,11 @@ Enum<rfsv::errs> rfsv32::
fsetmtime(const char * const name, PsiTime mtime)
{
bufferStore a;
- //unsigned long microLo, microHi;
- char *n = convertSlash(name);
- // time2micro(mtime, microHi, microLo);
+ string n = convertSlash(name);
a.addDWord(mtime.getPsiTimeLo());
a.addDWord(mtime.getPsiTimeHi());
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(SET_MODIFIED, a))
return E_PSI_FILE_DISC;
return getResponse(a);
@@ -267,10 +246,9 @@ Enum<rfsv::errs> rfsv32::
fgetattr(const char * const name, long &attr)
{
bufferStore a;
- char *n = convertSlash(name);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ string n = convertSlash(name);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(ATT, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
@@ -281,29 +259,33 @@ fgetattr(const char * const name, long &attr)
}
Enum<rfsv::errs> rfsv32::
-fgeteattr(const char * const name, long &attr, long &size, PsiTime &time)
+fgeteattr(const char * const name, PlpDirent &e)
{
bufferStore a;
- char *n = convertSlash(name);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ string n = convertSlash(name);
+ a.addWord(n.size());
+ a.addString(n.c_str());
+ const char *p = strrchr(n.c_str(), '\\');
+ if (p)
+ p++;
+ else
+ p = n.c_str();
+ e.name = p;
+
if (!sendCommand(REMOTE_ENTRY, a))
return E_PSI_FILE_DISC;
Enum<rfsv::errs> res = getResponse(a);
if (res != E_PSI_GEN_NONE)
return res;
// long shortLen = a.getDWord(0);
- attr = attr2std(a.getDWord(4));
- 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);
- //time = micro2time(modHi, modLow);
- time.setPsiTime(a.getDWord(16), a.getDWord(12));
+
+ e.attr = attr2std(a.getDWord(4));
+ e.size = a.getDWord(8);
+ e.UID = PlpUID(a.getDWord(20), a.getDWord(24), a.getDWord(28));
+ e.time = PsiTime(a.getDWord(16), a.getDWord(12));
+ e.attrstr = string(attr2String(e.attr));
+
return res;
}
@@ -311,12 +293,11 @@ Enum<rfsv::errs> rfsv32::
fsetattr(const char * const name, const long seta, const long unseta)
{
bufferStore a;
- char *n = convertSlash(name);
+ string n = convertSlash(name);
a.addDWord(std2attr(seta));
a.addDWord(std2attr(unseta));
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(SET_ATT, a))
return E_PSI_FILE_DISC;
return getResponse(a);
@@ -557,13 +538,10 @@ copyOnPsion(const char *from, const char *to, void *ptr, cpCallback_t cb)
{
long handle_from;
long handle_to;
- long attr;
- long from_size;
- long to_size;
- PsiTime time;
+ PlpDirent from_e;
Enum<rfsv::errs> res;
- if ((res = fgeteattr(from, attr, from_size, time)) != E_PSI_GEN_NONE)
+ if ((res = fgeteattr(from, from_e)) != E_PSI_GEN_NONE)
return res;
if ((res = fopen(EPOC_OMODE_SHARE_READERS | EPOC_OMODE_BINARY, from, handle_from))
!= E_PSI_GEN_NONE)
@@ -736,16 +714,11 @@ Enum<rfsv::errs> rfsv32::
mkdir(const char *name)
{
bufferStore a;
- char *n = convertSlash(name);
- if (strlen(n) && (n[strlen(n) - 1] != '\\')) {
- a.addWord(strlen(n) + 1);
- a.addString(n);
- a.addByte('\\');
- } else {
- a.addWord(strlen(n));
- a.addString(n);
- }
- free(n);
+ string n = convertSlash(name);
+ if (n.find_last_of('\\') == (n.size() - 1))
+ n += '\\';
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(MK_DIR_ALL, a))
return E_PSI_FILE_DISC;
return getResponse(a);
@@ -755,16 +728,11 @@ Enum<rfsv::errs> rfsv32::
rmdir(const char *name)
{
bufferStore a;
- char *n = convertSlash(name);
- if (strlen(n) && (n[strlen(n) - 1] != '\\')) {
- a.addWord(strlen(n) + 1);
- a.addString(n);
- a.addByte('\\');
- } else {
- a.addWord(strlen(n));
- a.addString(n);
- }
- free(n);
+ string n = convertSlash(name);
+ if (n.find_last_of('\\') == (n.size() - 1))
+ n += '\\';
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(RM_DIR, a))
return E_PSI_FILE_DISC;
return getResponse(a);
@@ -774,14 +742,12 @@ Enum<rfsv::errs> rfsv32::
rename(const char *oldname, const char *newname)
{
bufferStore a;
- char *on = convertSlash(oldname);
- char *nn = convertSlash(newname);
- a.addWord(strlen(on));
- a.addString(on);
- a.addWord(strlen(nn));
- a.addString(nn);
- free(on);
- free(nn);
+ string on = convertSlash(oldname);
+ string nn = convertSlash(newname);
+ a.addWord(on.size());
+ a.addString(on.c_str());
+ a.addWord(nn.size());
+ a.addString(nn.c_str());
if (!sendCommand(RENAME, a))
return E_PSI_FILE_DISC;
return getResponse(a);
@@ -791,10 +757,9 @@ Enum<rfsv::errs> rfsv32::
remove(const char *name)
{
bufferStore a;
- char *n = convertSlash(name);
- a.addWord(strlen(n));
- a.addString(n);
- free(n);
+ string n = convertSlash(name);
+ a.addWord(n.size());
+ a.addString(n.c_str());
if (!sendCommand(DELETE, a))
return E_PSI_FILE_DISC;
return getResponse(a);