From 6a567f3c772a12373d6ff85b929db039b947aac8 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:03:23 +0000 Subject: [PATCH 1/9] fixed a memory corruption bug in CVector --- amxmodx/CVector.h | 30 ++++++--- dlls/engine/sdk/CVector.h | 129 +++++++++++++++++++++++++----------- dlls/fakemeta/sdk/CVector.h | 30 ++++++--- dlls/hamsandwich/CVector.h | 30 ++++++--- dlls/mysqlx/sdk/CVector.h | 30 ++++++--- dlls/ns/CVector.h | 30 ++++++--- dlls/ns/msvc7/ns.sln | 19 +++++- dlls/nvault/sdk/CVector.h | 129 +++++++++++++++++++++++++----------- dlls/regex/sdk/CVector.h | 129 +++++++++++++++++++++++++----------- dlls/sqlite/sdk/CVector.h | 30 ++++++--- 10 files changed, 420 insertions(+), 166 deletions(-) diff --git a/amxmodx/CVector.h b/amxmodx/CVector.h index 45f0d548bf..a6dc004886 100755 --- a/amxmodx/CVector.h +++ b/amxmodx/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries diff --git a/dlls/engine/sdk/CVector.h b/dlls/engine/sdk/CVector.h index d6b87eb5ad..a6dc004886 100755 --- a/dlls/engine/sdk/CVector.h +++ b/dlls/engine/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -70,32 +82,58 @@ template class CVector // change size if (size == m_Size) return true; + + if (!size) + { + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + m_Size = 0; + } + return true; + } + T *newData = new T[size]; if (!newData) return false; if (m_Data) { - size_t end = (m_Size < size) ? (m_Size) : size; + size_t end = (m_CurrentUsedSize < size) ? (m_CurrentUsedSize) : size; for (size_t i=0; i m_Size) + m_CurrentUsedSize = m_Size; + return true; } void FreeMemIfPossible() { + if (!m_Data) + return; + + if (!m_CurrentUsedSize) + { + ChangeSize(0); + return; + } + + size_t newSize = m_Size; + while (m_CurrentUsedSize <= newSize / 2) + newSize /= 2; + if (newSize != m_Size) + ChangeSize(newSize); } protected: T *m_Data; size_t m_Size; size_t m_CurrentUsedSize; - size_t m_CurrentSize; public: class iterator { @@ -189,7 +227,7 @@ template class CVector iterator & operator-=(size_t offset) { - m_Ptr += offset; + m_Ptr -= offset; return (*this); } @@ -203,10 +241,10 @@ template class CVector iterator operator-(size_t offset) const { iterator tmp(*this); - tmp.m_Ptr += offset; + tmp.m_Ptr -= offset; return tmp; } - + T & operator[](size_t offset) { return (*(*this + offset)); @@ -277,12 +315,12 @@ template class CVector return m_Size; } - iterator begin() + iterator begin() const { return iterator(m_Data); } - iterator end() + iterator end() const { return iterator(m_Data + m_CurrentUsedSize); } @@ -296,13 +334,15 @@ template class CVector bool reserve(size_t newSize) { - return ChangeSize(newSize); + if (newSize > m_Size) + return ChangeSize(newSize); + return true; } bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -317,14 +357,15 @@ template class CVector --m_CurrentUsedSize; if (m_CurrentUsedSize < 0) m_CurrentUsedSize = 0; - // :TODO: free memory sometimes + + FreeMemIfPossible(); } bool resize(size_t newSize) { if (!ChangeSize(newSize)) return false; - FreeMemIfPossible(); + m_CurrentUsedSize = newSize; return true; } @@ -397,50 +438,64 @@ template class CVector return m_Data[m_CurrentUsedSize - 1]; } - bool insert(iterator where, const T & value) + iterator insert(iterator where, const T & value) { - // we have to insert before - // if it is begin, don't decrement - if (where != m_Data) - --where; // validate iter - if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + if (where < m_Data || where > (m_Data + m_CurrentUsedSize)) + return iterator(0); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + size_t ofs = where - begin(); + + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - memmove(where.base() + 1, where.base(), m_CurrentUsedSize - (where - m_Data)); - memcpy(where.base(), &value, sizeof(T)); - return true; + ++m_CurrentUsedSize; + + where = begin() + ofs; + + // Move subsequent entries + for (T *ptr = m_Data + m_CurrentUsedSize - 2; ptr >= where.base(); --ptr) + *(ptr + 1) = *ptr; + + *where.base() = value; + + return where; } - void erase(iterator where) + iterator erase(iterator where) { // validate iter if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + return iterator(0); + + size_t ofs = where - begin(); if (m_CurrentUsedSize > 1) { // move - memmove(where.base(), where.base() + 1, m_CurrentUsedSize - 1); + T *theend = m_Data + m_CurrentUsedSize; + for (T *ptr = where.base() + 1; ptr < theend; ++ptr) + *(ptr - 1) = *ptr; } --m_CurrentUsedSize; - // :TODO: free memory sometimes + + FreeMemIfPossible(); + + return begin() + ofs; } void clear() { m_Size = 0; m_CurrentUsedSize = 0; - delete [] m_Data; - m_Data = NULL; + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + } } }; diff --git a/dlls/fakemeta/sdk/CVector.h b/dlls/fakemeta/sdk/CVector.h index 45f0d548bf..a6dc004886 100755 --- a/dlls/fakemeta/sdk/CVector.h +++ b/dlls/fakemeta/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries diff --git a/dlls/hamsandwich/CVector.h b/dlls/hamsandwich/CVector.h index d0fef2be58..44f1f9dd1e 100644 --- a/dlls/hamsandwich/CVector.h +++ b/dlls/hamsandwich/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries diff --git a/dlls/mysqlx/sdk/CVector.h b/dlls/mysqlx/sdk/CVector.h index 45f0d548bf..a6dc004886 100755 --- a/dlls/mysqlx/sdk/CVector.h +++ b/dlls/mysqlx/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries diff --git a/dlls/ns/CVector.h b/dlls/ns/CVector.h index d0fef2be58..44f1f9dd1e 100644 --- a/dlls/ns/CVector.h +++ b/dlls/ns/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries diff --git a/dlls/ns/msvc7/ns.sln b/dlls/ns/msvc7/ns.sln index d5074c4a33..d75f5e7e81 100755 --- a/dlls/ns/msvc7/ns.sln +++ b/dlls/ns/msvc7/ns.sln @@ -1,9 +1,26 @@  Microsoft Visual Studio Solution File, Format Version 8.00 -# Visual C++ Express 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ns", "ns.vcproj", "{5B5DEFD0-28ED-4D0E-A1B0-50F9304A65DF}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection EndProject Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {5B5DEFD0-28ED-4D0E-A1B0-50F9304A65DF}.Debug.ActiveCfg = Debug|Win32 + {5B5DEFD0-28ED-4D0E-A1B0-50F9304A65DF}.Debug.Build.0 = Debug|Win32 + {5B5DEFD0-28ED-4D0E-A1B0-50F9304A65DF}.Release.ActiveCfg = Release|Win32 + {5B5DEFD0-28ED-4D0E-A1B0-50F9304A65DF}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 diff --git a/dlls/nvault/sdk/CVector.h b/dlls/nvault/sdk/CVector.h index d6b87eb5ad..a6dc004886 100755 --- a/dlls/nvault/sdk/CVector.h +++ b/dlls/nvault/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -70,32 +82,58 @@ template class CVector // change size if (size == m_Size) return true; + + if (!size) + { + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + m_Size = 0; + } + return true; + } + T *newData = new T[size]; if (!newData) return false; if (m_Data) { - size_t end = (m_Size < size) ? (m_Size) : size; + size_t end = (m_CurrentUsedSize < size) ? (m_CurrentUsedSize) : size; for (size_t i=0; i m_Size) + m_CurrentUsedSize = m_Size; + return true; } void FreeMemIfPossible() { + if (!m_Data) + return; + + if (!m_CurrentUsedSize) + { + ChangeSize(0); + return; + } + + size_t newSize = m_Size; + while (m_CurrentUsedSize <= newSize / 2) + newSize /= 2; + if (newSize != m_Size) + ChangeSize(newSize); } protected: T *m_Data; size_t m_Size; size_t m_CurrentUsedSize; - size_t m_CurrentSize; public: class iterator { @@ -189,7 +227,7 @@ template class CVector iterator & operator-=(size_t offset) { - m_Ptr += offset; + m_Ptr -= offset; return (*this); } @@ -203,10 +241,10 @@ template class CVector iterator operator-(size_t offset) const { iterator tmp(*this); - tmp.m_Ptr += offset; + tmp.m_Ptr -= offset; return tmp; } - + T & operator[](size_t offset) { return (*(*this + offset)); @@ -277,12 +315,12 @@ template class CVector return m_Size; } - iterator begin() + iterator begin() const { return iterator(m_Data); } - iterator end() + iterator end() const { return iterator(m_Data + m_CurrentUsedSize); } @@ -296,13 +334,15 @@ template class CVector bool reserve(size_t newSize) { - return ChangeSize(newSize); + if (newSize > m_Size) + return ChangeSize(newSize); + return true; } bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -317,14 +357,15 @@ template class CVector --m_CurrentUsedSize; if (m_CurrentUsedSize < 0) m_CurrentUsedSize = 0; - // :TODO: free memory sometimes + + FreeMemIfPossible(); } bool resize(size_t newSize) { if (!ChangeSize(newSize)) return false; - FreeMemIfPossible(); + m_CurrentUsedSize = newSize; return true; } @@ -397,50 +438,64 @@ template class CVector return m_Data[m_CurrentUsedSize - 1]; } - bool insert(iterator where, const T & value) + iterator insert(iterator where, const T & value) { - // we have to insert before - // if it is begin, don't decrement - if (where != m_Data) - --where; // validate iter - if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + if (where < m_Data || where > (m_Data + m_CurrentUsedSize)) + return iterator(0); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + size_t ofs = where - begin(); + + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - memmove(where.base() + 1, where.base(), m_CurrentUsedSize - (where - m_Data)); - memcpy(where.base(), &value, sizeof(T)); - return true; + ++m_CurrentUsedSize; + + where = begin() + ofs; + + // Move subsequent entries + for (T *ptr = m_Data + m_CurrentUsedSize - 2; ptr >= where.base(); --ptr) + *(ptr + 1) = *ptr; + + *where.base() = value; + + return where; } - void erase(iterator where) + iterator erase(iterator where) { // validate iter if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + return iterator(0); + + size_t ofs = where - begin(); if (m_CurrentUsedSize > 1) { // move - memmove(where.base(), where.base() + 1, m_CurrentUsedSize - 1); + T *theend = m_Data + m_CurrentUsedSize; + for (T *ptr = where.base() + 1; ptr < theend; ++ptr) + *(ptr - 1) = *ptr; } --m_CurrentUsedSize; - // :TODO: free memory sometimes + + FreeMemIfPossible(); + + return begin() + ofs; } void clear() { m_Size = 0; m_CurrentUsedSize = 0; - delete [] m_Data; - m_Data = NULL; + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + } } }; diff --git a/dlls/regex/sdk/CVector.h b/dlls/regex/sdk/CVector.h index d6b87eb5ad..a6dc004886 100755 --- a/dlls/regex/sdk/CVector.h +++ b/dlls/regex/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -70,32 +82,58 @@ template class CVector // change size if (size == m_Size) return true; + + if (!size) + { + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + m_Size = 0; + } + return true; + } + T *newData = new T[size]; if (!newData) return false; if (m_Data) { - size_t end = (m_Size < size) ? (m_Size) : size; + size_t end = (m_CurrentUsedSize < size) ? (m_CurrentUsedSize) : size; for (size_t i=0; i m_Size) + m_CurrentUsedSize = m_Size; + return true; } void FreeMemIfPossible() { + if (!m_Data) + return; + + if (!m_CurrentUsedSize) + { + ChangeSize(0); + return; + } + + size_t newSize = m_Size; + while (m_CurrentUsedSize <= newSize / 2) + newSize /= 2; + if (newSize != m_Size) + ChangeSize(newSize); } protected: T *m_Data; size_t m_Size; size_t m_CurrentUsedSize; - size_t m_CurrentSize; public: class iterator { @@ -189,7 +227,7 @@ template class CVector iterator & operator-=(size_t offset) { - m_Ptr += offset; + m_Ptr -= offset; return (*this); } @@ -203,10 +241,10 @@ template class CVector iterator operator-(size_t offset) const { iterator tmp(*this); - tmp.m_Ptr += offset; + tmp.m_Ptr -= offset; return tmp; } - + T & operator[](size_t offset) { return (*(*this + offset)); @@ -277,12 +315,12 @@ template class CVector return m_Size; } - iterator begin() + iterator begin() const { return iterator(m_Data); } - iterator end() + iterator end() const { return iterator(m_Data + m_CurrentUsedSize); } @@ -296,13 +334,15 @@ template class CVector bool reserve(size_t newSize) { - return ChangeSize(newSize); + if (newSize > m_Size) + return ChangeSize(newSize); + return true; } bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -317,14 +357,15 @@ template class CVector --m_CurrentUsedSize; if (m_CurrentUsedSize < 0) m_CurrentUsedSize = 0; - // :TODO: free memory sometimes + + FreeMemIfPossible(); } bool resize(size_t newSize) { if (!ChangeSize(newSize)) return false; - FreeMemIfPossible(); + m_CurrentUsedSize = newSize; return true; } @@ -397,50 +438,64 @@ template class CVector return m_Data[m_CurrentUsedSize - 1]; } - bool insert(iterator where, const T & value) + iterator insert(iterator where, const T & value) { - // we have to insert before - // if it is begin, don't decrement - if (where != m_Data) - --where; // validate iter - if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + if (where < m_Data || where > (m_Data + m_CurrentUsedSize)) + return iterator(0); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + size_t ofs = where - begin(); + + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - memmove(where.base() + 1, where.base(), m_CurrentUsedSize - (where - m_Data)); - memcpy(where.base(), &value, sizeof(T)); - return true; + ++m_CurrentUsedSize; + + where = begin() + ofs; + + // Move subsequent entries + for (T *ptr = m_Data + m_CurrentUsedSize - 2; ptr >= where.base(); --ptr) + *(ptr + 1) = *ptr; + + *where.base() = value; + + return where; } - void erase(iterator where) + iterator erase(iterator where) { // validate iter if (where < m_Data || where >= (m_Data + m_CurrentUsedSize)) - return false; + return iterator(0); + + size_t ofs = where - begin(); if (m_CurrentUsedSize > 1) { // move - memmove(where.base(), where.base() + 1, m_CurrentUsedSize - 1); + T *theend = m_Data + m_CurrentUsedSize; + for (T *ptr = where.base() + 1; ptr < theend; ++ptr) + *(ptr - 1) = *ptr; } --m_CurrentUsedSize; - // :TODO: free memory sometimes + + FreeMemIfPossible(); + + return begin() + ofs; } void clear() { m_Size = 0; m_CurrentUsedSize = 0; - delete [] m_Data; - m_Data = NULL; + if (m_Data) + { + delete [] m_Data; + m_Data = NULL; + } } }; diff --git a/dlls/sqlite/sdk/CVector.h b/dlls/sqlite/sdk/CVector.h index 45f0d548bf..a6dc004886 100755 --- a/dlls/sqlite/sdk/CVector.h +++ b/dlls/sqlite/sdk/CVector.h @@ -37,12 +37,20 @@ // Vector template class CVector { - bool Grow() + bool Grow(size_t amount) { // automatic grow size_t newSize = m_Size * 2; + if (newSize == 0) - newSize = 8; // a good init value + { + newSize = 8; + } + + while (m_CurrentUsedSize + amount > newSize) + { + newSize *= 2; + } T *newData = new T[newSize]; if (!newData) return false; @@ -57,12 +65,16 @@ template class CVector return true; } - bool GrowIfNeeded() + bool GrowIfNeeded(size_t amount) { - if (m_CurrentUsedSize >= m_Size) - return Grow(); + if (m_CurrentUsedSize + amount >= m_Size) + { + return Grow(amount); + } else + { return true; + } } bool ChangeSize(size_t size) @@ -330,7 +342,7 @@ template class CVector bool push_back(const T & elem) { ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { --m_CurrentUsedSize; return false; @@ -434,13 +446,13 @@ template class CVector size_t ofs = where - begin(); - ++m_CurrentUsedSize; - if (!GrowIfNeeded()) + if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } + ++m_CurrentUsedSize; + where = begin() + ofs; // Move subsequent entries From 212697b9505982a6d2e17146f394a410dcd89833 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:09:08 +0000 Subject: [PATCH 2/9] whoops, that was one terrible commit. the bug is really fixed now. --- amxmodx/CVector.h | 5 ++--- dlls/engine/sdk/CVector.h | 5 ++--- dlls/fakemeta/sdk/CVector.h | 5 ++--- dlls/hamsandwich/CVector.h | 5 ++--- dlls/mysqlx/sdk/CVector.h | 5 ++--- dlls/ns/CVector.h | 5 ++--- dlls/nvault/sdk/CVector.h | 5 ++--- dlls/regex/sdk/CVector.h | 5 ++--- dlls/sqlite/sdk/CVector.h | 5 ++--- 9 files changed, 18 insertions(+), 27 deletions(-) diff --git a/amxmodx/CVector.h b/amxmodx/CVector.h index a6dc004886..24355d4e27 100755 --- a/amxmodx/CVector.h +++ b/amxmodx/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/engine/sdk/CVector.h b/dlls/engine/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/engine/sdk/CVector.h +++ b/dlls/engine/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/fakemeta/sdk/CVector.h b/dlls/fakemeta/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/fakemeta/sdk/CVector.h +++ b/dlls/fakemeta/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/hamsandwich/CVector.h b/dlls/hamsandwich/CVector.h index 44f1f9dd1e..1d733abb76 100644 --- a/dlls/hamsandwich/CVector.h +++ b/dlls/hamsandwich/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/mysqlx/sdk/CVector.h b/dlls/mysqlx/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/mysqlx/sdk/CVector.h +++ b/dlls/mysqlx/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/ns/CVector.h b/dlls/ns/CVector.h index 44f1f9dd1e..1d733abb76 100644 --- a/dlls/ns/CVector.h +++ b/dlls/ns/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/nvault/sdk/CVector.h b/dlls/nvault/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/nvault/sdk/CVector.h +++ b/dlls/nvault/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/regex/sdk/CVector.h b/dlls/regex/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/regex/sdk/CVector.h +++ b/dlls/regex/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } diff --git a/dlls/sqlite/sdk/CVector.h b/dlls/sqlite/sdk/CVector.h index a6dc004886..24355d4e27 100755 --- a/dlls/sqlite/sdk/CVector.h +++ b/dlls/sqlite/sdk/CVector.h @@ -341,14 +341,13 @@ template class CVector bool push_back(const T & elem) { - ++m_CurrentUsedSize; if (!GrowIfNeeded(1)) { - --m_CurrentUsedSize; return false; } - m_Data[m_CurrentUsedSize - 1] = elem; + m_Data[m_CurrentUsedSize++] = elem; + return true; } From 7f51048438a840f67f9e96e69138b1d0f7043fdb Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:31:28 +0000 Subject: [PATCH 3/9] fixed ns makefile --- dlls/ns/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/ns/Makefile b/dlls/ns/Makefile index 4d80018321..c8afed68b7 100755 --- a/dlls/ns/Makefile +++ b/dlls/ns/Makefile @@ -1,7 +1,7 @@ #(C)2004-2005 AMX Mod X Development Team # Makefile written by David "BAILOPAN" Anderson -HLSDK = ../../../../hlsdk +HLSDK = ../../../hlsdk MM_ROOT = ../../../metamod/metamod ### EDIT BELOW FOR OTHER PROJECTS ### From 993b6e6c74846351ab8526d12c596d58ee923c34 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:41:45 +0000 Subject: [PATCH 4/9] added 3 more spaces to version output so our version numbers look nice --- amxmodx/srvcmd.cpp | 8 ++++---- plugins/admincmd.sma | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/amxmodx/srvcmd.cpp b/amxmodx/srvcmd.cpp index 79f1f456ca..c6ed41482f 100755 --- a/amxmodx/srvcmd.cpp +++ b/amxmodx/srvcmd.cpp @@ -39,7 +39,7 @@ void amx_command() { print_srvconsole("Currently loaded plugins:\n"); - print_srvconsole(" %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status"); + print_srvconsole(" %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status"); int plugins = 0; int running = 0; @@ -52,7 +52,7 @@ void amx_command() if ((*a).isValid() && !(*a).isPaused()) ++running; - print_srvconsole(" [%3d] %-23.22s %-8.7s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus()); + print_srvconsole(" [%3d] %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus()); ++a; } @@ -215,7 +215,7 @@ void amx_command() else if (!strcmp(cmd, "modules")) { print_srvconsole("Currently loaded modules:\n"); - print_srvconsole(" %-23.22s %-8.7s %-20.19s %-11.10s\n", "name", "version", "author", "status"); + print_srvconsole(" %-23.22s %-11.10s %-20.19s %-11.10s\n", "name", "version", "author", "status"); int running = 0; int modules = 0; @@ -228,7 +228,7 @@ void amx_command() ++running; ++modules; - print_srvconsole(" [%2d] %-23.22s %-8.7s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus()); + print_srvconsole(" [%2d] %-23.22s %-11.10s %-20.19s %-11.10s\n", modules, (*a).getName(), (*a).getVersion(), (*a).getAuthor(), (*a).getStatus()); ++a; } diff --git a/plugins/admincmd.sma b/plugins/admincmd.sma index 7aa41fa85c..ab5c828793 100755 --- a/plugins/admincmd.sma +++ b/plugins/admincmd.sma @@ -796,13 +796,13 @@ public cmdPlugins(id, level, cid) new running = 0 console_print(id, "----- %L -----", id, "LOADED_PLUGINS") - console_print(id, "%-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus) + console_print(id, "%-18.17s %-11.10s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus) new i=StartPLID; while (i Date: Fri, 26 Oct 2007 01:42:12 +0000 Subject: [PATCH 5/9] fixed amxmodx makefile --- amxmodx/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amxmodx/Makefile b/amxmodx/Makefile index bd4f237562..21f8e7514d 100755 --- a/amxmodx/Makefile +++ b/amxmodx/Makefile @@ -2,7 +2,7 @@ # Makefile written by David "BAILOPAN" Anderson HLSDK = ../../hlsdk -MM_ROOT = ../metamod/metamod +MM_ROOT = ../../metamod/metamod ### EDIT BELOW FOR OTHER PROJECTS ### From efbba0a9096d084a4d2488da33ab49b2fa09f41f Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:42:35 +0000 Subject: [PATCH 6/9] small change to the version changer for release builds --- versionchanger.pl | 380 ++++++++++++++++++++++++---------------------- 1 file changed, 195 insertions(+), 185 deletions(-) diff --git a/versionchanger.pl b/versionchanger.pl index 9dffd2d2ea..c1b7ab364b 100644 --- a/versionchanger.pl +++ b/versionchanger.pl @@ -1,185 +1,195 @@ -#!/usr/bin/perl - -our %arguments = -( - 'config' => 'modules.versions', - 'major' => '1', - 'minor' => '0', - 'revision' => '0', - 'build' => undef, - 'svnrev' => 'global', - 'path' => '', - 'modules' => '', -); - -my $arg; -foreach $arg (@ARGV) -{ - $arg =~ s/--//; - @arg = split(/=/, $arg); - $arguments{$arg[0]} = $arg[1]; -} - -our (%allowed); -if ($arguments{'modules'} ne "") -{ - my @l = split(/,/, $arguments{'modules'}); - my $i; - - for ($i=0; $i<=$#l; $i++) - { - $allowed{$l[$i]} = 1; - } -} else { - $allowed{'*'} = 1; -} - -#Set up path info -if ($arguments{'path'} ne "") -{ - if (!(-d $arguments{'path'})) - { - die "Unable to find path: " . $arguments{'path'} ."\n"; - } - chdir($arguments{'path'}); -} - -if (!open(CONFIG, $arguments{'config'})) -{ - die "Unable to open config file for reading: " . $arguments{'config'} . "\n"; -} - -our %modules; -my $cur_module = undef; -my $line; -while () -{ - chomp; - $line = $_; - if ($line =~ /^\[([^\]]+)\]$/) - { - $cur_module = $1; - next; - } - if (!$cur_module) - { - next; - } - if ($line =~ /^([^=]+) = (.+)$/) - { - $modules{$cur_module}{$1} = $2; - } -} - -close(CONFIG); - -#Copy global configuration options... -if (exists($modules{'PRODUCT'})) -{ - if (exists($modules{'PRODUCT'}{'major'})) - { - $arguments{'major'} = $modules{'PRODUCT'}{'major'}; - } - if (exists($modules{'PRODUCT'}{'minor'})) - { - $arguments{'minor'} = $modules{'PRODUCT'}{'minor'}; - } - if (exists($modules{'PRODUCT'}{'revision'})) - { - $arguments{'revision'} = $modules{'PRODUCT'}{'revision'}; - } - if (exists($modules{'PRODUCT'}{'svnrev'})) - { - $arguments{'svnrev'} = $modules{'PRODUCT'}{'svnrev'}; - } -} - -#Get the global SVN revision if we have none -my $rev; -if ($arguments{'build'} == undef) -{ - $rev = GetRevision(undef); -} else { - $rev = int($arguments{'build'}); -} - -my $major = $arguments{'major'}; -my $minor = $arguments{'minor'}; -my $revision = $arguments{'revision'}; -my $svnrev = $arguments{'svnrev'}; - -#Go through everything now -my $mod_i; -while ( ($cur_module, $mod_i) = each(%modules) ) -{ - #Skip the magic one - if ($cur_module eq "PRODUCT") - { - next; - } - if (!$allowed{'*'} && !$allowed{$cur_module}) - { - next; - } - #Prepare path - my %mod = %{$mod_i}; - my $infile = $mod{'in'}; - my $outfile = $mod{'out'}; - if ($mod{'folder'}) - { - if (!(-d $mod{'folder'})) - { - die "Folder " . $mod{'folder'} . " not found.\n"; - } - $infile = $mod{'folder'} . '/' . $infile; - $outfile = $mod{'folder'} . '/' . $outfile; - } - if (!(-f $infile)) - { - die "File $infile is not a file.\n"; - } - my $global_rev = $rev; - my $local_rev = GetRevision($mod{'folder'}); - if ($arguments{'svnrev'} eq 'local') - { - $global_rev = $local_rev; - } - #Start rewriting - open(INFILE, $infile) or die "Could not open file for reading: $infile\n"; - open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n"; - while () - { - s/\$PMAJOR\$/$major/g; - s/\$PMINOR\$/$minor/g; - s/\$PREVISION\$/$revision/g; - s/\$GLOBAL_BUILD\$/$rev/g; - s/\$LOCAL_BUILD\$/$local_rev/g; - print OUTFILE $_; - } - close(OUTFILE); - close(INFILE); -} - -sub GetRevision -{ - my ($path)=(@_); - my $rev; - if (!$path) - { - $rev = `svnversion --committed`; - } else { - $rev = `svnversion --committed $path`; - } - if ($rev =~ /exported/) - { - die "Path specified is not a working copy\n"; - } elsif ($rev =~ /(\d+):(\d+)/) { - $rev = int($2); - } elsif ($rev =~ /(\d+)/) { - $rev = int($1); - } else { - die "Unknown svnversion response: $rev\n"; - } - return $rev; -} - +#!/usr/bin/perl + +our %arguments = +( + 'config' => 'modules.versions', + 'major' => '1', + 'minor' => '0', + 'revision' => '0', + 'build' => undef, + 'svnrev' => 'global', + 'path' => '', + 'modules' => '', +); + +my $arg; +foreach $arg (@ARGV) +{ + $arg =~ s/--//; + @arg = split(/=/, $arg); + $arguments{$arg[0]} = $arg[1]; +} + +our (%allowed); +if ($arguments{'modules'} ne "") +{ + my @l = split(/,/, $arguments{'modules'}); + my $i; + + for ($i=0; $i<=$#l; $i++) + { + $allowed{$l[$i]} = 1; + } +} else { + $allowed{'*'} = 1; +} + +#Set up path info +if ($arguments{'path'} ne "") +{ + if (!(-d $arguments{'path'})) + { + die "Unable to find path: " . $arguments{'path'} ."\n"; + } + chdir($arguments{'path'}); +} + +if (!open(CONFIG, $arguments{'config'})) +{ + die "Unable to open config file for reading: " . $arguments{'config'} . "\n"; +} + +our %modules; +my $cur_module = undef; +my $line; +while () +{ + chomp; + $line = $_; + if ($line =~ /^\[([^\]]+)\]$/) + { + $cur_module = $1; + next; + } + if (!$cur_module) + { + next; + } + if ($line =~ /^([^=]+) = (.+)$/) + { + $modules{$cur_module}{$1} = $2; + } +} + +close(CONFIG); + +#Copy global configuration options... +if (exists($modules{'PRODUCT'})) +{ + if (exists($modules{'PRODUCT'}{'major'})) + { + $arguments{'major'} = $modules{'PRODUCT'}{'major'}; + } + if (exists($modules{'PRODUCT'}{'minor'})) + { + $arguments{'minor'} = $modules{'PRODUCT'}{'minor'}; + } + if (exists($modules{'PRODUCT'}{'revision'})) + { + $arguments{'revision'} = $modules{'PRODUCT'}{'revision'}; + } + if (exists($modules{'PRODUCT'}{'svnrev'})) + { + $arguments{'svnrev'} = $modules{'PRODUCT'}{'svnrev'}; + } +} + +#Get the global SVN revision if we have none +my $rev; +if ($arguments{'build'} == undef) +{ + $rev = GetRevision(undef); +} else { + $rev = int($arguments{'build'}); +} + +my $major = $arguments{'major'}; +my $minor = $arguments{'minor'}; +my $revision = $arguments{'revision'}; +my $svnrev = $arguments{'svnrev'}; + +#Go through everything now +my $mod_i; +while ( ($cur_module, $mod_i) = each(%modules) ) +{ + #Skip the magic one + if ($cur_module eq "PRODUCT") + { + next; + } + if (!$allowed{'*'} && !$allowed{$cur_module}) + { + next; + } + #Prepare path + my %mod = %{$mod_i}; + my $infile = $mod{'in'}; + my $outfile = $mod{'out'}; + if ($mod{'folder'}) + { + if (!(-d $mod{'folder'})) + { + die "Folder " . $mod{'folder'} . " not found.\n"; + } + $infile = $mod{'folder'} . '/' . $infile; + $outfile = $mod{'folder'} . '/' . $outfile; + } + if (!(-f $infile)) + { + die "File $infile is not a file.\n"; + } + my $global_rev = $rev; + my $local_rev; + + if ($arguments{'build'} == undef) + { + $local_rev = GetRevision($mod{'folder'}); + } + else + { + $local_rev = $rev; + } + + if ($arguments{'svnrev'} eq 'local') + { + $global_rev = $local_rev; + } + #Start rewriting + open(INFILE, $infile) or die "Could not open file for reading: $infile\n"; + open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n"; + while () + { + s/\$PMAJOR\$/$major/g; + s/\$PMINOR\$/$minor/g; + s/\$PREVISION\$/$revision/g; + s/\$GLOBAL_BUILD\$/$rev/g; + s/\$LOCAL_BUILD\$/$local_rev/g; + print OUTFILE $_; + } + close(OUTFILE); + close(INFILE); +} + +sub GetRevision +{ + my ($path)=(@_); + my $rev; + if (!$path) + { + $rev = `svnversion --committed`; + } else { + $rev = `svnversion --committed $path`; + } + if ($rev =~ /exported/) + { + die "Path specified is not a working copy\n"; + } elsif ($rev =~ /(\d+):(\d+)/) { + $rev = int($2); + } elsif ($rev =~ /(\d+)/) { + $rev = int($1); + } else { + die "Unknown svnversion response: $rev\n"; + } + return $rev; +} + From f281a24274ba51a7b1cb6e75a4a3b556078604cf Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:47:40 +0000 Subject: [PATCH 7/9] added pluginmenu to build --- installer/AMXXRelease/CoreMod.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/installer/AMXXRelease/CoreMod.cs b/installer/AMXXRelease/CoreMod.cs index 263f542550..f247facdb0 100755 --- a/installer/AMXXRelease/CoreMod.cs +++ b/installer/AMXXRelease/CoreMod.cs @@ -123,6 +123,7 @@ private void AddPlugins() AddPlugin("telemenu"); AddPlugin("timeleft"); AddPlugin("cmdmenu"); + AddPlugin("pluginmenu"); } private void AddModules() From 3030302952af979bdd34c669fc2c7e663e8f4478 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 01:58:59 +0000 Subject: [PATCH 8/9] updated installer file list --- installer/amxmodx-installer.nsi | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/installer/amxmodx-installer.nsi b/installer/amxmodx-installer.nsi index b01e97faad..f79edfedb3 100755 --- a/installer/amxmodx-installer.nsi +++ b/installer/amxmodx-installer.nsi @@ -107,10 +107,10 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\configs\clcmds.ini" File "installer\files\base\addons\amxmodx\configs\cmds.ini" File "installer\files\base\addons\amxmodx\configs\configs.ini" - File "installer\files\base\addons\amxmodx\configs\conmotd.txt" File "installer\files\base\addons\amxmodx\configs\core.ini" File "installer\files\base\addons\amxmodx\configs\custommenuitems.cfg" File "installer\files\base\addons\amxmodx\configs\cvars.ini" + File "installer\files\base\addons\amxmodx\configs\hamdata.ini" File "installer\files\base\addons\amxmodx\configs\maps.ini" File "installer\files\base\addons\amxmodx\configs\modules.ini" File "installer\files\base\addons\amxmodx\configs\plugins.ini" @@ -171,6 +171,8 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\modules\regex_amxx_i386.so" File "installer\files\base\addons\amxmodx\modules\sockets_amxx.dll" File "installer\files\base\addons\amxmodx\modules\sockets_amxx_i386.so" + File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx.dll" + File "installer\files\base\addons\amxmodx\modules\hamsandwich_amxx_i386.so" SetOutPath "$INSTDIR\files\base\plugins" File "installer\files\base\addons\amxmodx\plugins\admin.amxx" File "installer\files\base\addons\amxmodx\plugins\adminchat.amxx" @@ -190,6 +192,7 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\plugins\nextmap.amxx" File "installer\files\base\addons\amxmodx\plugins\pausecfg.amxx" File "installer\files\base\addons\amxmodx\plugins\plmenu.amxx" + File "installer\files\base\addons\amxmodx\plugins\pluginmenu.amxx" File "installer\files\base\addons\amxmodx\plugins\scrollmsg.amxx" File "installer\files\base\addons\amxmodx\plugins\statscfg.amxx" File "installer\files\base\addons\amxmodx\plugins\telemenu.amxx" @@ -218,6 +221,7 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\scripting\include\amxconst.inc" File "installer\files\base\addons\amxmodx\scripting\include\amxmisc.inc" File "installer\files\base\addons\amxmodx\scripting\include\amxmodx.inc" + File "installer\files\base\addons\amxmodx\scripting\include\cellarray.inc" File "installer\files\base\addons\amxmodx\scripting\include\core.inc" File "installer\files\base\addons\amxmodx\scripting\include\csstats.inc" File "installer\files\base\addons\amxmodx\scripting\include\cstrike.inc" @@ -239,6 +243,9 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\scripting\include\float.inc" File "installer\files\base\addons\amxmodx\scripting\include\fun.inc" File "installer\files\base\addons\amxmodx\scripting\include\geoip.inc" + File "installer\files\base\addons\amxmodx\scripting\include\ham_const.inc" + File "installer\files\base\addons\amxmodx\scripting\include\hamsandwich.inc" + File "installer\files\base\addons\amxmodx\scripting\include\hlsdk_const.inc" File "installer\files\base\addons\amxmodx\scripting\include\hlsdk_const.inc" File "installer\files\base\addons\amxmodx\scripting\include\lang.inc" File "installer\files\base\addons\amxmodx\scripting\include\messages.inc" @@ -248,11 +255,13 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\scripting\include\ns2amx.inc" File "installer\files\base\addons\amxmodx\scripting\include\ns_const.inc" File "installer\files\base\addons\amxmodx\scripting\include\regex.inc" + File "installer\files\base\addons\amxmodx\scripting\include\newmenus.inc" File "installer\files\base\addons\amxmodx\scripting\include\nvault.inc" File "installer\files\base\addons\amxmodx\scripting\include\sockets.inc" File "installer\files\base\addons\amxmodx\scripting\include\sorting.inc" File "installer\files\base\addons\amxmodx\scripting\include\sqlx.inc" File "installer\files\base\addons\amxmodx\scripting\include\string.inc" + File "installer\files\base\addons\amxmodx\scripting\include\svn_version.inc" File "installer\files\base\addons\amxmodx\scripting\include\tfcconst.inc" File "installer\files\base\addons\amxmodx\scripting\include\tfcstats.inc" File "installer\files\base\addons\amxmodx\scripting\include\tfcx.inc" @@ -282,6 +291,7 @@ Section "MainSection" SEC01 File "installer\files\base\addons\amxmodx\scripting\nextmap.sma" File "installer\files\base\addons\amxmodx\scripting\pausecfg.sma" File "installer\files\base\addons\amxmodx\scripting\plmenu.sma" + File "installer\files\base\addons\amxmodx\scripting\pluginmenu.sma" File "installer\files\base\addons\amxmodx\scripting\scrollmsg.sma" File "installer\files\base\addons\amxmodx\scripting\statscfg.sma" File "installer\files\base\addons\amxmodx\scripting\telemenu.sma" @@ -589,6 +599,7 @@ Section Uninstall Delete "$INSTDIR\files\base\addons\amxmodx\scripting\telemenu.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\statscfg.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\scrollmsg.sma" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\pluginmenu.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\plmenu.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\pausecfg.sma" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\nextmap.sma" @@ -618,6 +629,7 @@ Section Uninstall Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tfcstats.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\tfcconst.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\time.inc" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\svn_version.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\string.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\sqlx.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\sorting.inc" @@ -627,11 +639,14 @@ Section Uninstall Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ns2amx.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ns.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\nvault.inc" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\newmenus.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\message_stocks.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\message_const.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\messages.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\lang.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\hlsdk_const.inc" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\ham_const.inc" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\hamsandwich.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\geoip.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\fun.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\float.inc" @@ -653,6 +668,7 @@ Section Uninstall Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\cstrike.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\csstats.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\core.inc" + Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\cellarray.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmodx.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmod.inc" Delete "$INSTDIR\files\base\addons\amxmodx\scripting\include\amxmisc.inc" @@ -696,6 +712,7 @@ Section Uninstall Delete "$INSTDIR\files\base\plugins\telemenu.amxx" Delete "$INSTDIR\files\base\plugins\statscfg.amxx" Delete "$INSTDIR\files\base\plugins\scrollmsg.amxx" + Delete "$INSTDIR\files\base\plugins\pluginmenu.amxx" Delete "$INSTDIR\files\base\plugins\plmenu.amxx" Delete "$INSTDIR\files\base\plugins\pausecfg.amxx" Delete "$INSTDIR\files\base\plugins\nextmap.amxx" @@ -731,6 +748,8 @@ Section Uninstall Delete "$INSTDIR\files\base\modules\fakemeta_amxx.dll" Delete "$INSTDIR\files\base\modules\engine_amxx_i386.so" Delete "$INSTDIR\files\base\modules\engine_amxx.dll" + Delete "$INSTDIR\files\base\modules\hamsandwich_amxx_i386.so" + Delete "$INSTDIR\files\base\modules\hamsandwich_amxx.dll" Delete "$INSTDIR\files\base\dlls\metamod_i386.so" Delete "$INSTDIR\files\base\dlls\metamod.dll" Delete "$INSTDIR\files\base\dlls\amxmodx_mm_i386.so" @@ -769,10 +788,10 @@ Section Uninstall Delete "$INSTDIR\files\base\configs\plugins.ini" Delete "$INSTDIR\files\base\configs\modules.ini" Delete "$INSTDIR\files\base\configs\maps.ini" + Delete "$INSTDIR\files\base\configs\hamdata.ini" Delete "$INSTDIR\files\base\configs\cvars.ini" Delete "$INSTDIR\files\base\configs\custommenuitems.cfg" Delete "$INSTDIR\files\base\configs\core.ini" - Delete "$INSTDIR\files\base\configs\conmotd.txt" Delete "$INSTDIR\files\base\configs\configs.ini" Delete "$INSTDIR\files\base\configs\cmds.ini" Delete "$INSTDIR\files\base\configs\clcmds.ini" From cc99d6d1fb6c91e915ace25d8f1644d705bb91c9 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 26 Oct 2007 02:23:21 +0000 Subject: [PATCH 9/9] finalized build numbers and all that other release crap --- amxmodx/svn_version.h | 4 ++-- dlls/cstrike/cstrike/svn_version.h | 2 +- dlls/cstrike/csx/svn_version.h | 2 +- dlls/dod/dodfun/svn_version.h | 2 +- dlls/dod/dodx/svn_version.h | 2 +- dlls/engine/svn_version.h | 2 +- dlls/fakemeta/svn_version.h | 2 +- dlls/fun/svn_version.h | 2 +- dlls/geoip/svn_version.h | 2 +- dlls/hamsandwich/svn_version.h | 2 +- dlls/mysqlx/svn_version.h | 2 +- dlls/ns/svn_version.h | 2 +- dlls/nvault/svn_version.h | 2 +- dlls/regex/svn_version.h | 2 +- dlls/sockets/svn_version.h | 2 +- dlls/sqlite/svn_version.h | 2 +- dlls/tfcx/svn_version.h | 2 +- dlls/ts/tsfun/svn_version.h | 2 +- dlls/ts/tsx/svn_version.h | 2 +- installer/AMXXRelease/AMXXRelease.exe | Bin 32768 -> 32768 bytes installer/AMXXRelease/win32.info | 6 +++--- installer/amxmodx-installer.nsi | 2 +- plugins/include/svn_version.inc | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/amxmodx/svn_version.h b/amxmodx/svn_version.h index b0f739f467..23739d2593 100644 --- a/amxmodx/svn_version.h +++ b/amxmodx/svn_version.h @@ -1,8 +1,8 @@ #ifndef _INCLUDE_SVN_VERSION_H_ #define _INCLUDE_SVN_VERSION_H_ -#define SVN_VERSION_STRING "1.8.0.3648" -#define SVN_VERSION_DWORD 1,8,0,3648 +#define SVN_VERSION_STRING "1.8.0.3660" +#define SVN_VERSION_DWORD 1,8,0,3660 #define SVN_VERSION_PRODUCT "1.8.0" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/cstrike/cstrike/svn_version.h b/dlls/cstrike/cstrike/svn_version.h index 5011aa4aee..a8ad451407 100644 --- a/dlls/cstrike/cstrike/svn_version.h +++ b/dlls/cstrike/cstrike/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3635" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/cstrike/csx/svn_version.h b/dlls/cstrike/csx/svn_version.h index 6ab803fddb..a8ad451407 100644 --- a/dlls/cstrike/csx/svn_version.h +++ b/dlls/cstrike/csx/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3550" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/dod/dodfun/svn_version.h b/dlls/dod/dodfun/svn_version.h index 2d4ddf3ee0..a8ad451407 100644 --- a/dlls/dod/dodfun/svn_version.h +++ b/dlls/dod/dodfun/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3587" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/dod/dodx/svn_version.h b/dlls/dod/dodx/svn_version.h index 396bfa58ff..a8ad451407 100644 --- a/dlls/dod/dodx/svn_version.h +++ b/dlls/dod/dodx/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3538" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/engine/svn_version.h b/dlls/engine/svn_version.h index dc83e486f4..a8ad451407 100644 --- a/dlls/engine/svn_version.h +++ b/dlls/engine/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3486" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/fakemeta/svn_version.h b/dlls/fakemeta/svn_version.h index 636cac760e..a8ad451407 100644 --- a/dlls/fakemeta/svn_version.h +++ b/dlls/fakemeta/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3641" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/fun/svn_version.h b/dlls/fun/svn_version.h index d129f6b354..a8ad451407 100644 --- a/dlls/fun/svn_version.h +++ b/dlls/fun/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3466" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/geoip/svn_version.h b/dlls/geoip/svn_version.h index 8b0fe40dc0..a8ad451407 100644 --- a/dlls/geoip/svn_version.h +++ b/dlls/geoip/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3552" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/hamsandwich/svn_version.h b/dlls/hamsandwich/svn_version.h index 93ef053f32..a8ad451407 100644 --- a/dlls/hamsandwich/svn_version.h +++ b/dlls/hamsandwich/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3582" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/mysqlx/svn_version.h b/dlls/mysqlx/svn_version.h index 48b3e90bef..a8ad451407 100644 --- a/dlls/mysqlx/svn_version.h +++ b/dlls/mysqlx/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3645" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/ns/svn_version.h b/dlls/ns/svn_version.h index cd509eec70..a8ad451407 100644 --- a/dlls/ns/svn_version.h +++ b/dlls/ns/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3591" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/nvault/svn_version.h b/dlls/nvault/svn_version.h index d129f6b354..a8ad451407 100644 --- a/dlls/nvault/svn_version.h +++ b/dlls/nvault/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3466" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/regex/svn_version.h b/dlls/regex/svn_version.h index 663a8e5f6c..a8ad451407 100644 --- a/dlls/regex/svn_version.h +++ b/dlls/regex/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3564" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/sockets/svn_version.h b/dlls/sockets/svn_version.h index ae9c1fdaf3..a8ad451407 100644 --- a/dlls/sockets/svn_version.h +++ b/dlls/sockets/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3467" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/sqlite/svn_version.h b/dlls/sqlite/svn_version.h index 24a94d8ebb..a8ad451407 100644 --- a/dlls/sqlite/svn_version.h +++ b/dlls/sqlite/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3647" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/tfcx/svn_version.h b/dlls/tfcx/svn_version.h index ba41b396ab..a8ad451407 100644 --- a/dlls/tfcx/svn_version.h +++ b/dlls/tfcx/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3551" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/ts/tsfun/svn_version.h b/dlls/ts/tsfun/svn_version.h index d129f6b354..a8ad451407 100644 --- a/dlls/ts/tsfun/svn_version.h +++ b/dlls/ts/tsfun/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3466" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/dlls/ts/tsx/svn_version.h b/dlls/ts/tsx/svn_version.h index 396bfa58ff..a8ad451407 100644 --- a/dlls/ts/tsx/svn_version.h +++ b/dlls/ts/tsx/svn_version.h @@ -4,6 +4,6 @@ /** This file is auto-generated by build scripts. Do not edit it unless you know what you're doing. */ /** Do not commit the generated .h file, as it will only mess up SVN revision numbers. */ -#define SVN_VERSION "1.8.0.3538" +#define SVN_VERSION "1.8.0.3660" #endif //_INCLUDE_SVN_VERSION_H_ diff --git a/installer/AMXXRelease/AMXXRelease.exe b/installer/AMXXRelease/AMXXRelease.exe index da6e21b72e57345f0fb4683aae983899ab8930c6..7e9d4780c01f8615d7ac383ea18935c0c95abced 100755 GIT binary patch literal 32768 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

