core/systems/LibrarySys.h
author David Anderson <dvander@alliedmods.net>
Fri Feb 16 04:16:31 2007 +0000 (2007-02-16)
changeset 502 4530ea065a8b
parent 370 d3a484f98f6d
child 641 ce1f369ba889
permissions -rw-r--r--
fixed a serious potential bug with swapping plugins to debug mode, leaving stale function pointers without plugin removal
dvander@370
     1
/**
dvander@370
     2
 * ===============================================================
dvander@370
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@370
     4
 * ===============================================================
dvander@370
     5
 *
dvander@370
     6
 * This file is not open source and may not be copied without explicit
dvander@370
     7
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@370
     8
 * in whole or significant part.
dvander@370
     9
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@370
    10
 *
dvander@370
    11
 * Version: $Id$
dvander@370
    12
 */
dvander@370
    13
dvander@141
    14
#ifndef _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
    15
#define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
    16
dvander@141
    17
#include <ILibrarySys.h>
dvander@141
    18
#include "sm_platform.h"
dvander@141
    19
dvander@141
    20
using namespace SourceMod;
dvander@141
    21
dvander@141
    22
#if defined PLATFORM_WINDOWS
dvander@141
    23
typedef HMODULE		LibraryHandle;
dvander@351
    24
#elif defined PLATFORM_POSIX
dvander@141
    25
typedef void *		LibraryHandle;
dvander@141
    26
#endif
dvander@141
    27
dvander@141
    28
class CDirectory : public IDirectory
dvander@141
    29
{
dvander@141
    30
public:
dvander@141
    31
	CDirectory(const char *path);
dvander@141
    32
	~CDirectory();
dvander@141
    33
public:
dvander@141
    34
	virtual bool MoreFiles();
dvander@141
    35
	virtual void NextEntry();
dvander@141
    36
	virtual const char *GetEntryName();
dvander@141
    37
	virtual bool IsEntryDirectory();
dvander@141
    38
	virtual bool IsEntryFile();
dvander@252
    39
	virtual bool IsEntryValid();
dvander@141
    40
public:
dvander@141
    41
	bool IsValid();
dvander@141
    42
private:
dvander@141
    43
#if defined PLATFORM_WINDOWS
dvander@141
    44
	HANDLE m_dir;
dvander@141
    45
	WIN32_FIND_DATAA m_fd;
dvander@351
    46
#elif defined PLATFORM_POSIX
dvander@141
    47
	DIR *m_dir;
dvander@141
    48
	struct dirent *ep;
dvander@141
    49
	char m_origpath[PLATFORM_MAX_PATH];
dvander@141
    50
#endif
dvander@141
    51
};
dvander@141
    52
dvander@141
    53
class CLibrary : public ILibrary
dvander@141
    54
{
dvander@141
    55
public:
dvander@141
    56
	CLibrary(LibraryHandle me);
dvander@141
    57
	~CLibrary();
dvander@141
    58
public:
dvander@141
    59
	virtual void CloseLibrary();
dvander@141
    60
	virtual void *GetSymbolAddress(const char *symname);
dvander@141
    61
private:
dvander@141
    62
	LibraryHandle m_lib;
dvander@141
    63
};
dvander@141
    64
dvander@145
    65
class LibrarySystem : public ILibrarySys
dvander@141
    66
{
dvander@141
    67
public:
dvander@141
    68
	virtual ILibrary *OpenLibrary(const char *path, char *error, size_t err_max);
dvander@141
    69
	virtual IDirectory *OpenDirectory(const char *path);
dvander@141
    70
	virtual void CloseDirectory(IDirectory *dir);
dvander@141
    71
	virtual bool PathExists(const char *path);
dvander@141
    72
	virtual bool IsPathFile(const char *path);
dvander@141
    73
	virtual bool IsPathDirectory(const char *path);
dvander@141
    74
	virtual void GetPlatformError(char *error, size_t err_max);
dvander@317
    75
	virtual size_t PathFormat(char *buffer, size_t len, const char *fmt, ...);
dvander@141
    76
};
dvander@141
    77
dvander@141
    78
extern LibrarySystem g_LibSys;
dvander@141
    79
dvander@141
    80
#endif //_INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_