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