about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-06-09 22:44:22 +0200
committeroy <Tom_Adams@web.de>2011-06-09 22:44:22 +0200
commit9845d757ef2a11f4fc37f0f438bca9adb47cacaf (patch)
tree906c87e8e812d495f34d4b5743530da20804c7b6 /src/engine
parent348806d993598a26025fc90dbfa022f495232420 (diff)
downloadzcatch-9845d757ef2a11f4fc37f0f438bca9adb47cacaf.tar.gz
zcatch-9845d757ef2a11f4fc37f0f438bca9adb47cacaf.zip
removed file extension from the demo name in the demo player
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/demo.h2
-rw-r--r--src/engine/shared/demo.cpp26
-rw-r--r--src/engine/shared/demo.h2
3 files changed, 19 insertions, 11 deletions
diff --git a/src/engine/demo.h b/src/engine/demo.h
index 891c78d6..a9e4f700 100644
--- a/src/engine/demo.h
+++ b/src/engine/demo.h
@@ -46,7 +46,7 @@ public:
 	virtual void Pause() = 0;
 	virtual void Unpause() = 0;
 	virtual const CInfo *BaseInfo() const = 0;
-	virtual char *GetDemoName() = 0;
+	virtual void GetDemoName(char *pBuffer, int BufferSize) const = 0;
 	virtual bool GetDemoInfo(class IStorage *pStorage, const char *pFilename, int StorageType, CDemoHeader *pDemoHeader) const = 0;
 	virtual int GetDemoType() const = 0;
 };
diff --git a/src/engine/shared/demo.cpp b/src/engine/shared/demo.cpp
index e48c2f1e..51dd51d9 100644
--- a/src/engine/shared/demo.cpp
+++ b/src/engine/shared/demo.cpp
@@ -1,13 +1,16 @@
 /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
 /* If you are missing that file, acquire a complete release at teeworlds.com.                */
+#include <base/math.h>
 #include <base/system.h>
+
 #include <engine/console.h>
 #include <engine/storage.h>
+
+#include "compression.h"
 #include "demo.h"
 #include "memheap.h"
-#include "snapshot.h"
-#include "compression.h"
 #include "network.h"
+#include "snapshot.h"
 
 static const unsigned char gs_aHeaderMarker[7] = {'T', 'W', 'D', 'E', 'M', 'O', 0};
 static const unsigned char gs_ActVersion = 3;
@@ -760,16 +763,21 @@ int CDemoPlayer::Stop()
 	return 0;
 }
 
-char *CDemoPlayer::GetDemoName()
+void CDemoPlayer::GetDemoName(char *pBuffer, int BufferSize) const
 {
-	// get the name of the demo without its path
-	char *pDemoShortName = &m_aFilename[0];
-	for(int i = 0; i < str_length(m_aFilename)-1; i++)
+	const char *pFileName = m_aFilename;
+	const char *pExtractedName = pFileName;
+	const char *pEnd = 0;
+	for(; *pFileName; ++pFileName)
 	{
-		if(m_aFilename[i] == '/' || m_aFilename[i] == '\\')
-			pDemoShortName = &m_aFilename[i+1];
+		if(*pFileName == '/' || *pFileName == '\\')
+			pExtractedName = pFileName+1;
+		else if(*pFileName == '.')
+			pEnd = pFileName;
 	}
-	return pDemoShortName;
+	
+	int Length = pEnd > pExtractedName ? min(BufferSize, (int)(pEnd-pExtractedName+1)) : BufferSize;
+	str_copy(pBuffer, pExtractedName, Length);
 }
 
 bool CDemoPlayer::GetDemoInfo(class IStorage *pStorage, const char *pFilename, int StorageType, CDemoHeader *pDemoHeader) const
diff --git a/src/engine/shared/demo.h b/src/engine/shared/demo.h
index f1897f21..f4ac5685 100644
--- a/src/engine/shared/demo.h
+++ b/src/engine/shared/demo.h
@@ -110,7 +110,7 @@ public:
 	void SetSpeed(float Speed);
 	int SetPos(float Precent);
 	const CInfo *BaseInfo() const { return &m_Info.m_Info; }
-	char *GetDemoName();
+	void GetDemoName(char *pBuffer, int BufferSize) const;
 	bool GetDemoInfo(class IStorage *pStorage, const char *pFilename, int StorageType, CDemoHeader *pDemoHeader) const;
 	int GetDemoType() const;