1998-09-10 04:32:40 +04:00
|
|
|
#include "prio.h"
|
|
|
|
#include "nsINetFile.h"
|
|
|
|
#include "plhash.h"
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef ns_net_file_h_
|
|
|
|
#define ns_net_file_h_
|
|
|
|
|
|
|
|
/* This is a singleton implementation. */
|
|
|
|
|
|
|
|
class nsNetFile : public nsINetFile {
|
|
|
|
public:
|
|
|
|
NS_DECL_ISUPPORTS
|
|
|
|
|
|
|
|
nsNetFile();
|
|
|
|
|
|
|
|
// Convert a generic file names into a platform file path
|
|
|
|
NS_IMETHOD GetFilePath(const char *aName, char **aRes);
|
|
|
|
NS_IMETHOD GetTemporaryFilePath(const char *aName, char **aRes);
|
|
|
|
NS_IMETHOD GetUniqueFilePath(const char *aName, char **aRes);
|
|
|
|
NS_IMETHOD GetCacheFileName(char *aDirTok, char **aRes);
|
|
|
|
|
|
|
|
// Open a file
|
|
|
|
NS_IMETHOD OpenFile(const char *aPath, nsFileMode aMode,
|
|
|
|
nsFile** aRes);
|
|
|
|
|
|
|
|
// Close a file
|
|
|
|
NS_IMETHOD CloseFile(nsFile* aFile);
|
|
|
|
|
|
|
|
// Read a file
|
|
|
|
NS_IMETHOD FileRead(nsFile *aFile, char **aBuf,
|
|
|
|
PRInt32 *aBuflen,
|
|
|
|
PRInt32 *aBytesRead);
|
|
|
|
|
|
|
|
// Read a line from a file
|
|
|
|
NS_IMETHOD FileReadLine(nsFile *aFile, char **aBuf,
|
|
|
|
PRInt32 *aBuflen,
|
|
|
|
PRInt32 *aBytesRead);
|
|
|
|
|
|
|
|
// Write a file
|
|
|
|
NS_IMETHOD FileWrite(nsFile *aFile, const char *aBuf,
|
|
|
|
PRInt32 *aLen,
|
|
|
|
PRInt32 *aBytesWritten);
|
|
|
|
|
|
|
|
// Sync a file with disk
|
|
|
|
NS_IMETHOD FileSync(nsFile *aFile);
|
|
|
|
|
|
|
|
// Remove a file
|
|
|
|
NS_IMETHOD FileRemove(const char *aPath);
|
|
|
|
|
|
|
|
// Rename a file
|
|
|
|
NS_IMETHOD FileRename(const char *aPathOld, const char *aPathNew);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Directory Methods
|
|
|
|
*/
|
|
|
|
|
|
|
|
// Open a directory
|
|
|
|
NS_IMETHOD OpenDir(const char *aPath, nsDir** aRes);
|
|
|
|
|
|
|
|
// Close a directory
|
|
|
|
NS_IMETHOD CloseDir(nsDir *aDir);
|
|
|
|
|
|
|
|
// Create a directory
|
|
|
|
NS_IMETHOD CreateDir(const char *aPath, PRBool aRecurse);
|
|
|
|
|
|
|
|
// Set the internal directories
|
|
|
|
NS_IMETHOD SetDirectory(const char *aToken, const char *aDir);
|
|
|
|
|
|
|
|
// Associate a filename with a token, and optionally a dir token.
|
|
|
|
NS_IMETHOD SetFileAssoc(const char *aToken, const char *aFile, const char *aDirToken);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual ~nsNetFile();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void GenerateGlobalRandomBytes(void *aDest, size_t aLen);
|
|
|
|
PRIntn convertToPRFlag(nsFileMode aMode);
|
|
|
|
char * URLSyntaxToLocal(const char * aPath);
|
|
|
|
char mTokDel; // token delimiter
|
|
|
|
char mDirDel; // directory delimiter
|
|
|
|
PLHashTable *mHTDirs; // directory registry
|
|
|
|
PLHashTable *mHTFiles; // file registry
|
|
|
|
};
|
|
|
|
|
|
|
|
// The one and only singleton pointer to an nsNetFile.
|
|
|
|
static nsNetFile *gNetFile = nsnull;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Class to manage static initialization
|
|
|
|
//
|
|
|
|
struct nsNetFileInit {
|
|
|
|
nsNetFileInit() {
|
|
|
|
gNetFile = nsnull;
|
|
|
|
(void) NS_InitINetFile();
|
|
|
|
}
|
|
|
|
|
|
|
|
~nsNetFileInit() {
|
|
|
|
NS_ShutdownINetFile();
|
|
|
|
gNetFile = nsnull;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
1998-09-12 09:52:39 +04:00
|
|
|
#endif // ns_net_file_h_
|