diff -r c7b4237fff50 -r 03a67e41afbc core/systems/LibrarySys.cpp
--- a/core/systems/LibrarySys.cpp Fri Mar 28 06:21:34 2008 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,398 +0,0 @@
-/**
- * vim: set ts=4 :
- * =============================================================================
- * SourceMod
- * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
- * =============================================================================
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, version 3.0, as published by the
- * Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see .
- *
- * As a special exception, AlliedModders LLC gives you permission to link the
- * code of this program (as well as its derivative works) to "Half-Life 2," the
- * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
- * by the Valve Corporation. You must obey the GNU General Public License in
- * all respects for all other code used. Additionally, AlliedModders LLC grants
- * this exception to all derivative works. AlliedModders LLC defines further
- * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
- * or .
- *
- * Version: $Id$
- */
-
-#include
-#include
-#include
-#include
-#include "sm_stringutil.h"
-#include "LibrarySys.h"
-
-LibrarySystem g_LibSys;
-
-CLibrary::~CLibrary()
-{
- if (m_lib)
- {
-#if defined PLATFORM_WINDOWS
- FreeLibrary(m_lib);
-#elif defined PLATFORM_POSIX
- dlclose(m_lib);
-#endif
- m_lib = NULL;
- }
-}
-
-CLibrary::CLibrary(LibraryHandle me)
-{
- m_lib = me;
-}
-
-void CLibrary::CloseLibrary()
-{
- delete this;
-}
-
-void *CLibrary::GetSymbolAddress(const char *symname)
-{
-#if defined PLATFORM_WINDOWS
- return GetProcAddress(m_lib, symname);
-#elif defined PLATFORM_POSIX
- return dlsym(m_lib, symname);
-#endif
-}
-
-
-/********************
- ** Directory Code **
- ********************/
-
-
-CDirectory::CDirectory(const char *path)
-{
-#if defined PLATFORM_WINDOWS
- char newpath[PLATFORM_MAX_PATH];
- snprintf(newpath, sizeof(newpath), "%s\\*.*", path);
- m_dir = FindFirstFileA(newpath, &m_fd);
- if (!IsValid())
- {
- m_fd.cFileName[0] = '\0';
- }
-#elif defined PLATFORM_POSIX
- m_dir = opendir(path);
- if (IsValid())
- {
- /* :TODO: we need to read past "." and ".."! */
- ep = readdir(m_dir);
- snprintf(m_origpath, PLATFORM_MAX_PATH, "%s", path);
- } else {
- ep = NULL;
- }
-#endif
-}
-
-CDirectory::~CDirectory()
-{
- if (IsValid())
- {
-#if defined PLATFORM_WINDOWS
- FindClose(m_dir);
-#elif defined PLATFORM_POSIX
- closedir(m_dir);
-#endif
- }
-}
-
-void CDirectory::NextEntry()
-{
-#if defined PLATFORM_WINDOWS
- if (FindNextFile(m_dir, &m_fd) == 0)
- {
- FindClose(m_dir);
- m_dir = INVALID_HANDLE_VALUE;
- }
-#elif defined PLATFORM_POSIX
- if ((ep=readdir(m_dir)) == NULL)
- {
- closedir(m_dir);
- m_dir = NULL;
- }
-#endif
-}
-
-bool CDirectory::IsEntryValid()
-{
- return IsValid();
-}
-
-bool CDirectory::IsEntryDirectory()
-{
-#if defined PLATFORM_WINDOWS
- return ((m_fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
-#elif defined PLATFORM_LINUX
- char temppath[PLATFORM_MAX_PATH];
- snprintf(temppath, sizeof(temppath), "%s/%s", m_origpath, GetEntryName());
- return g_LibSys.IsPathDirectory(temppath);
-#endif
-}
-
-bool CDirectory::IsEntryFile()
-{
-#if defined PLATFORM_WINDOWS
- return !(m_fd.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_DEVICE));
-#elif defined PLATFORM_POSIX
- char temppath[PLATFORM_MAX_PATH];
- snprintf(temppath, sizeof(temppath), "%s/%s", m_origpath, GetEntryName());
- return g_LibSys.IsPathFile(temppath);
-#endif
-}
-
-const char *CDirectory::GetEntryName()
-{
-#if defined PLATFORM_WINDOWS
- return m_fd.cFileName;
-#elif defined PLATFORM_LINUX
- return ep ? ep->d_name : "";
-#endif
-}
-
-bool CDirectory::MoreFiles()
-{
- return IsValid();
-}
-
-bool CDirectory::IsValid()
-{
-#if defined PLATFORM_WINDOWS
- return (m_dir != INVALID_HANDLE_VALUE);
-#elif defined PLATFORM_LINUX
- return (m_dir != NULL);
-#endif
-}
-
-
-/*************************
- ** Library System Code **
- *************************/
-
-
-bool LibrarySystem::PathExists(const char *path)
-{
-#if defined PLATFORM_WINDOWS
- DWORD attr = GetFileAttributesA(path);
-
- return (attr != INVALID_FILE_ATTRIBUTES);
-#elif defined PLATFORM_POSIX
- struct stat s;
-
- return (stat(path, &s) == 0);
-#endif
-}
-
-bool LibrarySystem::IsPathFile(const char *path)
-{
-#if defined PLATFORM_WINDOWS
- DWORD attr = GetFileAttributes(path);
-
- if (attr == INVALID_FILE_ATTRIBUTES)
- {
- return false;
- }
-
- if (attr & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_DEVICE))
- {
- return false;
- }
-
- return true;
-#elif defined PLATFORM_LINUX
- struct stat s;
-
- if (stat(path, &s) != 0)
- {
- return false;
- }
-
- return S_ISREG(s.st_mode) ? true : false;
-#endif
-}
-
-bool LibrarySystem::IsPathDirectory(const char *path)
-{
-#if defined PLATFORM_WINDOWS
- DWORD attr = GetFileAttributes(path);
-
- if (attr == INVALID_FILE_ATTRIBUTES)
- {
- return false;
- }
-
- if (attr & FILE_ATTRIBUTE_DIRECTORY)
- {
- return true;
- }
-
-#elif defined PLATFORM_LINUX
- struct stat s;
-
- if (stat(path, &s) != 0)
- {
- return false;
- }
-
- if (S_ISDIR(s.st_mode))
- {
- return true;
- }
-#endif
-
- return false;
-}
-
-IDirectory *LibrarySystem::OpenDirectory(const char *path)
-{
- CDirectory *dir = new CDirectory(path);
-
- if (!dir->IsValid())
- {
- delete dir;
- return NULL;
- }
-
- return dir;
-}
-
-void LibrarySystem::GetPlatformError(char *error, size_t maxlength)
-{
- if (error && maxlength)
- {
-#if defined PLATFORM_WINDOWS
- DWORD dw = GetLastError();
- FormatMessageA(
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- dw,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPSTR)error,
- maxlength,
- NULL);
-#elif defined PLATFORM_POSIX
- snprintf(error, maxlength, "%s", strerror(errno));
-#endif
- }
-}
-
-void LibrarySystem::CloseDirectory(IDirectory *dir)
-{
- delete dir;
-}
-
-ILibrary *LibrarySystem::OpenLibrary(const char *path, char *error, size_t maxlength)
-{
- LibraryHandle lib;
-#if defined PLATFORM_WINDOWS
- lib = LoadLibraryA(path);
- if (!lib)
- {
- GetPlatformError(error, maxlength);
- return false;
- }
-#elif defined PLATFORM_POSIX
- lib = dlopen(path, RTLD_NOW);
- if (!lib)
- {
- GetPlatformError(error, maxlength);
- return false;
- }
-#endif
-
- return new CLibrary(lib);
-}
-
-size_t LibrarySystem::PathFormat(char *buffer, size_t len, const char *fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- size_t mylen = vsnprintf(buffer, len, fmt, ap);
- va_end(ap);
-
- if (mylen >= len)
- {
- mylen = len - 1;
- buffer[mylen] = '\0';
- }
-
- for (size_t i=0; i= 0; i--)
- {
- if (i > end)
- {
- break;
- }
-
- if (filename[i] == PLATFORM_SEP_CHAR || filename[i] == PLATFORM_SEP_ALTCHAR)
- {
- break;
- }
-
- if (filename[i] == '.' && i != end)
- {
- return &filename[++i];
- }
- }
-
- return NULL;
-}
-
-bool LibrarySystem::CreateFolder(const char *path)
-{
-#if defined PLATFORM_WINDOWS
- return (mkdir(path) != -1);
-#elif defined PLATFORM_POSIX
- return (mkdir(path, 0775) != -1);
-#endif
-}
-
-size_t LibrarySystem::GetFileFromPath(char *buffer, size_t maxlength, const char *path)
-{
- size_t length = strlen(path);
-
- for (size_t i = length - 1;
- i >= 0 && i <= length - 1;
- i--)
- {
- if (path[i] == '/'
-#if defined PLATFORM_WINDOWS
- || path[i] == '\\'
-#endif
- )
- {
- return UTIL_Format(buffer, maxlength, "%s", &path[i+1]);
- }
- }
-
- /* We scanned and found no path separator */
- return UTIL_Format(buffer, maxlength, "%s", path);
-}