about summary refs log tree commit diff
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-12-08 00:09:18 +0100
committeroy <Tom_Adams@web.de>2010-12-08 00:09:18 +0100
commitd30dd9da8fce880a44e598a41710015d1f4733a3 (patch)
tree52d4bd56971ca8201c7c9405db6d2a9da371f449
parentbd9850cae2d17b713e5795ed1e90d4cea1f165b8 (diff)
downloadzcatch-d30dd9da8fce880a44e598a41710015d1f4733a3.tar.gz
zcatch-d30dd9da8fce880a44e598a41710015d1f4733a3.zip
added Storage function to move/rename files by Batchyx
-rw-r--r--src/base/system.c7
-rw-r--r--src/base/system.h16
-rw-r--r--src/engine/shared/storage.cpp9
-rw-r--r--src/engine/storage.h1
4 files changed, 33 insertions, 0 deletions
diff --git a/src/base/system.c b/src/base/system.c
index 9cc27836..6339991d 100644
--- a/src/base/system.c
+++ b/src/base/system.c
@@ -1016,6 +1016,13 @@ int fs_parent_dir(char *path)
 	return 1;
 }
 
+int fs_rename(const char *oldname, const char *newname)
+{
+	if(rename(oldname, newname) != 0)
+		return 1;
+	return 0;
+}
+
 void swap_endian(void *data, unsigned elem_size, unsigned num)
 {
 	char *src = (char*) data;
diff --git a/src/base/system.h b/src/base/system.h
index fb249588..c863a33f 100644
--- a/src/base/system.h
+++ b/src/base/system.h
@@ -996,6 +996,22 @@ int fs_chdir(const char *path);
 int fs_parent_dir(char *path);
 
 /*
+	Function: fs_rename
+		Renames the file or directory. If the paths differ the file will be moved.
+	
+	Parameters:
+		oldname - The actual name
+		newname - The new name
+
+	Returns:
+		Returns 0 on success, 1 on failure.
+
+	Remarks:
+		- The strings are treated as zero-terminated strings.
+*/
+int fs_rename(const char *oldname, const char *newname);
+
+/*
 	Group: Undocumented
 */
 
diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp
index e43cd539..eaddf0ba 100644
--- a/src/engine/shared/storage.cpp
+++ b/src/engine/shared/storage.cpp
@@ -283,6 +283,15 @@ public:
 		return !remove(GetPath(Type, pFilename, aBuffer, sizeof(aBuffer)));
 	}
 
+	virtual bool RenameFile(const char* pOldFilename, const char* pNewFilename, int Type)
+	{
+		if(Type < 0 || Type >= m_NumPaths)
+			return false;
+		char aOldBuffer[MAX_PATH_LENGTH];
+		char aNewBuffer[MAX_PATH_LENGTH];
+		return !fs_rename(GetPath(Type, pOldFilename, aOldBuffer, sizeof(aOldBuffer)), GetPath(Type, pNewFilename, aNewBuffer, sizeof (aNewBuffer)));
+	}
+
 	virtual bool CreateFolder(const char *pFoldername, int Type)
 	{
 		if(Type < 0 || Type >= m_NumPaths)
diff --git a/src/engine/storage.h b/src/engine/storage.h
index 5970f103..7ac9feff 100644
--- a/src/engine/storage.h
+++ b/src/engine/storage.h
@@ -18,6 +18,7 @@ public:
 	virtual void ListDirectory(int Type, const char *pPath, FS_LISTDIR_CALLBACK pfnCallback, void *pUser) = 0;
 	virtual IOHANDLE OpenFile(const char *pFilename, int Flags, int Type, char *pBuffer = 0, int BufferSize = 0) = 0;
 	virtual bool RemoveFile(const char *pFilename, int Type) = 0;
+	virtual bool RenameFile(const char* pOldFilename, const char* pNewFilename, int Type) = 0;
 	virtual bool CreateFolder(const char *pFoldername, int Type) = 0;
 };