mirror of https://github.com/cppla/ServerStatus
				
				
				
			
		
			
				
	
	
		
			1300 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			1300 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			C
		
	
	
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
 | 
						|
/* If you are missing that file, acquire a complete release at teeworlds.com.                */
 | 
						|
 | 
						|
/*
 | 
						|
	Title: OS Abstraction
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef BASE_SYSTEM_H
 | 
						|
#define BASE_SYSTEM_H
 | 
						|
 | 
						|
#include "detect.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* Group: Debug */
 | 
						|
/*
 | 
						|
	Function: dbg_assert
 | 
						|
		Breaks into the debugger based on a test.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		test - Result of the test.
 | 
						|
		msg - Message that should be printed if the test fails.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		Does nothing in release version of the library.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<dbg_break>
 | 
						|
*/
 | 
						|
void dbg_assert(int test, const char *msg);
 | 
						|
#define dbg_assert(test,msg) dbg_assert_imp(__FILE__, __LINE__, test, msg)
 | 
						|
void dbg_assert_imp(const char *filename, int line, int test, const char *msg);
 | 
						|
 | 
						|
 | 
						|
#ifdef __clang_analyzer__
 | 
						|
#include <assert.h>
 | 
						|
#undef dbg_assert
 | 
						|
#define dbg_assert(test,msg) assert(test)
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
	Function: dbg_break
 | 
						|
		Breaks into the debugger.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		Does nothing in release version of the library.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<dbg_assert>
 | 
						|
*/
 | 
						|
void dbg_break();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: dbg_msg
 | 
						|
 | 
						|
	Prints a debug message.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sys - A string that describes what system the message belongs to
 | 
						|
		fmt - A printf styled format string.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		Does nothing in release version of the library.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<dbg_assert>
 | 
						|
*/
 | 
						|
void dbg_msg(const char *sys, const char *fmt, ...);
 | 
						|
 | 
						|
/* Group: Memory */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_alloc
 | 
						|
		Allocates memory.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		size - Size of the needed block.
 | 
						|
		alignment - Alignment for the block.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns a pointer to the newly allocated block. Returns a
 | 
						|
		null pointer if the memory couldn't be allocated.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Passing 0 to size will allocated the smallest amount possible
 | 
						|
		and return a unique pointer.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<mem_free>
 | 
						|
*/
 | 
						|
void *mem_alloc_debug(const char *filename, int line, unsigned size, unsigned alignment);
 | 
						|
#define mem_alloc(s,a) mem_alloc_debug(__FILE__, __LINE__, (s), (a))
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_free
 | 
						|
		Frees a block allocated through <mem_alloc>.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- In the debug version of the library the function will assert if
 | 
						|
		a non-valid block is passed, like a null pointer or a block that
 | 
						|
		isn't allocated.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<mem_alloc>
 | 
						|
*/
 | 
						|
void mem_free(void *block);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_copy
 | 
						|
		Copies a a memory block.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dest - Destination.
 | 
						|
		source - Source to copy.
 | 
						|
		size - Size of the block to copy.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- This functions DOES NOT handles cases where source and
 | 
						|
		destination is overlapping.
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<mem_move>
 | 
						|
*/
 | 
						|