mnrnrgV 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 D4(0~J diff --git a/installer/AMXXRelease/win32.info b/installer/AMXXRelease/win32.info index 000b10268d..2fd57987ce 100755 --- a/installer/AMXXRelease/win32.info +++ b/installer/AMXXRelease/win32.info @@ -1,6 +1,6 @@ compress = C:\WINDOWS\zip.exe -source = R:\amxmodx +source = c:\temp\amxmodx makeopts = -output = c:\real\done +output = c:\temp\done devenv = C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.com -release = amxmodx-1.76d +release = amxmodx-1.8.0 diff --git a/installer/amxmodx-installer.nsi b/installer/amxmodx-installer.nsi index f79edfedb3..8117389388 100755 --- a/installer/amxmodx-installer.nsi +++ b/installer/amxmodx-installer.nsi @@ -2,7 +2,7 @@ ; Licensed under the GNU General Public License ; Originally written by -=HaXoMaTiC=- !define PRODUCT_NAME "AMX Mod X Installer" -!define PRODUCT_VERSION "1.76d" +!define PRODUCT_VERSION "1.8.0" !define PRODUCT_PUBLISHER "AMX Mod X Dev Team" !define PRODUCT_WEB_SITE "http://www.amxmodx.org/" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Installer.exe" diff --git a/plugins/include/svn_version.inc b/plugins/include/svn_version.inc index 97ee348834..e7b81945f5 100644 --- a/plugins/include/svn_version.inc +++ b/plugins/include/svn_version.inc @@ -13,4 +13,4 @@ #define AMXX_VERSION 1.80 #define AMXX_VERSION_NUM 180 -stock const AMXX_VERSION_STR[] = "1.8.0.3648"; +stock const AMXX_VERSION_STR[] = "1.8.0.3660";