core/systems/LibrarySys.h
author David Anderson <dvander@alliedmods.net>
Wed Dec 13 11:13:50 2006 +0000 (2006-12-13)
changeset 206 04c8442bd9d1
parent 145 473df5b9878e
child 252 ce166c465bad
permissions -rw-r--r--
Added path formating to LibrarySystem so we don't have to rely on g_SMAPI
dvander@141
     1
#ifndef _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
     2
#define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
     3
dvander@141
     4
#include <ILibrarySys.h>
dvander@141
     5
#include "sm_platform.h"
dvander@141
     6
dvander@141
     7
using namespace SourceMod;
dvander@141
     8
dvander@141
     9
#if defined PLATFORM_WINDOWS
dvander@141
    10
typedef HMODULE		LibraryHandle;
dvander@141
    11
#else if defined PLATFORM_POSIX
dvander@141
    12
typedef void *		LibraryHandle;
dvander@141
    13
#endif
dvander@141
    14
dvander@141
    15
class CDirectory : public IDirectory
dvander@141
    16
{
dvander@141
    17
public:
dvander@141
    18
	CDirectory(const char *path);
dvander@141
    19
	~CDirectory();
dvander@141
    20
public:
dvander@141
    21
	virtual bool MoreFiles();
dvander@141
    22
	virtual void NextEntry();
dvander@141
    23
	virtual const char *GetEntryName();
dvander@141
    24
	virtual bool IsEntryDirectory();
dvander@141
    25
	virtual bool IsEntryFile();
dvander@141
    26
public:
dvander@141
    27
	bool IsValid();
dvander@141
    28
private:
dvander@141
    29
#if defined PLATFORM_WINDOWS
dvander@141
    30
	HANDLE m_dir;
dvander@141
    31
	WIN32_FIND_DATAA m_fd;
dvander@141
    32
#else if defined PLATFORM_LINUX
dvander@141
    33
	DIR *m_dir;
dvander@141
    34
	struct dirent *ep;
dvander@141
    35
	char m_origpath[PLATFORM_MAX_PATH];
dvander@141
    36
#endif
dvander@141
    37
};
dvander@141
    38
dvander@141
    39
class CLibrary : public ILibrary
dvander@141
    40
{
dvander@141
    41
public:
dvander@141
    42
	CLibrary(LibraryHandle me);
dvander@141
    43
	~CLibrary();
dvander@141
    44
public:
dvander@141
    45
	virtual void CloseLibrary();
dvander@141
    46
	virtual void *GetSymbolAddress(const char *symname);
dvander@141
    47
private:
dvander@141
    48
	LibraryHandle m_lib;
dvander@141
    49
};
dvander@141
    50
dvander@145
    51
class LibrarySystem : public ILibrarySys
dvander@141
    52
{
dvander@141
    53
public:
dvander@141
    54
	virtual ILibrary *OpenLibrary(const char *path, char *error, size_t err_max);
dvander@141
    55
	virtual IDirectory *OpenDirectory(const char *path);
dvander@141
    56
	virtual void CloseDirectory(IDirectory *dir);
dvander@141
    57
	virtual bool PathExists(const char *path);
dvander@141
    58
	virtual bool IsPathFile(const char *path);
dvander@141
    59
	virtual bool IsPathDirectory(const char *path);
dvander@141
    60
	virtual void GetPlatformError(char *error, size_t err_max);
dvander@206
    61
	virtual void PathFormat(char *buffer, size_t len, const char *fmt, ...);
dvander@141
    62
};
dvander@141
    63
dvander@141
    64
extern LibrarySystem g_LibSys;
dvander@141
    65
dvander@141
    66
#endif //_INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_