aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2001-02-01 02:03:25 +0000
committerFritz Elfert <felfert@to.com>2001-02-01 02:03:25 +0000
commit6c9647c1866b49d61ea3ce7d9201450fa0497b52 (patch)
treed240f512fb1a5d72f5b0fe3ad4b60c937cfd8274
parent320ed6edbbde5936ac07247896fbc2f51505a469 (diff)
downloadplptools-6c9647c1866b49d61ea3ce7d9201450fa0497b52.tar.gz
plptools-6c9647c1866b49d61ea3ce7d9201450fa0497b52.tar.bz2
plptools-6c9647c1866b49d61ea3ce7d9201450fa0497b52.zip
More cleanup:
- Removed bool.h and references to it everywhere. This is checked now in ./configure and the stuff went into acconfig.h - Replaced ugly bufferStore-based method of returning directory entries from rfsv::readdir() by a cleaner way. (A new, separate class PlpDirent is returned now.) With the old implementation, the caller has to know about the layout of the entries. Also, the old implementation was not 64bit aware. - Similar replacement done for rfsv::dir(). This now returns the entries in a standard STL container (deque) instead of a bufferArray. - Started renaming #include statements for standard library headers from the old <xxx.h> form to the new recommended <xxx> form.
-rw-r--r--Makefile.am2
-rw-r--r--acconfig.h12
-rw-r--r--configure.in3
-rw-r--r--kde2/kioslave/kio_plp.cpp28
-rw-r--r--kde2/kioslave/kio_plp.h2
-rw-r--r--lib/Makefile.am6
-rw-r--r--lib/bool.h20
-rw-r--r--lib/bufferarray.h4
-rw-r--r--lib/bufferstore.h3
-rw-r--r--lib/iowatch.cc1
-rw-r--r--lib/iowatch.h2
-rw-r--r--lib/plpdirent.h110
-rw-r--r--lib/ppsocket.cc1
-rw-r--r--lib/ppsocket.h1
-rw-r--r--lib/psitime.cc17
-rw-r--r--lib/psitime.h10
-rw-r--r--lib/rfsv.h51
-rw-r--r--lib/rfsv16.cc33
-rw-r--r--lib/rfsv16.h4
-rw-r--r--lib/rfsv32.cc99
-rw-r--r--lib/rfsv32.h8
-rw-r--r--lib/rfsvfactory.cc1
-rw-r--r--lib/rpcs.cc1
-rw-r--r--lib/rpcs16.cc1
-rw-r--r--lib/rpcs32.cc1
-rw-r--r--lib/rpcsfactory.cc1
-rw-r--r--ncpd/channel.cc4
-rw-r--r--ncpd/channel.h5
-rw-r--r--ncpd/link.cc1
-rw-r--r--ncpd/link.h4
-rw-r--r--ncpd/ncp.cc3
-rw-r--r--ncpd/ncp.h4
-rw-r--r--ncpd/packet.cc5
-rw-r--r--ncpd/packet.h5
-rw-r--r--ncpd/socketchan.cc4
-rw-r--r--ncpd/socketchan.h4
-rw-r--r--plpbackup/plpbackup.cc273
-rw-r--r--plpftp/ftp.cc49
-rw-r--r--plpftp/ftp.h4
-rw-r--r--plpftp/main.cc3
-rw-r--r--plpnfsd/main.cc19
41 files changed, 449 insertions, 360 deletions
diff --git a/Makefile.am b/Makefile.am
index 1152b4f..9ab1ebf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,6 +22,8 @@ maintainer-clean-local:
conf/config.guess conf/config.sub conf/install-sh conf/ltconfig \
conf/ltmain.sh conf/missing conf/mkinstalldirs \
etc/*.spec
+ find . -name "*~" -exec rm -f {} \;
+ find . -name "\.\#*" -exec rm -f {} \;
dist-hook:
$(MAKE) TMPDEST=$(distdir)/ kdoc specfile
diff --git a/acconfig.h b/acconfig.h
index e64db73..c02eb23 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -68,5 +68,17 @@
# define NDEBUG
#endif
+#ifndef HAVE_BOOL
+# ifndef bool
+# define bool int
+# endif
+# ifndef true
+# define true 1
+# endif
+# ifndef false
+# define false 0
+# endif
+#endif
+
#endif /* _CONFIG_H_ */
diff --git a/configure.in b/configure.in
index 7157287..b391e48 100644
--- a/configure.in
+++ b/configure.in
@@ -119,6 +119,9 @@ else
AC_DEFINE_UNQUOTED(DONT_UPDATE_MTAB)
fi
+dnl Check, if compiler knows about bool
+AC_CHECK_BOOL
+
dnl Type of sighandlers
AC_TYPE_SIGNAL
diff --git a/kde2/kioslave/kio_plp.cpp b/kde2/kioslave/kio_plp.cpp
index 8cf76c7..587ef98 100644
--- a/kde2/kioslave/kio_plp.cpp
+++ b/kde2/kioslave/kio_plp.cpp
@@ -260,27 +260,25 @@ listDir(const KURL& _url) {
convertName(path);
path += "\\";
- bufferArray files;
+ PlpDir files;
Enum<rfsv::errs> res = plpRfsv->dir(path, files);
if (checkForError(res))
return;
- totalSize(files.length());
+ totalSize(files.size());
UDSEntry entry;
- while (!files.empty()) {
+ for (int i = 0; i < files.size(); i++) {
UDSAtom atom;
- bufferStore s = files.pop();
- PsiTime *date = (PsiTime *)s.getDWord(0);
- long size = s.getDWord(4);
- long attr = s.getDWord(8);
- entry.clear();
+ PlpDirent e = files[i];
+ long attr = e.getAttr();
+ entry.clear();
atom.m_uds = KIO::UDS_NAME;
- atom.m_str = s.getString(12);
+ atom.m_str = e.getName();
entry.append(atom);
if (rom)
attr |= rfsv::PSI_A_RDONLY;
- completeUDSEntry(entry, attr, size, date);
+ completeUDSEntry(entry, attr, e.getSize(), e.getPsiTime().getTime());
listEntry(entry, false);
}
listEntry(entry, true); // ready
@@ -364,14 +362,14 @@ stat( const KURL & url) {
atom.m_uds = KIO::UDS_NAME;
atom.m_str = fileName;
entry.append(atom);
- completeUDSEntry(entry, attr, size, &time);
+ completeUDSEntry(entry, attr, size, time.getTime());
statEntry(entry);
finished();
}
void PLPProtocol::
-completeUDSEntry(UDSEntry& entry, const long attr, const long size, PsiTime *date) {
+completeUDSEntry(UDSEntry& entry, const long attr, const long size, const time_t date) {
UDSAtom atom;
atom.m_uds = KIO::UDS_SIZE;
@@ -379,7 +377,7 @@ completeUDSEntry(UDSEntry& entry, const long attr, const long size, PsiTime *dat
entry.append(atom);
atom.m_uds = KIO::UDS_MODIFICATION_TIME;
- atom.m_long = date->getTime();
+ atom.m_long = date;
entry.append(atom);
atom.m_uds = KIO::UDS_ACCESS;
@@ -661,8 +659,8 @@ put( const KURL& url, int _mode, bool _overwrite, bool /*_resume*/ ) {
void PLPProtocol::
rename(const KURL &src, const KURL &dest, bool _overwrite) {
- QString from( QFile::encodeName(src.path()));
- QString to( QFile::encodeName(dest.path()));
+ QString from(QFile::encodeName(src.path()));
+ QString to(QFile::encodeName(dest.path()));
if (checkConnection())
return;
diff --git a/kde2/kioslave/kio_plp.h b/kde2/kioslave/kio_plp.h
index 4f1bc23..0112801 100644
--- a/kde2/kioslave/kio_plp.h
+++ b/kde2/kioslave/kio_plp.h
@@ -56,7 +56,7 @@ class PLPProtocol : public KIO::SlaveBase
char driveChar(const QString& path);
void createVirtualDirEntry(KIO::UDSEntry & entry, bool rdonly);
- void completeUDSEntry(KIO::UDSEntry& entry, const long attr, const long size, PsiTime *date);
+ void completeUDSEntry(KIO::UDSEntry& entry, const long attr, const long size, const time_t date);
bool checkForError(Enum<rfsv::errs> res);
bool isRomDrive(const QString& path);
bool isDrive(const QString& path);
diff --git a/lib/Makefile.am b/lib/Makefile.am
index af983e3..367fbb7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -5,10 +5,10 @@ lib_LTLIBRARIES = libplp.la
libplp_la_LDFLAGS = --debug -version-info 1:1:0
libplp_la_SOURCES = bufferarray.cc bufferstore.cc iowatch.cc ppsocket.cc \
rfsv16.cc rfsv32.cc rfsvfactory.cc log.cc rfsv.cc rpcs32.cc rpcs16.cc \
- rpcs.cc rpcsfactory.cc psitime.cc Enum.cc
-pkginclude_HEADERS = bool.h bufferarray.h bufferstore.h iowatch.h ppsocket.h \
+ rpcs.cc rpcsfactory.cc psitime.cc Enum.cc plpdirent.cc
+pkginclude_HEADERS = bufferarray.h bufferstore.h iowatch.h ppsocket.h \
rfsv.h rfsv16.h rfsv32.h rfsvfactory.h log.h rpcs32.h rpcs16.h rpcs.h \
- rpcsfactory.h psitime.h Enum.h
+ rpcsfactory.h psitime.h Enum.h plpdirent.h
maintainer-clean-local:
rm -f Makefile.in
diff --git a/lib/bool.h b/lib/bool.h
deleted file mode 100644
index 7525d6c..0000000
--- a/lib/bool.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _bool_h_
-#define _bool_h_
-
-#ifndef __GNUC__
-
-#ifndef bool
-#define bool int
-#endif
-
-#ifndef true
-#define true 1
-#endif
-
-#ifndef false
-#define false 0
-#endif
-
-#endif
-
-#endif
diff --git a/lib/bufferarray.h b/lib/bufferarray.h
index b43dcbd..358d428 100644
--- a/lib/bufferarray.h
+++ b/lib/bufferarray.h
@@ -1,7 +1,9 @@
#ifndef _bufferarray_h
#define _bufferarray_h
-#include "bool.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
class bufferStore;
/**
diff --git a/lib/bufferstore.h b/lib/bufferstore.h
index 494d0af..65f6607 100644
--- a/lib/bufferstore.h
+++ b/lib/bufferstore.h
@@ -1,7 +1,6 @@
#ifndef _bufferstore_h
#define _bufferstore_h
-#include "bool.h"
class ostream;
/**
@@ -210,7 +209,7 @@ private:
};
inline bool bufferStore::empty() const {
- return (len-start) == 0;
+ return (len - start) == 0;
}
#endif
diff --git a/lib/iowatch.cc b/lib/iowatch.cc
index df7be8e..e3c86fc 100644
--- a/lib/iowatch.cc
+++ b/lib/iowatch.cc
@@ -26,7 +26,6 @@
#include <stream.h>
#include <memory.h>
-#include "bool.h"
#include "iowatch.h"
IOWatch::IOWatch() {
diff --git a/lib/iowatch.h b/lib/iowatch.h
index a578e05..12abb1f 100644
--- a/lib/iowatch.h
+++ b/lib/iowatch.h
@@ -1,8 +1,6 @@
#ifndef _iowatch_h
#define _iowatch_h
-#include "bool.h"
-
/**
* A simple wrapper for select()
*
diff --git a/lib/plpdirent.h b/lib/plpdirent.h
new file mode 100644
index 0000000..f29cc74
--- /dev/null
+++ b/lib/plpdirent.h
@@ -0,0 +1,110 @@
+#ifndef _PLP_DIRENT_H_
+#define _PLP_DIRENT_H_
+
+#include <string>
+#include <psitime.h>
+#include <rfsv.h>
+
+/**
+ * A class, representing a directory entry of the Psion.
+ * Objects of this type are used by @ref rfsv::readdir and
+ * @ref rfsv::dir for returning the entries of a directory.
+ */
+class PlpDirent {
+ friend class rfsv32;
+ friend class rfsv16;
+
+public:
+ /**
+ * Default constructor
+ */
+ PlpDirent() : size(0), attr(0), name(""), time(0L), attrstr("") { };
+
+ /**
+ * A copy constructor.
+ * Mainly used by STL container classes.
+ *
+ * @param d The object to be used as initializer.
+ */
+ PlpDirent(const PlpDirent &d);
+
+ /**
+ * Default destructor.
+ */
+ ~PlpDirent() {};
+
+ /**
+ * Retrieves the file size of a directory entry.
+ *
+ * @returns The file size in bytes.
+ */
+ long getSize();
+
+ /**
+ * Retrieves the file attributes of a directory entry.
+ *
+ * @returns The generic attributes ( @ref rfsv:file_attribs ).
+ */
+ long getAttr();
+
+ /**
+ * Retrieves the UIDs of a directory entry.
+ * This method returns always 0 with a Series3.
+ *
+ * @param uididx The index of the UID to retrieve (0 .. 2).
+ *
+ * @returns The selected UID or 0 if the index is out of range.
+ */
+ long getUID(int uididx);
+
+ /**
+ * Retrieve the file name of a directory entry.
+ *
+ * @returns The name of the file.
+ */
+ const char *getName();
+
+ /**
+ * Retrieve the modification time of a directory entry.
+ *
+ * @returns A @ref PsiTime object, representing the time.
+ */
+ PsiTime getPsiTime();
+
+ /**
+ * Set the file name of a directory entry.
+ * This is currently used in plpbackup only for
+ * changing the name to the full path. It does NOT
+ * change the name of the corresponding file on
+ * the Psion.
+ *
+ * @param str The new name of the file.
+ */
+ void setName(const char *str);
+
+ /**
+ * Assignment opreator
+ * Mainly used by STL container classes.
+ *
+ * @param e The new value to assign.
+ *
+ * @returns The modified object.
+ */
+ PlpDirent &operator=(const PlpDirent &e);
+
+ /**
+ * Prints the object contents.
+ * The output is in human readable similar to the
+ * output of a "ls" command.
+ */
+ friend ostream &operator<<(ostream &o, const PlpDirent &e);
+
+private:
+ long size;
+ long attr;
+ long uid[3];
+ PsiTime time;
+ string attrstr;
+ string name;
+};
+#endif
diff --git a/lib/ppsocket.cc b/lib/ppsocket.cc
index 2140cf8..cfaa429 100644
--- a/lib/ppsocket.cc
+++ b/lib/ppsocket.cc
@@ -35,7 +35,6 @@
#include <netinet/in.h>
#include <arpa/inet.h>
-#include "bool.h"
#include "bufferstore.h"
#include "ppsocket.h"
diff --git a/lib/ppsocket.h b/lib/ppsocket.h
index 3cd288a..f36344c 100644
--- a/lib/ppsocket.h
+++ b/lib/ppsocket.h
@@ -26,7 +26,6 @@
extern int errno;
-#include "bool.h"
class bufferStore;
class ppsocket
diff --git a/lib/psitime.cc b/lib/psitime.cc
index 11e16e0..bb4ea78 100644
--- a/lib/psitime.cc
+++ b/lib/psitime.cc
@@ -43,6 +43,14 @@ PsiTime::PsiTime(struct timeval *_utv = 0L, struct timezone *_utz = 0L) {
unix2psi();
}
+PsiTime::PsiTime(const PsiTime &t) {
+ utv = t.utv;
+ utz = t.utz;
+ ptv = t.ptv;
+ ptz = t.ptz;
+ ptzValid = t.ptzValid;
+}
+
PsiTime::~PsiTime() {
}
@@ -104,6 +112,15 @@ const unsigned long PsiTime::getPsiTimeHi(void) {
return ptv.tv_high;
}
+PsiTime &PsiTime::operator=(const PsiTime &t) {
+ utv = t.utv;
+ utz = t.utz;
+ ptv = t.ptv;
+ ptz = t.ptz;
+ ptzValid = t.ptzValid;
+ return *this;
+}
+
ostream &operator<<(ostream &s, const PsiTime &t) {
const char *fmt = "%c";
char buf[100];
diff --git a/lib/psitime.h b/lib/psitime.h
index 9755473..7072711 100644
--- a/lib/psitime.h
+++ b/lib/psitime.h
@@ -133,6 +133,11 @@ public:
PsiTime(void);
/**
+ * A copy-constructor
+ */
+ PsiTime(const PsiTime &t);
+
+ /**
* Destroys the instance.
*/
~PsiTime();
@@ -231,6 +236,11 @@ public:
*/
friend ostream &operator<<(ostream &s, const PsiTime &t);
+ /**
+ * Assignment operator
+ */
+ PsiTime &operator=(const PsiTime &t);
+
enum zone {
PSI_TZ_NONE = 0,
PSI_TZ_EUROPEAN = 1,
diff --git a/lib/rfsv.h b/lib/rfsv.h
index c6dafb5..b9279d4 100644
--- a/lib/rfsv.h
+++ b/lib/rfsv.h
@@ -1,12 +1,14 @@
#ifndef _rfsv_h_
#define _rfsv_h_
+#include <deque>
#include "Enum.h"
-#include "psitime.h"
+#include "plpdirent.h"
#include "bufferstore.h"
+typedef deque<class PlpDirent> PlpDir;
+
class ppsocket;
-class bufferArray;
const long RFSV_SENDLEN = 2000;
@@ -190,8 +192,8 @@ class rfsv {
* @param attr The open mode. Use @ref opMode to convert a combination of @ref open_flags
* and @ref open_mode to the machine-specific representation.
* @param name The name of the file to open.
- * @param handle The handle for usage with @ref fread,
- * @ref frwrite, @ref fseek @ref fclose is returned here.
+ * @param handle The handle for usage with @ref fread ,
+ * @ref frwrite , @ref fseek or @ref fclose is returned here.
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
@@ -201,8 +203,8 @@ class rfsv {
* Creates a unique temporary file.
* The file is opened for reading and writing.
*
- * @param handle The handle for usage with @ref fread,
- * @ref frwrite, @ref fseek @ref fclose is returned here.
+ * @param handle The handle for usage with @ref fread ,
+ * @ref frwrite , @ref fseek or @ref fclose is returned here.
* @param name The name of the temporary file is returned here.
*
* @returns A Psion error code (One of enum @ref #errs ).
@@ -215,8 +217,8 @@ class rfsv {
* @param attr The open mode. Use @ref opMode to convert a combination of @ref open_flags
* and @ref open_mode to the machine-specific representation.
* @param name The name of the file to create.
- * @param handle The handle for usage with @ref fread,
- * @ref frwrite, @ref fseek @ref fclose is returned here.
+ * @param handle The handle for usage with @ref fread ,
+ * @ref frwrite , @ref fseek or @ref fclose is returned here.
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
@@ -228,8 +230,8 @@ class rfsv {
* @param attr The open mode. Use @ref opMode to convert a combination of @ref open_flags
* and @ref open_mode to the machine-specific representation.
* @param name The name of the file to create.
- * @param handle The handle for usage with @ref fread,
- * @ref frwrite, @ref fseek @ref fclose is returned here.
+ * @param handle The handle for usage with @ref fread ,
+ * @ref frwrite , @ref fseek or @ref fclose is returned here.
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
@@ -237,7 +239,7 @@ class rfsv {
/**
* Close a file on the Psion whih was previously opened/created by using
- * @ref fopen, @ref fcreatefile, @ref freplacefile or @ref mktemp.
+ * @ref fopen , @ref fcreatefile , @ref freplacefile or @ref mktemp .
*
* @param handle A valid file handle.
*/
@@ -247,14 +249,14 @@ class rfsv {
* Reads a directory on the Psion.
* The returned array of @ref bufferArray contains one @ref bufferStore element
* for each directory entry. For a description of the layout of the elements
- * in each directory entry, see @ref readdir.
+ * in each directory entry, see @ref readdir .
*
* @param name The name of the directory
- * @param ret Array of @ref bufferStore containing information for directory entries.
+ * @param ret An STL deque of @ref PlpDirent entries.
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
- virtual Enum<errs> dir(const char * const name, bufferArray &ret) = 0;
+ virtual Enum<errs> dir(const char * const name, PlpDir &ret) = 0;
/**
* Retrieves the modification time of a file on the Psion.
@@ -473,9 +475,9 @@ class rfsv {
* Open a directory for reading with readdir.
*
* @param attr A combination of PSI_A_.. flags, representing the desired types
- * of entries to be returned when calling @ref readdir.
+ * of entries to be returned when calling @ref readdir .
* @param name The name of the directory
- * @param handle A handle to be used with @ref readdir and @ref closedir.
+ * @param handle A handle to be used with @ref readdir and @ref closedir .
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
@@ -484,23 +486,14 @@ class rfsv {
/**
* Read directory entries.
* This method reads entries of a directory, previously
- * opened with @ref opendir.
+ * opened with @ref opendir .
*
- * The entry is returned in the buff parameter as follows:
- * <pre>
- * offset size value
- * 0 4 Pointer to a PsiTime object, representing the file's modification.
- * 4 4 Size in bytes.
- * 8 4 Attributes.
- * 12 ? Zero terminated file name.
- * </pre>
- *
- * @param handle A handle, obtained by calling @see opendir.
- * @param buff The entry information is returned here.
+ * @param handle A handle, obtained by calling @ref opendir .
+ * @param entry The entry information is returned here.
*
* @returns A Psion error code (One of enum @ref #errs ).
*/
- virtual Enum<errs> readdir(rfsvDirhandle &handle, bufferStore &buff) = 0;
+ virtual Enum<errs> readdir(rfsvDirhandle &handle, PlpDirent &entry) = 0;
/**
* Close a directory, previously opened with @ref opendir.
diff --git a/lib/rfsv16.cc b/lib/rfsv16.cc
index fdec2e7..26a153b 100644
--- a/lib/rfsv16.cc
+++ b/lib/rfsv16.cc
@@ -34,7 +34,6 @@
#include <time.h>
#include <string>
-#include "bool.h"
#include "rfsv16.h"
#include "bufferstore.h"
#include "ppsocket.h"
@@ -181,7 +180,7 @@ closedir(rfsvDirhandle &dH) {
}
Enum<rfsv::errs> rfsv16::
-readdir(rfsvDirhandle &dH, bufferStore &s) {
+readdir(rfsvDirhandle &dH, PlpDirent &e) {
Enum<rfsv::errs> res = E_PSI_GEN_NONE;
if (dH.b.getLen() < 17) {
@@ -198,32 +197,30 @@ readdir(rfsvDirhandle &dH, bufferStore &s) {
cerr << "dir: not version 2" << endl;
return E_PSI_GEN_FAIL;
}
- long attr = attr2std((long)dH.b.getWord(2));
- long size = dH.b.getDWord(4);
- PsiTime *date = new PsiTime((time_t)dH.b.getDWord(8));
- const char *name = dH.b.getString(16);
-
- dH.b.discardFirstBytes(17+strlen(name));
-
- s.init();
- s.addDWord((unsigned long)date);
- s.addDWord(size);
- s.addDWord(attr);
- s.addStringT(name);
+ 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.attrstr = attr2String(e.attr);
+
+ dH.b.discardFirstBytes(17 + e.name.length());
+
}
return res;
}
Enum<rfsv::errs> rfsv16::
-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)
diff --git a/lib/rfsv16.h b/lib/rfsv16.h
index 852d816..d0eda32 100644
--- a/lib/rfsv16.h
+++ b/lib/rfsv16.h
@@ -12,7 +12,7 @@ public:
Enum<rfsv::errs> fcreatefile(const long, const char * const, long &);
Enum<rfsv::errs> freplacefile(const long, const char * const, long &);
Enum<rfsv::errs> fclose(const long);
- Enum<rfsv::errs> dir(const char * const, bufferArray &);
+ Enum<rfsv::errs> dir(const char * const, PlpDir &);
Enum<rfsv::errs> fgetmtime(const char * const, PsiTime &);
Enum<rfsv::errs> fsetmtime(const char * const, const PsiTime);
Enum<rfsv::errs> fgetattr(const char * const, long &);
@@ -33,7 +33,7 @@ public:
Enum<rfsv::errs> rename(const char * const, const char * const);
Enum<rfsv::errs> remove(const char * const);
Enum<rfsv::errs> opendir(const long, const char * const, rfsvDirhandle &);
- Enum<rfsv::errs> readdir(rfsvDirhandle &, bufferStore &);
+ Enum<rfsv::errs> readdir(rfsvDirhandle &, PlpDirent &);
Enum<rfsv::errs> closedir(rfsvDirhandle &);
Enum<rfsv::errs> setVolumeName(const char, const char * const);
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::
diff --git a/lib/rfsv32.h b/lib/rfsv32.h
index fb4c624..2ef584b 100644
--- a/lib/rfsv32.h
+++ b/lib/rfsv32.h
@@ -2,13 +2,14 @@
#define _rfsv32_h_
#include "rfsv.h"
+#include "plpdirent.h"
class rfsv32 : public rfsv {
public:
rfsv32(ppsocket *);
- Enum<rfsv::errs> dir(const char * const, bufferArray &);
+ Enum<rfsv::errs> dir(const char * const, PlpDir &);
Enum<rfsv::errs> dircount(const char * const, long &);
Enum<rfsv::errs> copyFromPsion(const char * const, const char * const, void *, cpCallback_t);
Enum<rfsv::errs> copyToPsion(const char * const, const char * const, void *, cpCallback_t);
@@ -35,7 +36,7 @@ public:
Enum<rfsv::errs> devlist(long &);
Enum<rfsv::errs> devinfo(const int, long &, long &, long &, long &, char * const);
Enum<rfsv::errs> opendir(const long, const char * const, rfsvDirhandle &);
- Enum<rfsv::errs> readdir(rfsvDirhandle &, bufferStore &);
+ Enum<rfsv::errs> readdir(rfsvDirhandle &, PlpDirent &);
Enum<rfsv::errs> closedir(rfsvDirhandle &);
Enum<rfsv::errs> setVolumeName(const char, const char * const);
long opMode(const long);
@@ -52,7 +53,8 @@ private:
EPOC_ATTR_NORMAL = 0x0080,
EPOC_ATTR_TEMPORARY = 0x0100,
EPOC_ATTR_COMPRESSED = 0x0800,
- EPOC_ATTR_MASK = 0x09f7 /* All of the above */
+ EPOC_ATTR_MASK = 0x09f7, /* All of the above */
+ EPOC_ATTR_GETUID = 0x10000000 /* Deliver UIDs on dir listing */
};
enum open_mode {
diff --git a/lib/rfsvfactory.cc b/lib/rfsvfactory.cc
index a0d8480..12bd623 100644
--- a/lib/rfsvfactory.cc
+++ b/lib/rfsvfactory.cc
@@ -29,7 +29,6 @@
#include <time.h>
#include <string.h>
-#include "bool.h"
#include "rfsv.h"
#include "rfsv16.h"
#include "rfsv32.h"
diff --git a/lib/rpcs.cc b/lib/rpcs.cc
index d93fad0..837f235 100644
--- a/lib/rpcs.cc
+++ b/lib/rpcs.cc
@@ -25,7 +25,6 @@
#include <time.h>
#include <string.h>
-#include "bool.h"
#include "rpcs.h"
#include "bufferstore.h"
#include "ppsocket.h"
diff --git a/lib/rpcs16.cc b/lib/rpcs16.cc
index 6e196fc..0a3121b 100644
--- a/lib/rpcs16.cc
+++ b/lib/rpcs16.cc
@@ -25,7 +25,6 @@
#include <time.h>
#include <string.h>
-#include "bool.h"
#include "rpcs16.h"
#include "bufferstore.h"
#include "ppsocket.h"
diff --git a/lib/rpcs32.cc b/lib/rpcs32.cc
index 2175ef0..7a7982f 100644
--- a/lib/rpcs32.cc
+++ b/lib/rpcs32.cc
@@ -26,7 +26,6 @@
#include <time.h>
#include <string.h>
-#include "bool.h"
#include "rpcs32.h"
#include "bufferstore.h"
#include "bufferarray.h"
diff --git a/lib/rpcsfactory.cc b/lib/rpcsfactory.cc
index 869c6c5..091f12a 100644
--- a/lib/rpcsfactory.cc
+++ b/lib/rpcsfactory.cc
@@ -30,7 +30,6 @@
#include <time.h>
#include <string.h>
-#include "bool.h"
#include "rpcs16.h"
#include "rpcs32.h"
#include "rpcsfactory.h"
diff --git a/ncpd/channel.cc b/ncpd/channel.cc
index f52cea1..d708cd9 100644
--- a/ncpd/channel.cc
+++ b/ncpd/channel.cc
@@ -23,9 +23,11 @@
// e-mail philip.proudman@btinternet.com
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stream.h>
-#include "bool.h"
#include "channel.h"
#include "ncp.h"
diff --git a/ncpd/channel.h b/ncpd/channel.h
index 2c06d6d..90f08f6 100644
--- a/ncpd/channel.h
+++ b/ncpd/channel.h
@@ -25,10 +25,11 @@
#ifndef _channel_h_
#define _channel_h_
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
-#include "bool.h"
-
class ncp;
class bufferStore;
diff --git a/ncpd/link.cc b/ncpd/link.cc
index f4f73e4..90a7451 100644
--- a/ncpd/link.cc
+++ b/ncpd/link.cc
@@ -30,7 +30,6 @@
#include <stdlib.h>
#include <stdio.h>
-#include "bool.h"
#include "link.h"
#include "packet.h"
#include "bufferstore.h"
diff --git a/ncpd/link.h b/ncpd/link.h
index 23e2ac5..010100b 100644
--- a/ncpd/link.h
+++ b/ncpd/link.h
@@ -25,7 +25,9 @@
#ifndef _link_h_
#define _link_h_
-#include "bool.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include "bufferstore.h"
#include "bufferarray.h"
diff --git a/ncpd/ncp.cc b/ncpd/ncp.cc
index 1fbd533..8af83d8 100644
--- a/ncpd/ncp.cc
+++ b/ncpd/ncp.cc
@@ -23,14 +23,13 @@
// e-mail philip.proudman@btinternet.com
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
#include <stream.h>
#include <string.h>
#include <time.h>
-#include "bool.h"
#include "ncp.h"
#include "linkchan.h"
#include "bufferstore.h"
diff --git a/ncpd/ncp.h b/ncpd/ncp.h
index c71fdc1..3b82ea8 100644
--- a/ncpd/ncp.h
+++ b/ncpd/ncp.h
@@ -25,7 +25,9 @@
#ifndef _ncp_h_
#define _ncp_h_
-#include "bool.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include "bufferstore.h"
#include "linkchan.h"
class link;
diff --git a/ncpd/packet.cc b/ncpd/packet.cc
index 5c05849..ebefc0a 100644
--- a/ncpd/packet.cc
+++ b/ncpd/packet.cc
@@ -23,6 +23,10 @@
// e-mail philip.proudman@btinternet.com
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <malloc.h>
#include <unistd.h>
@@ -38,7 +42,6 @@
extern "C" {
#include "mp_serial.h"
}
-#include "bool.h"
#include "bufferstore.h"
#include "packet.h"
#include "iowatch.h"
diff --git a/ncpd/packet.h b/ncpd/packet.h
index 86db078..afab41d 100644
--- a/ncpd/packet.h
+++ b/ncpd/packet.h
@@ -25,10 +25,11 @@
#ifndef _packet_h
#define _packet_h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
-#include "bool.h"
-class psiEmul;
class bufferStore;
class IOWatch;
diff --git a/ncpd/socketchan.cc b/ncpd/socketchan.cc
index a7d612e..1e3fd08 100644
--- a/ncpd/socketchan.cc
+++ b/ncpd/socketchan.cc
@@ -22,12 +22,14 @@
//
// e-mail philip.proudman@btinternet.com
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stream.h>
#include "stdio.h"
#include "string.h"
#include "malloc.h"
-#include "bool.h"
#include "socketchan.h"
#include "ncp.h"
#include "ppsocket.h"
diff --git a/ncpd/socketchan.h b/ncpd/socketchan.h
index 5fe7a13..15645dd 100644
--- a/ncpd/socketchan.h
+++ b/ncpd/socketchan.h
@@ -25,7 +25,9 @@
#ifndef _socketchan_h_
#define _socketchan_h_
-#include "bool.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include "channel.h"
class ppsocket;
class IOWatch;
diff --git a/plpbackup/plpbackup.cc b/plpbackup/plpbackup.cc
index ebc77e5..8735ea3 100644
--- a/plpbackup/plpbackup.cc
+++ b/plpbackup/plpbackup.cc
@@ -20,7 +20,7 @@
//
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
#include <sys/types.h>
@@ -36,8 +36,8 @@
#include <sys/stat.h>
#include <errno.h>
#include <pwd.h>
+#include <getopt.h>
-#include "bool.h"
#include "ppsocket.h"
#include "rfsv.h"
#include "rfsvfactory.h"
@@ -50,20 +50,24 @@
void
usage(ostream *hlp)
{
- *hlp << "Usage : plpbackup [-p <port>] [-v] [-f] [drive1:] [drive2:] ..." << endl;
- *hlp << endl;
- *hlp << " Options:" << endl;
- *hlp << " -h Print this message and exit." << endl;
- *hlp << " -V Print version and exit." << endl;
- *hlp << " -p <port> Connect to ncpd using given port." << endl;
- *hlp << " -v Increase verbosity." << endl;
- *hlp << " -f Do a full backup. (Incremental otherwise)" << endl;
- *hlp << " <drive> A drive character. If none given, scan all drives" << endl;
+ *hlp
+ << "Usage: plpbackup OPTIONS [<drive>:] [<drive>:] ..." << endl
+ << endl
+ << " Options:" << endl
+ << " -h, --help Print this message and exit." << endl
+ << " -V, --version Print version and exit." << endl
+ << " -p, --port=<port> Connect to ncpd using given port." << endl
+ << " -v, --verbose Increase verbosity." << endl
+ << " -q, --quiet Decrease verbosity." << endl
+ << " -f, --full Do a full backup (incremental otherwise)." << endl
+ << endl
+ << " <drive> A drive character. If none given, scan all drives." << endl
+ << endl;
}
bool full;
int verbose = 0;
-bufferArray toBackup;
+PlpDir toBackup;
unsigned long backupSize = 0;
unsigned long totalBytes = 0;
unsigned long fileSize = 0;
@@ -183,7 +187,7 @@ runrestore(rfsv *a, rpcs *r) {
static void
collectFiles(rfsv *a, char *dir) {
Enum<rfsv::errs> res;
- bufferArray files;
+ PlpDir files;
char tmp[1024];
strcpy(tmp, dir);
@@ -191,22 +195,20 @@ collectFiles(rfsv *a, char *dir) {
if ((res = a->dir(tmp, files)) != rfsv::E_PSI_GEN_NONE)
cerr << "Error: " << res << endl;
else
- while (!files.empty()) {
- bufferStore s;
+ for (int i = 0; i < files.size(); i++) {
+ PlpDirent e = files[i];
- s = files.pop();
- long size = s.getDWord(4);
- long attr = s.getDWord(8);
+ // long size = s.getDWord(4);
+ long attr = e.getAttr();
strcpy(tmp, dir);
strcat(tmp, "\\");
- strcat(tmp, s.getString(12));
+ strcat(tmp, e.getName());
if (attr & rfsv::PSI_A_DIR) {
collectFiles(a, tmp);
} else {
if ((attr & rfsv::PSI_A_ARCHIVE) || full) {
- s.truncate(12);
- s.addStringT(tmp);
- toBackup += s;
+ e.setName(tmp);
+ toBackup.push_back(e);
}
}
}
@@ -220,14 +222,15 @@ reportProgress(void *, long size)
char bstr[10];
switch (verbose) {
- case 0:
- return 1;
- case 1:
- percent = (totalBytes + size) * 100 / backupSize;
- break;
- case 2:
- percent = size * 100 / fileSize;
- break;
+ case -1:
+ case 0:
+ return 1;
+ case 1:
+ percent = (totalBytes + size) * 100 / backupSize;
+ break;
+ case 2:
+ percent = size * 100 / fileSize;
+ break;
}
sprintf(pstr, " %3d%%", percent);
memset(bstr, 8, sizeof(bstr));
@@ -245,7 +248,7 @@ mkdirp(char *path) {
*p = '\0';
switch (mkdir(path, S_IRWXU|S_IRWXG)) {
struct stat stbuf;
-
+
case 0:
break;
default:
@@ -266,6 +269,16 @@ mkdirp(char *path) {
return 0;
}
+static struct option opts[] = {
+ { "full", no_argument, 0, 'f' },
+ { "help", no_argument, 0, 'h' },
+ { "port", required_argument, 0, 'V' },
+ { "verbose", no_argument, 0, 'v' },
+ { "quiet", no_argument, 0, 'q' },
+ { "version", no_argument, 0, 'V' },
+ { 0, 0, 0, 0 },
+};
+
int
main(int argc, char **argv)
{
@@ -276,6 +289,7 @@ main(int argc, char **argv)
cpCallback_t cab = reportProgress;
int status = 0;
int sockNum = DPORT;
+ int op;
char dstPath[1024];
struct passwd *pw;
sigset_t sigset;
@@ -287,42 +301,44 @@ main(int argc, char **argv)
struct servent *se = getservbyname("psion", "tcp");
endservent();
if (se != 0L)
- sockNum = ntohs(se->s_port);
+ sockNum = ntohs(se->s_port);
// Command line parameter processing
- bool parmFound;
- do {
- parmFound = false;
- if ((argc > 1) && !strcmp(argv[1], "-V")) {
- cout << "plpbackup version " << VERSION << endl;
- exit(0);
- }
- if ((argc > 1) && !strcmp(argv[1], "-h")) {
- usage(&cout);
- exit(0);
- }
- if ((argc > 2) && !strcmp(argv[1], "-p")) {
- sockNum = atoi(argv[2]);
- argc -= 2;
- parmFound = true;
- for (int i = 1; i < argc; i++)
- argv[i] = argv[i + 2];
- }
- if ((argc > 1) && !strcmp(argv[1], "-v")) {
- verbose++;
- argc -= 1;
- parmFound = true;
- for (int i = 1; i < argc; i++)
- argv[i] = argv[i + 1];
+ opterr = 1;
+ while ((op = getopt_long(argc, argv, "qfhp:vV", opts, NULL)) != EOF) {
+ switch (op) {
+ case 'V':
+ cout << "plpbackup version " << VERSION << endl;
+ exit(0);
+ case 'h':
+ usage(&cout);
+ exit(0);
+ case 'f':
+ full = true;
+ break;
+ case 'v':
+ verbose++;
+ break;
+ case 'q':
+ verbose--;
+ break;
+ case 'p':
+ sockNum = atoi(optarg);
+ break;
+ default:
+ usage(&cerr);
+ exit(1);
}
- if ((argc > 1) && !strcmp(argv[1], "-f")) {
- full = true;
- argc -= 1;
- parmFound = true;
- for (int i = 1; i < argc; i++)
- argv[i] = argv[i + 1];
+ }
+ for (int i = optind; i < argc; i++) {
+ if ((strlen(argv[i]) != 2) ||
+ (toupper(argv[i][0]) < 'A') ||
+ (toupper(argv[i][0]) > 'Z') ||
+ (argv[i][1] != ':')) {
+ usage(&cerr);
+ exit(1);
}
- } while (parmFound);
+ }
pw = getpwuid(getuid());
if (pw && pw->pw_dir && strlen(pw->pw_dir)) {
@@ -368,20 +384,33 @@ main(int argc, char **argv)
S5mx = true;
}
}
- if (verbose) {
- cout << "Performing " << (full ? "Full" : "Incremental") <<
- " backup to " << dstPath << endl;
+ if (verbose >= 0) {
+ cout << "Performing " << (full ? "full" : "incremental") <<
+ " backup of ";
+ if (optind < argc) {
+ cout << "Drive ";
+ for (i = optind; i < argc; ) {
+ cout << argv[i++];
+ if (i > optind) {
+ if (i < (argc - 1))
+ cout << ", ";
+ else
+ if (i < argc)
+ cout << " and ";
+ }
+ }
+ } else
+ cout << "all drives";
+
+ cout << " to " << dstPath << endl;
+ }
+ if (verbose > 0) {
cout << "Stopping programs ..." << endl;
}
killsave(r, S5mx);
- if (argc > 1) {
- for (i = 1; i < argc; i++) {
- if ((strlen(argv[i]) != 2) || (argv[i][1] != ':')) {
- usage(&cerr);
- exit(1);
- runrestore(a, r);
- }
- if (verbose)
+ if (optind < argc) {
+ for (i = optind; i < argc; i++) {
+ if (verbose > 0)
cout << "Scanning Drive " << argv[i] << " ..." << endl;
collectFiles(a, argv[i]);
}
@@ -395,7 +424,7 @@ main(int argc, char **argv)
if ((devbits & 1) && a->devinfo(i, vfree, vtotal, vattr, vuniqueid, NULL) == rfsv::E_PSI_GEN_NONE) {
if (vattr != 7) {
sprintf(drive, "%c:\0", 'A' + i);
- if (verbose)
+ if (verbose > 0)
cout << "Scanning Drive " << drive << " ..." << endl;
collectFiles(a, drive);
}
@@ -405,46 +434,45 @@ main(int argc, char **argv)
} else
cerr << "Couldn't get Drive list" << endl;
}
- for (i = 0; i < toBackup.length(); i++) {
- bufferStore s = toBackup[i];
- backupSize += s.getDWord(4);
+ for (i = 0; i < toBackup.size(); i++) {
+ backupSize += toBackup[i].getSize();
backupCount++;
}
- if (verbose)
+ if (verbose > 0)
cout << "Size of backup: " << backupSize << " bytes in " <<
backupCount << " files." << endl;
if (backupCount == 0)
cerr << "Nothing to backup" << endl;
else {
- for (i = 0; i < toBackup.length(); i++) {
- bufferStore s = toBackup[i];
- const char *fn = s.getString(12);
+ for (i = 0; i < toBackup.size(); i++) {
+ PlpDirent e = toBackup[i];
+ const char *fn = e.getName();
const char *p;
char *q;
char tmp[1024];
for (p = fn, q = tmp; *p; p++, q++)
switch (*p) {
- case '%':
- *q++ = '%';
- *q++ = '2';
- *q = '5';
- break;
- case '/':
- *q++ = '%';
- *q++ = '2';
- *q= 'f';
- break;
- case '\\':
- *q = '/';
- break;
- default:
- *q = *p;
+ case '%':
+ *q++ = '%';
+ *q++ = '2';
+ *q = '5';
+ break;
+ case '/':
+ *q++ = '%';
+ *q++ = '2';
+ *q= 'f';
+ break;
+ case '\\':
+ *q = '/';
+ break;
+ default:
+ *q = *p;
}
*q = '\0';
strcpy(dest, dstPath);
strcat(dest, tmp);
- fileSize = s.getDWord(4);
+ fileSize = e.getSize();
if (verbose > 1)
cout << "Backing up " << fn << flush;
if (mkdirp(dest) != 0) {
@@ -463,30 +491,29 @@ main(int argc, char **argv)
}
}
if (!bErr) {
- if (verbose)
+ if (verbose > 0)
cout << "Writing index ..." << endl;
strcpy(dest, dstPath);
strcat(dest, ".index");
ofstream op(dest);
if (op) {
- op << "#plpbackup index" << endl;
- for (i = 0; i < toBackup.length(); i++) {
- bufferStore s = toBackup[i];
- PsiTime *t = (PsiTime *)s.getDWord(0);
- long size = s.getDWord(4);
- long attr = s.getDWord(8);
- const char *fn = s.getString(12);
- attr &= ~rfsv::PSI_A_ARCHIVE;
+ op << "#plpbackup index " <<
+ (full ? "F" : "I") << endl;
+ for (i = 0; i < toBackup.size(); i++) {
+ PlpDirent e = toBackup[i];
+ PsiTime t = e.getPsiTime();
+ long attr = e.getAttr() &
+ ~rfsv::PSI_A_ARCHIVE;
op << hex
<< setw(8) << setfill('0') <<
- t->getPsiTimeHi() << " "
+ t.getPsiTimeHi() << " "
<< setw(8) << setfill('0') <<
- t->getPsiTimeLo() << " "
+ t.getPsiTimeLo() << " "
<< setw(8) << setfill('0') <<
- size << " "
+ e.getSize() << " "
<< setw(8) << setfill('0') <<
attr << " "
- << setw(0) << fn << endl;
+ << setw(0) << e.getName() << endl;
}
op.close();
} else {
@@ -495,26 +522,24 @@ main(int argc, char **argv)
}
}
if (!bErr) {
- if (verbose)
+ if (verbose > 0)
cout << "Resetting archive attributes ..." << endl;
- for (i = 0; i < toBackup.length(); i++) {
- bufferStore s = toBackup[i];
- long attr = s.getDWord(8);
- const char *fn = s.getString(12);
- if (attr & rfsv::PSI_A_ARCHIVE) {
- res = a->fsetattr(fn, 0,
- rfsv::PSI_A_ARCHIVE);
- if (res != rfsv::E_PSI_GEN_NONE) {
- bErr = true;
- break;
- }
+ for (i = 0; i < toBackup.size(); i++) {
+ PlpDirent e = toBackup[i];
+ if (e.getAttr() & rfsv::PSI_A_ARCHIVE) {
+ res = a->fsetattr(e.getName(), 0,
+ rfsv::PSI_A_ARCHIVE);
+ if (res != rfsv::E_PSI_GEN_NONE) {
+ bErr = true;
+ break;
}
}
+ }
}
}
if (bErr)
cerr << "Backup aborted due to error" << endl;
- if (verbose)
+ if (verbose > 0)
cout << "Restarting programs ..." << endl;
runrestore(a, r);
delete r;
diff --git a/plpftp/ftp.cc b/plpftp/ftp.cc
index 5041322..837f668 100644
--- a/plpftp/ftp.cc
+++ b/plpftp/ftp.cc
@@ -198,8 +198,6 @@ sigint_handler2(int i) {
signal(SIGINT, sigint_handler2);
}
-const char *datefmt = "%c";
-
int ftp::
session(rfsv & a, rpcs & r, int xargc, char **xargv)
{
@@ -441,19 +439,13 @@ session(rfsv & a, rpcs & r, int xargc, char **xargv)
continue;
}
if (!strcmp(argv[0], "ls") || !strcmp(argv[0], "dir")) {
- bufferArray files;
+ PlpDir files;
if ((res = a.dir(psionDir, files)) != rfsv::E_PSI_GEN_NONE)
cerr << "Error: " << res << endl;
else
while (!files.empty()) {
- bufferStore s;
- s = files.pop();
- PsiTime *date = (PsiTime *)s.getDWord(0);
- long size = s.getDWord(4);
- long attr = s.getDWord(8);
- cout << a.attr2String(attr);
- cout << " " << dec << setw(10) << setfill(' ') << size;
- cout << " " << *date << " " << s.getString(12) << endl;
+ cout << files[0] << endl;
+ files.pop_front();
}
continue;
}
@@ -553,23 +545,22 @@ session(rfsv & a, rpcs & r, int xargc, char **xargv)
continue;
} else if ((!strcmp(argv[0], "mget")) && (argc == 2)) {
char *pattern = argv[1];
- bufferArray files;
+ PlpDir files;
if ((res = a.dir(psionDir, files)) != rfsv::E_PSI_GEN_NONE) {
cerr << "Error: " << res << endl;
continue;
}
- while (!files.empty()) {
- bufferStore s;
- s = files.pop();
+ for (int i = 0; i < files.size(); i++) {
+ PlpDirent e = files[i];
char temp[100];
- long attr = s.getDWord(8);
+ long attr = e.getAttr();
- if (attr & 0x10)
+ if (attr & (rfsv::PSI_A_DIR | rfsv::PSI_A_VOLUME))
continue;
- if (!Wildmat(s.getString(12), pattern))
+ if (!Wildmat(e.getName(), pattern))
continue;
do {
- cout << "Get \"" << s.getString(12) << "\" (y,n): ";
+ cout << "Get \"" << e.getName() << "\" (y,n): ";
if (prompt) {
cout.flush();
cin.getline(temp, 100);
@@ -582,9 +573,9 @@ session(rfsv & a, rpcs & r, int xargc, char **xargv)
} while (temp[1] != 0 || (temp[0] != 'y' && temp[0] != 'n'));
if (temp[0] != 'n') {
strcpy(f1, psionDir);
- strcat(f1, s.getString(12));
+ strcat(f1, e.getName());
strcpy(f2, localDir);
- strcat(f2, s.getString(12));
+ strcat(f2, e.getName());
if (temp[0] == 'l') {
for (char *p = f2; *p; p++)
*p = tolower(*p);
@@ -1000,7 +991,7 @@ static char *remote_dir_commands[] = {
"cd ", "rmdir ", NULL
};
-static bufferArray *comp_files = NULL;
+static PlpDir comp_files;
static long maskAttr;
static char tmpPath[1024];
static char cplPath[1024];
@@ -1015,29 +1006,25 @@ filename_generator(char *text, int state)
char *p;
Enum<rfsv::errs> res;
len = strlen(text);
- if (comp_files)
- delete comp_files;
- comp_files = new bufferArray();
strcpy(tmpPath, psionDir);
strcat(tmpPath, cplPath);
for (p = tmpPath; *p; p++)
if (*p == '/')
*p = '\\';
- if ((res = comp_a->dir(tmpPath, *comp_files)) != rfsv::E_PSI_GEN_NONE) {
+ if ((res = comp_a->dir(tmpPath, comp_files)) != rfsv::E_PSI_GEN_NONE) {
cerr << "Error: " << res << endl;
return NULL;
}
}
- while (!comp_files->empty()) {
- bufferStore s;
+ for (int i = 0; i < comp_files.size(); i++) {
+ PlpDirent e = comp_files[i];
+ long attr = e.getAttr();
char *p;
- s = comp_files->pop();
- long attr = s.getDWord(8);
if ((attr & maskAttr) == 0)
continue;
strcpy(tmpPath, cplPath);
- strcat(tmpPath, s.getString(12));
+ strcat(tmpPath, e.getName());
for (p = tmpPath; *p; p++)
if (*p == '\\')
*p = '/';
diff --git a/plpftp/ftp.h b/plpftp/ftp.h
index 86c3d42..e825752 100644
--- a/plpftp/ftp.h
+++ b/plpftp/ftp.h
@@ -25,7 +25,9 @@
#ifndef _ftp_h_
#define _ftp_h_
-#include "bool.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include "rfsv.h"
#include "Enum.h"
diff --git a/plpftp/main.cc b/plpftp/main.cc
index 2d5140a..1755f38 100644
--- a/plpftp/main.cc
+++ b/plpftp/main.cc
@@ -23,7 +23,7 @@
// e-mail philip.proudman@btinternet.com
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
#include <stream.h>
@@ -32,7 +32,6 @@
#include <stdio.h>
#include <signal.h>
-#include "bool.h"
#include "ppsocket.h"
#include "rfsv.h"
#include "rfsvfactory.h"
diff --git a/plpnfsd/main.cc b/plpnfsd/main.cc
index 261dfd5..96c2be4 100644
--- a/plpnfsd/main.cc
+++ b/plpnfsd/main.cc
@@ -4,7 +4,7 @@
//
#ifdef HAVE_CONFIG_H
-#include "config.h"
+#include <config.h>
#endif
#include <stream.h>
@@ -14,7 +14,6 @@
#include <signal.h>
#include <syslog.h>
-#include "bool.h"
#include "rfsv.h"
#include "rpcs.h"
#include "rfsvfactory.h"
@@ -210,24 +209,24 @@ long rfsv_isalive() {
}
long rfsv_dir(const char *file, dentry **e) {
- bufferArray entries;
+ PlpDir entries;
dentry *tmp;
long ret;
if (!a)
return -1;
ret = a->dir(file, entries);
- while (!entries.empty()) {
- bufferStore s;
- s = entries.pop();
+
+ for (int i = 0; i < entries.size(); i++) {
+ PlpDirent pe = entries[i];
tmp = *e;
*e = (dentry *)malloc(sizeof(dentry));
if (!*e)
return -1;
- (*e)->time = ((PsiTime *)s.getDWord(0))->getTime();
- (*e)->size = s.getDWord(4);
- (*e)->attr = s.getDWord(8);
- (*e)->name = strdup(s.getString(12));
+ (*e)->time = pe.getPsiTime().getTime();
+ (*e)->size = pe.getSize();
+ (*e)->attr = pe.getAttr();
+ (*e)->name = strdup(pe.getName());
(*e)->next = tmp;
}
return ret;