void mem_copy(void *dest, const void *source, unsigned size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_move
 | 
						|
		Copies a a memory block
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dest - Destination
 | 
						|
		source - Source to copy
 | 
						|
		size - Size of the block to copy
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- This functions handles cases where source and destination
 | 
						|
		is overlapping
 | 
						|
 | 
						|
	See Also:
 | 
						|
		<mem_copy>
 | 
						|
*/
 | 
						|
void mem_move(void *dest, const void *source, unsigned size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_zero
 | 
						|
		Sets a complete memory block to 0
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		block - Pointer to the block to zero out
 | 
						|
		size - Size of the block
 | 
						|
*/
 | 
						|
void mem_zero(void *block, unsigned size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_comp
 | 
						|
		Compares two blocks of memory
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - First block of data
 | 
						|
		b - Second block of data
 | 
						|
		size - Size of the data to compare
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - Block a is lesser then block b
 | 
						|
		0 - Block a is equal to block b
 | 
						|
		>0 - Block a is greater then block b
 | 
						|
*/
 | 
						|
int mem_comp(const void *a, const void *b, int size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: mem_check
 | 
						|
		Validates the heap
 | 
						|
		Will trigger a assert if memory has failed.
 | 
						|
*/
 | 
						|
int mem_check_imp();
 | 
						|
#define mem_check() dbg_assert_imp(__FILE__, __LINE__, mem_check_imp(), "Memory check failed")
 | 
						|
 | 
						|
/* Group: File IO */
 | 
						|
enum {
 | 
						|
	IOFLAG_READ = 1,
 | 
						|
	IOFLAG_WRITE = 2,
 | 
						|
	IOFLAG_RANDOM = 4,
 | 
						|
 | 
						|
	IOSEEK_START = 0,
 | 
						|
	IOSEEK_CUR = 1,
 | 
						|
	IOSEEK_END = 2
 | 
						|
};
 | 
						|
 | 
						|
typedef struct IOINTERNAL *IOHANDLE;
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_open
 | 
						|
		Opens a file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		filename - File to open.
 | 
						|
		flags - A set of flags. IOFLAG_READ, IOFLAG_WRITE, IOFLAG_RANDOM.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns a handle to the file on success and 0 on failure.
 | 
						|
 | 
						|
*/
 | 
						|
IOHANDLE io_open(const char *filename, int flags);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_read
 | 
						|
		Reads data into a buffer from a file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file to read data from.
 | 
						|
		buffer - Pointer to the buffer that will recive the data.
 | 
						|
		size - Number of bytes to read from the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes read.
 | 
						|
 | 
						|
*/
 | 
						|
unsigned io_read(IOHANDLE io, void *buffer, unsigned size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_skip
 | 
						|
		Skips data in a file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
		size - Number of bytes to skip.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes skipped.
 | 
						|
*/
 | 
						|
unsigned io_skip(IOHANDLE io, int size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_write
 | 
						|
		Writes data from a buffer to file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
		buffer - Pointer to the data that should be written.
 | 
						|
		size - Number of bytes to write.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes written.
 | 
						|
*/
 | 
						|
unsigned io_write(IOHANDLE io, const void *buffer, unsigned size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_write_newline
 | 
						|
		Writes newline to file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes written.
 | 
						|
*/
 | 
						|
unsigned io_write_newline(IOHANDLE io);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_seek
 | 
						|
		Seeks to a specified offset in the file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
		offset - Offset from pos to stop.
 | 
						|
		origin - Position to start searching from.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success.
 | 
						|
*/
 | 
						|
int io_seek(IOHANDLE io, int offset, int origin);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_tell
 | 
						|
		Gets the current position in the file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns the current position. -1L if an error occured.
 | 
						|
*/
 | 
						|
long int io_tell(IOHANDLE io);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_length
 | 
						|
		Gets the total length of the file. Resetting cursor to the beginning
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns the total size. -1L if an error occured.
 | 
						|
*/
 | 
						|
long int io_length(IOHANDLE io);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_close
 | 
						|
		Closes a file.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success.
 | 
						|
*/
 | 
						|
int io_close(IOHANDLE io);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_flush
 | 
						|
		Empties all buffers and writes all pending data.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		io - Handle to the file.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success.
 | 
						|
*/
 | 
						|
int io_flush(IOHANDLE io);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_stdin
 | 
						|
		Returns an <IOHANDLE> to the standard input.
 | 
						|
*/
 | 
						|
IOHANDLE io_stdin();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_stdout
 | 
						|
		Returns an <IOHANDLE> to the standard output.
 | 
						|
*/
 | 
						|
IOHANDLE io_stdout();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: io_stderr
 | 
						|
		Returns an <IOHANDLE> to the standard error.
 | 
						|
*/
 | 
						|
IOHANDLE io_stderr();
 | 
						|
 | 
						|
 | 
						|
/* Group: Threads */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_sleep
 | 
						|
		Suspends the current thread for a given period.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		milliseconds - Number of milliseconds to sleep.
 | 
						|
*/
 | 
						|
void thread_sleep(int milliseconds);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_create
 | 
						|
		Creates a new thread.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		threadfunc - Entry point for the new thread.
 | 
						|
		user - Pointer to pass to the thread.
 | 
						|
 | 
						|
*/
 | 
						|
void *thread_create(void (*threadfunc)(void *), void *user);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_wait
 | 
						|
		Waits for a thread to be done or destroyed.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		thread - Thread to wait for.
 | 
						|
*/
 | 
						|
void thread_wait(void *thread);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_destroy
 | 
						|
		Destroys a thread.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		thread - Thread to destroy.
 | 
						|
*/
 | 
						|
void thread_destroy(void *thread);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_yeild
 | 
						|
		Yeild the current threads execution slice.
 | 
						|
*/
 | 
						|
void thread_yield();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: thread_detach
 | 
						|
		Puts the thread in the detached thread, guaranteeing that
 | 
						|
		resources of the thread will be freed immediately when the
 | 
						|
		thread terminates.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		thread - Thread to detach
 | 
						|
*/
 | 
						|
void thread_detach(void *thread);
 | 
						|
 | 
						|
/* Group: Locks */
 | 
						|
typedef void* LOCK;
 | 
						|
 | 
						|
LOCK lock_create();
 | 
						|
void lock_destroy(LOCK lock);
 | 
						|
 | 
						|
int lock_try(LOCK lock);
 | 
						|
void lock_wait(LOCK lock);
 | 
						|
void lock_release(LOCK lock);
 | 
						|
 | 
						|
 | 
						|
/* Group: Semaphores */
 | 
						|
 | 
						|
#if !defined(CONF_PLATFORM_MACOSX)
 | 
						|
	#if defined(CONF_FAMILY_UNIX)
 | 
						|
		#include <semaphore.h>
 | 
						|
		typedef sem_t SEMAPHORE;
 | 
						|
	#elif defined(CONF_FAMILY_WINDOWS)
 | 
						|
		typedef void* SEMAPHORE;
 | 
						|
	#else
 | 
						|
		#error missing sempahore implementation
 | 
						|
	#endif
 | 
						|
 | 
						|
	void semaphore_init(SEMAPHORE *sem);
 | 
						|
	void semaphore_wait(SEMAPHORE *sem);
 | 
						|
	void semaphore_signal(SEMAPHORE *sem);
 | 
						|
	void semaphore_destroy(SEMAPHORE *sem);
 | 
						|
#endif
 | 
						|
 | 
						|
/* Group: Timer */
 | 
						|
#ifdef __GNUC__
 | 
						|
/* if compiled with -pedantic-errors it will complain about long
 | 
						|
	not being a C90 thing.
 | 
						|
*/
 | 
						|
__extension__ typedef long long int64;
 | 
						|
#else
 | 
						|
typedef long long int64;
 | 
						|
#endif
 | 
						|
/*
 | 
						|
	Function: time_get
 | 
						|
		Fetches a sample from a high resolution timer.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Current value of the timer.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		To know how fast the timer is ticking, see <time_freq>.
 | 
						|
*/
 | 
						|
int64 time_get();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: time_freq
 | 
						|
		Returns the frequency of the high resolution timer.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns the frequency of the high resolution timer.
 | 
						|
*/
 | 
						|
int64 time_freq();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: time_timestamp
 | 
						|
		Retrives the current time as a UNIX timestamp
 | 
						|
 | 
						|
	Returns:
 | 
						|
		The time as a UNIX timestamp
 | 
						|
*/
 | 
						|
int time_timestamp();
 | 
						|
 | 
						|
/* Group: Network General */
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
	int type;
 | 
						|
	int ipv4sock;
 | 
						|
	int ipv6sock;
 | 
						|
} NETSOCKET;
 | 
						|
 | 
						|
enum
 | 
						|
{
 | 
						|
	NETADDR_MAXSTRSIZE = 1+(8*4+7)+1+1+5+1, // [XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]:XXXXX
 | 
						|
 | 
						|
	NETTYPE_INVALID = 0,
 | 
						|
	NETTYPE_IPV4 = 1,
 | 
						|
	NETTYPE_IPV6 = 2,
 | 
						|
	NETTYPE_LINK_BROADCAST = 4,
 | 
						|
	NETTYPE_ALL = NETTYPE_IPV4|NETTYPE_IPV6
 | 
						|
};
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
	unsigned int type;
 | 
						|
	unsigned char ip[16];
 | 
						|
	unsigned short port;
 | 
						|
} NETADDR;
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_init
 | 
						|
		Initiates network functionallity.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success,
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		You must call this function before using any other network
 | 
						|
		functions.
 | 
						|
*/
 | 
						|
int net_init();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_host_lookup
 | 
						|
		Does a hostname lookup by name and fills out the passed
 | 
						|
		NETADDR struct with the recieved details.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		0 on success.
 | 
						|
*/
 | 
						|
int net_host_lookup(const char *hostname, NETADDR *addr, int types);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_addr_comp
 | 
						|
		Compares two network addresses.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - Address to compare
 | 
						|
		b - Address to compare to.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - Address a is lesser then address b
 | 
						|
		0 - Address a is equal to address b
 | 
						|
		>0 - Address a is greater then address b
 | 
						|
*/
 | 
						|
int net_addr_comp(const NETADDR *a, const NETADDR *b);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_addr_str
 | 
						|
		Turns a network address into a representive string.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		addr - Address to turn into a string.
 | 
						|
		string - Buffer to fill with the string.
 | 
						|
		max_length - Maximum size of the string.
 | 
						|
		add_port - add port to string or not
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The string will always be zero terminated
 | 
						|
 | 
						|
*/
 | 
						|
void net_addr_str(const NETADDR *addr, char *string, int max_length, int add_port);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_addr_from_str
 | 
						|
		Turns string into a network address.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		0 on success
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		addr - Address to fill in.
 | 
						|
		string - String to parse.
 | 
						|
*/
 | 
						|
int net_addr_from_str(NETADDR *addr, const char *string);
 | 
						|
 | 
						|
/* Group: Network UDP */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_udp_create
 | 
						|
		Creates a UDP socket and binds it to a port.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		bindaddr - Address to bind the socket to.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		On success it returns an handle to the socket. On failure it
 | 
						|
		returns NETSOCKET_INVALID.
 | 
						|
*/
 | 
						|
NETSOCKET net_udp_create(NETADDR bindaddr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_udp_send
 | 
						|
		Sends a packet over an UDP socket.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to use.
 | 
						|
		addr - Where to send the packet.
 | 
						|
		data - Pointer to the packet data to send.
 | 
						|
		size - Size of the packet.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		On success it returns the number of bytes sent. Returns -1
 | 
						|
		on error.
 | 
						|
*/
 | 
						|
int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_udp_recv
 | 
						|
		Recives a packet over an UDP socket.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to use.
 | 
						|
		addr - Pointer to an NETADDR that will recive the address.
 | 
						|
		data - Pointer to a buffer that will recive the data.
 | 
						|
		maxsize - Maximum size to recive.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		On success it returns the number of bytes recived. Returns -1
 | 
						|
		on error.
 | 
						|
*/
 | 
						|
int net_udp_recv(NETSOCKET sock, NETADDR *addr, void *data, int maxsize);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_udp_close
 | 
						|
		Closes an UDP socket.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to close.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success. -1 on error.
 | 
						|
*/
 | 
						|
int net_udp_close(NETSOCKET sock);
 | 
						|
 | 
						|
 | 
						|
/* Group: Network TCP */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_create
 | 
						|
		Creates a TCP socket.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		bindaddr - Address to bind the socket to.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		On success it returns an handle to the socket. On failure it returns NETSOCKET_INVALID.
 | 
						|
*/
 | 
						|
NETSOCKET net_tcp_create(NETADDR bindaddr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_listen
 | 
						|
		Makes the socket start listening for new connections.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to start listen to.
 | 
						|
		backlog - Size of the queue of incomming connections to keep.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success.
 | 
						|
*/
 | 
						|
int net_tcp_listen(NETSOCKET sock, int backlog);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_accept
 | 
						|
		Polls a listning socket for a new connection.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Listning socket to poll.
 | 
						|
		new_sock - Pointer to a socket to fill in with the new socket.
 | 
						|
		addr - Pointer to an address that will be filled in the remote address (optional, can be NULL).
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns a non-negative integer on success. Negative integer on failure.
 | 
						|
*/
 | 
						|
int net_tcp_accept(NETSOCKET sock, NETSOCKET *new_sock, NETADDR *addr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_connect
 | 
						|
		Connects one socket to another.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to connect.
 | 
						|
		addr - Address to connect to.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success.
 | 
						|
 | 
						|
*/
 | 
						|
int net_tcp_connect(NETSOCKET sock, const NETADDR *addr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_send
 | 
						|
		Sends data to a TCP stream.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to send data to.
 | 
						|
		data - Pointer to the data to send.
 | 
						|
		size - Size of the data to send.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes sent. Negative value on failure.
 | 
						|
*/
 | 
						|
int net_tcp_send(NETSOCKET sock, const void *data, int size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_recv
 | 
						|
		Recvives data from a TCP stream.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to recvive data from.
 | 
						|
		data - Pointer to a buffer to write the data to
 | 
						|
		max_size - Maximum of data to write to the buffer.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes recvived. Negative value on failure. When in
 | 
						|
		non-blocking mode, it returns 0 when there is no more data to
 | 
						|
		be fetched.
 | 
						|
*/
 | 
						|
int net_tcp_recv(NETSOCKET sock, void *data, int maxsize);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_close
 | 
						|
		Closes a TCP socket.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		sock - Socket to close.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success. Negative value on failure.
 | 
						|
*/
 | 
						|
int net_tcp_close(NETSOCKET sock);
 | 
						|
 | 
						|
/* Group: Strings */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_append
 | 
						|
		Appends a string to another.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dst - Pointer to a buffer that contains a string.
 | 
						|
		src - String to append.
 | 
						|
		dst_size - Size of the buffer of the dst string.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
		- Garantees that dst string will contain zero-termination.
 | 
						|
*/
 | 
						|
void str_append(char *dst, const char *src, int dst_size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_copy
 | 
						|
		Copies a string to another.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dst - Pointer to a buffer that shall recive the string.
 | 
						|
		src - String to be copied.
 | 
						|
		dst_size - Size of the buffer dst.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
		- Garantees that dst string will contain zero-termination.
 | 
						|
*/
 | 
						|
void str_copy(char *dst, const char *src, int dst_size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_length
 | 
						|
		Returns the length of a zero terminated string.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - Pointer to the string.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Length of string in bytes excluding the zero termination.
 | 
						|
*/
 | 
						|
int str_length(const char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_format
 | 
						|
		Performs printf formating into a buffer.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		buffer - Pointer to the buffer to recive the formated string.
 | 
						|
		buffer_size - Size of the buffer.
 | 
						|
		format - printf formating string.
 | 
						|
		... - Parameters for the formating.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- See the C manual for syntax for the printf formating string.
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
		- Garantees that dst string will contain zero-termination.
 | 
						|
*/
 | 
						|
void str_format(char *buffer, int buffer_size, const char *format, ...);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_sanitize_strong
 | 
						|
		Replaces all characters below 32 and above 127 with whitespace.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - String to sanitize.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
void str_sanitize_strong(char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_sanitize_cc
 | 
						|
		Replaces all characters below 32 with whitespace.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - String to sanitize.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
void str_sanitize_cc(char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_sanitize
 | 
						|
		Replaces all characters below 32 with whitespace with
 | 
						|
		exception to \t, \n and \r.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - String to sanitize.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
void str_sanitize(char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_skip_to_whitespace
 | 
						|
		Skips leading non-whitespace characters(all but ' ', '\t', '\n', '\r').
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - Pointer to the string.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Pointer to the first whitespace character found
 | 
						|
		within the string.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
char *str_skip_to_whitespace(char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_skip_whitespaces
 | 
						|
		Skips leading whitespace characters(' ', '\t', '\n', '\r').
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - Pointer to the string.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Pointer to the first non-whitespace character found
 | 
						|
		within the string.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
char *str_skip_whitespaces(char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_comp_nocase
 | 
						|
		Compares to strings case insensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - String to compare.
 | 
						|
		b - String to compare.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - String a is lesser then string b
 | 
						|
		0 - String a is equal to string b
 | 
						|
		>0 - String a is greater then string b
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Only garanted to work with a-z/A-Z.
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
int str_comp_nocase(const char *a, const char *b);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_comp_nocase_num
 | 
						|
		Compares up to num characters of two strings case insensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - String to compare.
 | 
						|
		b - String to compare.
 | 
						|
		num - Maximum characters to compare
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - String a is lesser than string b
 | 
						|
		0 - String a is equal to string b
 | 
						|
		>0 - String a is greater than string b
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Only garanted to work with a-z/A-Z.
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
int str_comp_nocase_num(const char *a, const char *b, const int num);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_comp
 | 
						|
		Compares to strings case sensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - String to compare.
 | 
						|
		b - String to compare.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - String a is lesser then string b
 | 
						|
		0 - String a is equal to string b
 | 
						|
		>0 - String a is greater then string b
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
int str_comp(const char *a, const char *b);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_comp_num
 | 
						|
		Compares up to num characters of two strings case sensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - String to compare.
 | 
						|
		b - String to compare.
 | 
						|
		num - Maximum characters to compare
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - String a is lesser then string b
 | 
						|
		0 - String a is equal to string b
 | 
						|
		>0 - String a is greater then string b
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
int str_comp_num(const char *a, const char *b, const int num);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_comp_filenames
 | 
						|
		Compares two strings case sensitive, digit chars will be compared as numbers.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		a - String to compare.
 | 
						|
		b - String to compare.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		<0 - String a is lesser then string b
 | 
						|
		0 - String a is equal to string b
 | 
						|
		>0 - String a is greater then string b
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
int str_comp_filenames(const char *a, const char *b);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_find_nocase
 | 
						|
		Finds a string inside another string case insensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		haystack - String to search in
 | 
						|
		needle - String to search for
 | 
						|
 | 
						|
	Returns:
 | 
						|
		A pointer into haystack where the needle was found.
 | 
						|
		Returns NULL of needle could not be found.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Only garanted to work with a-z/A-Z.
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
const char *str_find_nocase(const char *haystack, const char *needle);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_find
 | 
						|
		Finds a string inside another string case sensitive.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		haystack - String to search in
 | 
						|
		needle - String to search for
 | 
						|
 | 
						|
	Returns:
 | 
						|
		A pointer into haystack where the needle was found.
 | 
						|
		Returns NULL of needle could not be found.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-termineted strings.
 | 
						|
*/
 | 
						|
const char *str_find(const char *haystack, const char *needle);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_hex
 | 
						|
		Takes a datablock and generates a hexstring of it.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dst - Buffer to fill with hex data
 | 
						|
		dst_size - size of the buffer
 | 
						|
		data - Data to turn into hex
 | 
						|
		data - Size of the data
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The desination buffer will be zero-terminated
 | 
						|
*/
 | 
						|
void str_hex(char *dst, int dst_size, const void *data, int data_size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_timestamp
 | 
						|
		Copies a time stamp in the format year-month-day_hour-minute-second to the string.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		buffer - Pointer to a buffer that shall receive the time stamp string.
 | 
						|
		buffer_size - Size of the buffer.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Guarantees that buffer string will contain zero-termination.
 | 
						|
*/
 | 
						|
void str_timestamp(char *buffer, int buffer_size);
 | 
						|
 | 
						|
/* Group: Filesystem */
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_listdir
 | 
						|
		Lists the files in a directory
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		dir - Directory to list
 | 
						|
		cb - Callback function to call for each entry
 | 
						|
		type - Type of the directory
 | 
						|
		user - Pointer to give to the callback
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Always returns 0.
 | 
						|
*/
 | 
						|
typedef int (*FS_LISTDIR_CALLBACK)(const char *name, int is_dir, int dir_type, void *user);
 | 
						|
int fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_makedir
 | 
						|
		Creates a directory
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		path - Directory to create
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success. Negative value on failure.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		Does not create several directories if needed. "a/b/c" will result
 | 
						|
		in a failure if b or a does not exist.
 | 
						|
*/
 | 
						|
int fs_makedir(const char *path);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_storage_path
 | 
						|
		Fetches per user configuration directory.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success. Negative value on failure.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Returns ~/.appname on UNIX based systems
 | 
						|
		- Returns ~/Library/Applications Support/appname on Mac OS X
 | 
						|
		- Returns %APPDATA%/Appname on Windows based systems
 | 
						|
*/
 | 
						|
int fs_storage_path(const char *appname, char *path, int max);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_is_dir
 | 
						|
		Checks if directory exists
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 1 on success, 0 on failure.
 | 
						|
*/
 | 
						|
int fs_is_dir(const char *path);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_chdir
 | 
						|
		Changes current working directory
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success, 1 on failure.
 | 
						|
*/
 | 
						|
int fs_chdir(const char *path);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_getcwd
 | 
						|
		Gets the current working directory.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns a pointer to the buffer on success, 0 on failure.
 | 
						|
*/
 | 
						|
char *fs_getcwd(char *buffer, int buffer_size);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_parent_dir
 | 
						|
		Get the parent directory of a directory
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		path - The directory string
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success, 1 on failure.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The string is treated as zero-termineted string.
 | 
						|
*/
 | 
						|
int fs_parent_dir(char *path);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_remove
 | 
						|
		Deletes the file with the specified name.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		filename - The file to delete
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success, 1 on failure.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-terminated strings.
 | 
						|
*/
 | 
						|
int fs_remove(const char *filename);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: fs_rename
 | 
						|
		Renames the file or directory. If the paths differ the file will be moved.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		oldname - The actual name
 | 
						|
		newname - The new name
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Returns 0 on success, 1 on failure.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The strings are treated as zero-terminated strings.
 | 
						|
*/
 | 
						|
int fs_rename(const char *oldname, const char *newname);
 | 
						|
 | 
						|
/*
 | 
						|
	Group: Undocumented
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_tcp_connect_non_blocking
 | 
						|
 | 
						|
	DOCTODO: serp
 | 
						|
*/
 | 
						|
int net_tcp_connect_non_blocking(NETSOCKET sock, NETADDR bindaddr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_set_non_blocking
 | 
						|
 | 
						|
	DOCTODO: serp
 | 
						|
*/
 | 
						|
int net_set_non_blocking(NETSOCKET sock);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_set_non_blocking
 | 
						|
 | 
						|
	DOCTODO: serp
 | 
						|
*/
 | 
						|
int net_set_blocking(NETSOCKET sock);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_errno
 | 
						|
 | 
						|
	DOCTODO: serp
 | 
						|
*/
 | 
						|
int net_errno();
 | 
						|
 | 
						|
/*
 | 
						|
	Function: net_would_block
 | 
						|
 | 
						|
	DOCTODO: serp
 | 
						|
*/
 | 
						|
int net_would_block();
 | 
						|
 | 
						|
int net_socket_read_wait(NETSOCKET sock, int time);
 | 
						|
 | 
						|
void mem_debug_dump(IOHANDLE file);
 | 
						|
 | 
						|
void swap_endian(void *data, unsigned elem_size, unsigned num);
 | 
						|
 | 
						|
 | 
						|
typedef void (*DBG_LOGGER)(const char *line);
 | 
						|
void dbg_logger(DBG_LOGGER logger);
 | 
						|
 | 
						|
void dbg_logger_stdout();
 | 
						|
void dbg_logger_debugger();
 | 
						|
void dbg_logger_file(const char *filename);
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
	int allocated;
 | 
						|
	int active_allocations;
 | 
						|
	int total_allocations;
 | 
						|
} MEMSTATS;
 | 
						|
 | 
						|
const MEMSTATS *mem_stats();
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
	int sent_packets;
 | 
						|
	int sent_bytes;
 | 
						|
	int recv_packets;
 | 
						|
	int recv_bytes;
 | 
						|
} NETSTATS;
 | 
						|
 | 
						|
 | 
						|
void net_stats(NETSTATS *stats);
 | 
						|
 | 
						|
int str_toint(const char *str);
 | 
						|
float str_tofloat(const char *str);
 | 
						|
int str_isspace(char c);
 | 
						|
char str_uppercase(char c);
 | 
						|
unsigned str_quickhash(const char *str);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: gui_messagebox
 | 
						|
		Display plain OS-dependent message box
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		title - title of the message box
 | 
						|
		message - text to display
 | 
						|
*/
 | 
						|
void gui_messagebox(const char *title, const char *message);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_utf8_rewind
 | 
						|
		Moves a cursor backwards in an utf8 string
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - utf8 string
 | 
						|
		cursor - position in the string
 | 
						|
 | 
						|
	Returns:
 | 
						|
		New cursor position.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Won't move the cursor less then 0
 | 
						|
*/
 | 
						|
int str_utf8_rewind(const char *str, int cursor);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_utf8_forward
 | 
						|
		Moves a cursor forwards in an utf8 string
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - utf8 string
 | 
						|
		cursor - position in the string
 | 
						|
 | 
						|
	Returns:
 | 
						|
		New cursor position.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Won't move the cursor beyond the zero termination marker
 | 
						|
*/
 | 
						|
int str_utf8_forward(const char *str, int cursor);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_utf8_decode
 | 
						|
		Decodes an utf8 character
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		ptr - pointer to an utf8 string. this pointer will be moved forward
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Unicode value for the character. -1 for invalid characters and 0 for end of string.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- This function will also move the pointer forward.
 | 
						|
*/
 | 
						|
int str_utf8_decode(const char **ptr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_utf8_encode
 | 
						|
		Encode an utf8 character
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		ptr - Pointer to a buffer that should recive the data. Should be able to hold at least 4 bytes.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		Number of bytes put into the buffer.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- Does not do zero termination of the string.
 | 
						|
*/
 | 
						|
int str_utf8_encode(char *ptr, int chr);
 | 
						|
 | 
						|
/*
 | 
						|
	Function: str_utf8_check
 | 
						|
		Checks if a strings contains just valid utf8 characters.
 | 
						|
 | 
						|
	Parameters:
 | 
						|
		str - Pointer to a possible utf8 string.
 | 
						|
 | 
						|
	Returns:
 | 
						|
		0 - invalid characters found.
 | 
						|
		1 - only valid characters found.
 | 
						|
 | 
						|
	Remarks:
 | 
						|
		- The string is treated as zero-terminated utf8 string.
 | 
						|
*/
 | 
						|
int str_utf8_check(const char *str);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |