From 9fac7af37460c6a73a7debac1ba82b094a8f066c Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Fri, 2 Feb 2001 04:49:20 +0000 Subject: 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. --- lib/plpdirent.cc | 25 ++++++++- lib/plpdirent.h | 26 ++++++++- lib/rfsv.cc | 45 ++++++++------- lib/rfsv.h | 15 +++-- lib/rfsv16.cc | 140 ++++++++++++---------------------------------- lib/rfsv16.h | 3 +- lib/rfsv32.cc | 167 ++++++++++++++++++++++--------------------------------- lib/rfsv32.h | 3 +- 8 files changed, 187 insertions(+), 237 deletions(-) (limited to 'lib') diff --git a/lib/plpdirent.cc b/lib/plpdirent.cc index 345eac6..33e1a78 100644 --- a/lib/plpdirent.cc +++ b/lib/plpdirent.cc @@ -2,11 +2,25 @@ #include #include +PlpUID::PlpUID() { + memset(uid, 0, sizeof(uid)); +} + +PlpUID::PlpUID(const long u1, const long u2, const long u3) { + uid[0] = u1; uid[1] = u2; uid[2] = u3; +} + +long PlpUID:: +operator[](int idx) { + assert ((idx > -1) && (idx < 3)); + return uid[idx]; +} + PlpDirent::PlpDirent(const PlpDirent &e) { size = e.size; attr = e.attr; time = e.time; - memcpy(uid, e.uid, sizeof(uid)); + UID = e.UID; name = e.name; attrstr = e.attrstr; } @@ -24,10 +38,15 @@ getAttr() { long PlpDirent:: getUID(int uididx) { if ((uididx >= 0) && (uididx < 4)) - return uid[uididx]; + return UID[uididx]; return 0; } +PlpUID &PlpDirent:: +getUID() { + return UID; +} + const char *PlpDirent:: getName() { return name.c_str(); @@ -48,7 +67,7 @@ operator=(const PlpDirent &e) { size = e.size; attr = e.attr; time = e.time; - memcpy(uid, e.uid, sizeof(uid)); + UID = e.UID; name = e.name; attrstr = e.attrstr; return *this; diff --git a/lib/plpdirent.h b/lib/plpdirent.h index 808af37..d10c76a 100644 --- a/lib/plpdirent.h +++ b/lib/plpdirent.h @@ -5,6 +5,23 @@ #include #include +class PlpUID +{ + friend inline bool operator<(const PlpUID &u1, const PlpUID &u2); +public: + PlpUID(); + PlpUID(const long u1, const long u2, const long u3); + + long operator[](int idx); + +private: + long uid[3]; +}; + +inline bool operator<(const PlpUID &u1, const PlpUID &u2) { + return (memcmp(u1.uid, u2.uid, sizeof(u1.uid)) < 0); +} + /** * A class, representing a directory entry of the Psion. * Objects of this type are used by @ref rfsv::readdir and @@ -57,6 +74,13 @@ public: */ long getUID(int uididx); + /** + * Retrieves the @ref PlpUID object of a directory entry. + * + * @returns The PlpUID object. + */ + PlpUID &getUID(); + /** * Retrieve the file name of a directory entry. * @@ -102,7 +126,7 @@ public: private: long size; long attr; - long uid[3]; + PlpUID UID; PsiTime time; string attrstr; string name; diff --git a/lib/rfsv.cc b/lib/rfsv.cc index cd13cb3..68635d5 100644 --- a/lib/rfsv.cc +++ b/lib/rfsv.cc @@ -116,30 +116,35 @@ Enum rfsv::getStatus(void) { return status; } -// beware this returns static data -const char * const rfsv:: +string rfsv:: +convertSlash(const string &name) +{ + string tmp = ""; + for (const char *p = name.c_str(); *p; p++) + tmp += (*p == '/') ? '\\' : *p; + return tmp; +} + +string rfsv:: attr2String(const long attr) { - static char buf[11]; - buf[0] = ((attr & PSI_A_DIR) ? 'd' : '-'); - buf[1] = ((attr & PSI_A_READ) ? 'r' : '-'); - buf[2] = ((attr & PSI_A_RDONLY) ? '-' : 'w'); - buf[3] = ((attr & PSI_A_HIDDEN) ? 'h' : '-'); - buf[4] = ((attr & PSI_A_SYSTEM) ? 's' : '-'); - buf[5] = ((attr & PSI_A_ARCHIVE) ? 'a' : '-'); - buf[6] = ((attr & PSI_A_VOLUME) ? 'v' : '-'); + string tmp = ""; + tmp += ((attr & PSI_A_DIR) ? 'd' : '-'); + tmp += ((attr & PSI_A_READ) ? 'r' : '-'); + tmp += ((attr & PSI_A_RDONLY) ? '-' : 'w'); + tmp += ((attr & PSI_A_HIDDEN) ? 'h' : '-'); + tmp += ((attr & PSI_A_SYSTEM) ? 's' : '-'); + tmp += ((attr & PSI_A_ARCHIVE) ? 'a' : '-'); + tmp += ((attr & PSI_A_VOLUME) ? 'v' : '-'); // EPOC - buf[7] = ((attr & PSI_A_NORMAL) ? 'n' : '-'); - buf[8] = ((attr & PSI_A_TEMP) ? 't' : '-'); - buf[9] = ((attr & PSI_A_COMPRESSED) ? 'c' : '-'); - + tmp += ((attr & PSI_A_NORMAL) ? 'n' : '-'); + tmp += ((attr & PSI_A_TEMP) ? 't' : '-'); + tmp += ((attr & PSI_A_COMPRESSED) ? 'c' : '-'); // SIBO - buf[7] = ((attr & PSI_A_EXEC) ? 'x' : buf[7]); - buf[8] = ((attr & PSI_A_STREAM) ? 'b' : buf[8]); - buf[9] = ((attr & PSI_A_TEXT) ? 't' : buf[9]); - - buf[10] = '\0'; - return (char *) (&buf); + tmp[7] = ((attr & PSI_A_EXEC) ? 'x' : tmp[7]); + tmp[8] = ((attr & PSI_A_STREAM) ? 'b' : tmp[8]); + tmp[9] = ((attr & PSI_A_TEXT) ? 't' : tmp[9]); + return tmp; } diff --git a/lib/rfsv.h b/lib/rfsv.h index 79fbc68..fff8322 100644 --- a/lib/rfsv.h +++ b/lib/rfsv.h @@ -2,6 +2,7 @@ #define _rfsv_h_ #include +#include #include "Enum.h" #include "plpdirent.h" #include "bufferstore.h" @@ -291,13 +292,11 @@ class rfsv { * Retrieves attributes, size and modification time of a file on the Psion. * * @param name The name of the file. - * @param attr The file's attributes are returned here. - * @param size The file's size in bytes is returned here. - * @param time The file's modification time is returned here. + * @param e @ref PlpDirent object, filled with the information on return. * * @returns A Psion error code (One of enum @ref #errs ). */ - virtual Enum fgeteattr(const char * const name, long &attr, long &size, PsiTime &time) =0; + virtual Enum fgeteattr(const char * const name, PlpDirent &e) =0; /** * @param name @@ -541,7 +540,7 @@ class rfsv { * @returns Pointer to static textual representation of file attributes. * */ - const char * const attr2String(const long attr); + string attr2String(const long attr); /** * Converts an open-mode (A combination of the PSI_O_ constants.) @@ -553,6 +552,12 @@ class rfsv { * @ref fopen , @ref fcreatefile and @freplacefile. */ virtual long opMode(const long mode) = 0; + + /** + * Utility method, converts '/' to '\'. + */ + static string convertSlash(const string &name); + protected: /** * Retrieves the PLP protocol name. Mainly internal use. diff --git a/lib/rfsv16.cc b/lib/rfsv16.cc index d42b270..c4798eb 100644 --- a/lib/rfsv16.cc +++ b/lib/rfsv16.cc @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include @@ -49,56 +49,14 @@ rfsv16::rfsv16(ppsocket *_skt) reset(); } -Enum rfsv16:: -convertName(const char* orig, char *retVal) -{ - int len = strlen(orig); - char *temp = new char [len+1]; - - // FIXME: need to return 1 if OOM? - for (int i=0; i <= len; i++) { - if (orig[i] == '/') - temp[i] = '\\'; - else - temp[i] = orig[i]; - } - - if (len == 0 || temp[1] != ':') { - // We can automatically supply a drive letter - strcpy(retVal, DDRIVE); - - if (len == 0 || temp[0] != '\\') { - strcat(retVal, DBASEDIR); - } - else { - retVal[strlen(retVal)-1] = 0; - } - - strcat(retVal, temp); - } - else { - strcpy(retVal, temp); - } - - delete [] temp; - cout << retVal << endl; - return E_PSI_GEN_NONE; -} - Enum rfsv16:: fopen(long attr, const char *name, long &handle) { bufferStore a; - char realName[200]; - Enum rv = convertName(name, realName); - if (rv) return rv; - - // FIXME: anything that calls fopen should NOT do the name - // conversion - it's just done here. + string realName = convertSlash(name); a.addWord(attr & 0xFFFF); - a.addString(realName); - a.addByte(0x00); // Needs to be manually Null-Terminated. + a.addStringT(realName.c_str()); if (!sendCommand(FOPEN, a)) return E_PSI_FILE_DISC; @@ -197,11 +155,11 @@ readdir(rfsvDirhandle &dH, PlpDirent &e) { cerr << "dir: not version 2" << endl; return E_PSI_GEN_FAIL; } - e.attr = attr2std((long)dH.b.getWord(2)); - e.size = dH.b.getDWord(4); - e.time = PsiTime((time_t)dH.b.getDWord(8)); - e.name = dH.b.getString(16); - e.uid[0] = e.uid[1] = e.uid[2] = 0; + e.attr = attr2std((long)dH.b.getWord(2)); + e.size = dH.b.getDWord(4); + e.time = PsiTime((time_t)dH.b.getDWord(8)); + e.name = dH.b.getString(16); + // e.UID = PlpUID(0,0,0); e.attrstr = attr2String(e.attr); dH.b.discardFirstBytes(17 + e.name.length()); @@ -295,11 +253,8 @@ fgetmtime(const char * const name, PsiTime &mtime) cerr << "rfsv16::fgetmtime" << endl; // NB: fgetattr, fgeteattr is almost identical... bufferStore a; - char realName[200]; - Enum rv = convertName(name, realName); - if (rv) return rv; - a.addString(realName); - a.addByte(0x00); // needs to be null-terminated, + string realName = convertSlash(name); + a.addStringT(realName.c_str()); // and this needs sending in the length word. if (!sendCommand(FINFO, a)) return E_PSI_FILE_DISC; @@ -310,10 +265,6 @@ cerr << "rfsv16::fgetmtime" << endl; return res; } else if (a.getLen() == 16) { - // struct timeval tv; - // tv.tv_sec = a.getDWord(8); - // tv.tv_usec = 0; - // mtime.setUnixTime(&tv); mtime.setUnixTime(a.getDWord(8)); return res; } @@ -335,11 +286,8 @@ fgetattr(const char * const name, long &attr) { // NB: fgetmtime, fgeteattr are almost identical... bufferStore a; - char realName[200]; - Enum rv = convertName(name, realName); - if (rv) return rv; - a.addString(realName); - a.addByte(0x00); // needs to be null-terminated, + string realName = convertSlash(name); + a.addStringT(realName.c_str()); // and this needs sending in the length word. if (!sendCommand(FINFO, a)) return E_PSI_FILE_DISC; @@ -358,28 +306,29 @@ fgetattr(const char * const name, long &attr) } Enum rfsv16:: -fgeteattr(const char * const name, long &attr, long &size, PsiTime &time) +fgeteattr(const char * const name, PlpDirent &e) { bufferStore a; - char realName[200]; - Enum rv = convertName(name, realName); - if (rv) return rv; - a.addString(realName); - a.addByte(0x00); // needs to be null-terminated, - // and this needs sending in the length word. + string realName = convertSlash(name); + a.addStringT(realName.c_str()); if (!sendCommand(FINFO, a)) return E_PSI_FILE_DISC; - Enum res = getResponse(a); if (res != 0) { cerr << "fgeteattr: Error " << res << " on file " << name << endl; return res; } else if (a.getLen() == 16) { - attr = a.getWord(2); - size = a.getDWord(4); - time.setUnixTime(a.getDWord(8)); - //time = a.getDWord(8); + const char *p = strrchr(realName.c_str(), '\\'); + if (p) + p++; + else + p = realName.c_str(); + e.name = p; + e.attr = a.getWord(2); + e.size = a.getDWord(4); + e.time = PsiTime(a.getDWord(8)); + e.UID = PlpUID(0,0,0); return res; } cerr << "fgeteattr: Unknown response (" << name << ") " << a < rfsv16:: mkdir(const char* dirName) { - char realName[200]; - Enum res = convertName(dirName, realName); - if (res != E_PSI_GEN_NONE) return res; + string realName = convertSlash(dirName); bufferStore a; - a.addString(realName); - a.addByte(0x00); // needs to be null-terminated, - // and this needs sending in the length word. + a.addStringT(realName.c_str()); sendCommand(MKDIR, a); - res = getResponse(a); + Enum res = getResponse(a); if (res == E_PSI_GEN_NONE) { // Correct response return res; @@ -932,21 +877,14 @@ Enum rfsv16:: rename(const char *oldName, const char *newName) { cerr << "rfsv16::rename ***" << endl; - char realOldName[200]; - Enum res = convertName(oldName, realOldName); - if (res != E_PSI_GEN_NONE) return res; - char realNewName[200]; - res = convertName(newName, realNewName); - if (res != E_PSI_GEN_NONE) return res; + + string realOldName = convertSlash(oldName); + string realNewName = convertSlash(newName); bufferStore a; - a.addString(realOldName); - a.addByte(0x00); // needs to be null-terminated, - // and this needs sending in the length word. - a.addString(realNewName); - a.addByte(0x00); // needs to be null-terminated, - // and this needs sending in the length word. + a.addStringT(realOldName.c_str()); + a.addStringT(realNewName.c_str()); sendCommand(RENAME, a); - res = getResponse(a); + Enum res = getResponse(a); if (res == E_PSI_GEN_NONE) { // Correct response return res; @@ -958,12 +896,10 @@ cerr << "rfsv16::rename ***" << endl; Enum rfsv16:: remove(const char* psionName) { - char realName[200]; - Enum res = convertName(psionName, realName); - if (res != E_PSI_GEN_NONE) return res; + Enum res; + string realName = convertSlash(psionName); bufferStore a; - a.addString(realName); - a.addByte(0x00); // needs to be null-terminated, + a.addStringT(realName.c_str()); // and this needs sending in the length word. sendCommand(DELETE, a); res = getResponse(a); @@ -1054,5 +990,3 @@ std2attr(const long attr) return res; } - - diff --git a/lib/rfsv16.h b/lib/rfsv16.h index d0eda32..0b3bdab 100644 --- a/lib/rfsv16.h +++ b/lib/rfsv16.h @@ -16,7 +16,7 @@ public: Enum fgetmtime(const char * const, PsiTime &); Enum fsetmtime(const char * const, const PsiTime); Enum fgetattr(const char * const, long &); - Enum fgeteattr(const char * const, long &, long &, PsiTime &); + Enum fgeteattr(const char * const, PlpDirent &); Enum fsetattr(const char * const, const long seta, const long unseta); Enum dircount(const char * const, long &); Enum devlist(long &); @@ -99,7 +99,6 @@ private: // Miscellaneous - Enum convertName(const char*, char *); Enum fopendir(const char * const, long &); long attr2std(const long); long std2attr(const long); 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 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 res = getResponse(a); @@ -91,11 +80,10 @@ Enum 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 res = getResponse(a); @@ -108,11 +96,10 @@ Enum 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 res = getResponse(a); @@ -125,11 +112,10 @@ Enum 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 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 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 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 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 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 res = getResponse(a); @@ -281,29 +259,33 @@ fgetattr(const char * const name, long &attr) } Enum 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 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 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 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 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 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 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 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); diff --git a/lib/rfsv32.h b/lib/rfsv32.h index 2ef584b..4a738da 100644 --- a/lib/rfsv32.h +++ b/lib/rfsv32.h @@ -19,7 +19,7 @@ public: Enum remove(const char * const); Enum rename(const char * const, const char * const); Enum mktemp(long &, char * const); - Enum fgeteattr(const char * const, long &, long &, PsiTime &); + Enum fgeteattr(const char * const, PlpDirent &); Enum fgetattr(const char * const, long &); Enum fsetattr(const char * const, const long, const long); Enum fgetmtime(const char * const, PsiTime &); @@ -159,7 +159,6 @@ private: // Communication bool sendCommand(enum commands, bufferStore &); Enum getResponse(bufferStore &); - char *convertSlash(const char *); // time-conversion // unsigned long micro2time(unsigned long, unsigned long); -- cgit v1.2.3