#include <sys/types.h>
Go to the source code of this file.
Data Structures | |
| struct | _GGZListEntry |
| A single entry in a GGZList. More... | |
| struct | _GGZList |
| Simple doubly-linked list. More... | |
| struct | _GGZXMLElement |
| Object representing a single XML element. More... | |
| struct | hash_t |
| Hash data structure. More... | |
Defines | |
| #define | LIBGGZ_VERSION_MAJOR 0 |
| #define | LIBGGZ_VERSION_MINOR 0 |
| #define | LIBGGZ_VERSION_MICRO 14 |
| #define | LIBGGZ_VERSION_IFACE "5:0:3" |
| #define | ggz__attribute(att) |
| Allow easy use of GCC's "attribute" macro for debugging. | |
| #define | _GGZFUNCTION_ __FUNCTION__ |
| #define | GGZ_MEM_DEBUG "ggz_mem" |
| Debugging type for memory debugging. | |
| #define | ggz_malloc(size) _ggz_malloc(size, _GGZFUNCTION_ " in " __FILE__, __LINE__) |
| Macro for memory allocation. | |
| #define | ggz_realloc(mem, size) _ggz_realloc(mem, size, _GGZFUNCTION_ " in " __FILE__, __LINE__) |
| Macro for resizing previously allocated memory. | |
| #define | ggz_free(mem) _ggz_free(mem, _GGZFUNCTION_ " in " __FILE__, __LINE__) |
| Macro for freeing memory previously allocated. | |
| #define | ggz_strdup(string) _ggz_strdup(string, _GGZFUNCTION_ " in " __FILE__, __LINE__) |
| Macro for duplicating string. | |
| #define | GGZ_CONF_DEBUG "ggz_conf" |
| Debugging type for config-file debugging. | |
| #define | GGZ_LIST_REPLACE_DUPS 0x00 |
| Overwrite duplicate values on insert. | |
| #define | GGZ_LIST_ALLOW_DUPS 0x01 |
| Allow duplicate data entries to exist in the list. | |
| #define | GGZ_SOCKET_DEBUG "socket" |
| ggz_debug debugging type for Easysock debugging. | |
Typedefs | |
| typedef int(*) | ggzEntryCompare (const void *a, const void *b) |
| A function type for doing data comparison on two items in a GGZList. | |
| typedef void *(*) | ggzEntryCreate (void *data) |
| A function type for creating a copy of a data item for insertion into a GGZList. | |
| typedef void(*) | ggzEntryDestroy (void *data) |
| A function type to destroy an entry in a GGZList. | |
| typedef _GGZListEntry | GGZListEntry |
| A single entry in a GGZList. | |
| typedef _GGZList | GGZList |
| Simple doubly-linked list. | |
| typedef _GGZList | GGZStack |
| Simple implementation of stacks using GGZList. | |
| typedef _GGZXMLElement | GGZXMLElement |
| Object representing a single XML element. | |
| typedef void(*) | GGZDebugHandlerFunc (int priority, const char *msg) |
| A callback function to handle debugging output. | |
| typedef _GGZFile | GGZFile |
| Structure used internally by ggz_read_line(). | |
| typedef void(*) | ggzIOError (const char *msg, const GGZIOType type, const int fd, const GGZDataType data) |
| An error function type. | |
| typedef void(*) | ggzIOExit (int status) |
| An exit function type. | |
| typedef void(*) | ggzNetworkNotify (const char *address, int socket) |
| A network resolver function type. | |
Enumerations | |
| enum | GGZConfType { GGZ_CONF_RDONLY = ((unsigned char) 0x01), GGZ_CONF_RDWR = ((unsigned char) 0x02), GGZ_CONF_CREATE = ((unsigned char) 0x04) } |
| Specifies the mode for opening a configuration file. More... | |
| enum | GGZCheckType { GGZ_CHECK_NONE = 0x00, GGZ_CHECK_MEM = 0x01 } |
| What memory checks should we do? More... | |
| enum | GGZIOType { GGZ_IO_CREATE, GGZ_IO_READ, GGZ_IO_WRITE, GGZ_IO_ALLOCATE } |
| An error type for the GGZ socket functions. More... | |
| enum | GGZDataType { GGZ_DATA_NONE, GGZ_DATA_CHAR, GGZ_DATA_INT, GGZ_DATA_STRING, GGZ_DATA_FD } |
| A data type for the GGZ socket function error handler. More... | |
| enum | GGZSockType { GGZ_SOCK_SERVER, GGZ_SOCK_CLIENT } |
| A socket type. More... | |
| enum | GGZTLSType { GGZ_TLS_CLIENT, GGZ_TLS_SERVER } |
| TLS operation mode. More... | |
| enum | GGZTLSVerificationType { GGZ_TLS_VERIFY_NONE, GGZ_TLS_VERIFY_PEER } |
| TLS verification type. More... | |
Functions | |
| void * | _ggz_malloc (const size_t size, const char *tag, int line) |
| Function to actually perform memory allocation. | |
| void * | _ggz_realloc (const void *ptr, const size_t size, const char *tag, int line) ggz__attribute((warn_unused_result)) |
| Function to perform memory reallocation. | |
| int | _ggz_free (const void *ptr, const char *tag, int line) |
| Function to free allocated memory. | |
| char * | _ggz_strdup (const char *ptr, const char *tag, int line) ggz__attribute((warn_unused_result)) |
| Function to copy a string. | |
| char * | ggz_strncpy (char *dst, const char *src, size_t n) |
| Safe version of strncpy. | |
| int | ggz_memory_check (void) |
| Check memory allocated against memory freed and display any discrepancies. | |
| void | ggz_conf_cleanup (void) |
| Closes all open configuration files. | |
| void | ggz_conf_close (int handle) |
| Closes one configuration file. | |
| int | ggz_conf_parse (const char *path, const GGZConfType options) |
| Opens a configuration file and parses the variables so they can be retrieved with the access functions. | |
| int | ggz_conf_commit (int handle) |
| Commits any changed variables to the configuration file. | |
| int | ggz_conf_write_string (int handle, const char *section, const char *key, const char *value) |
| Writes a string value to a section and key in an open configuration file. | |
| int | ggz_conf_write_int (int handle, const char *section, const char *key, int value) |
| Writes an integer value to a section and key in an open configuration file. | |
| int | ggz_conf_write_list (int handle, const char *section, const char *key, int argc, char **argv) |
| Writes a list of string values to a section and key in an open configuration file. | |
| char * | ggz_conf_read_string (int handle, const char *section, const char *key, const char *def) |
| Reads a string value from an open configuration file. | |
| int | ggz_conf_read_int (int handle, const char *section, const char *key, int def) |
| Reads an integer value from an open configuration file. | |
| int | ggz_conf_read_list (int handle, const char *section, const char *key, int *argcp, char ***argvp) |
| Reads a list of string values from an open configuration file. | |
| int | ggz_conf_remove_section (int handle, const char *section) |
| This will remove an entire section and all its associated keys from a configuration file. | |
| int | ggz_conf_remove_key (int handle, const char *section, const char *key) |
| This will remove a single key from a configuration file. | |
| int | ggz_conf_get_sections (int handle, int *argcp, char ***argvp) |
| This function returns a list of all sections in a config file. | |
| int | ggz_conf_get_keys (int handle, const char *section, int *argcp, char ***argvp) |
| This function returns a list of all keys within a section in a config file. | |
| GGZList * | ggz_list_create (ggzEntryCompare compare_func, ggzEntryCreate create_func, ggzEntryDestroy destroy_func, int options) |
| Create a new GGZList. | |
| int | ggz_list_insert (GGZList *list, void *data) |
| Insert data into a list. | |
| GGZListEntry * | ggz_list_head (GGZList *list) |
| Get the first node of a list. | |
| GGZListEntry * | ggz_list_tail (GGZList *list) |
| Get the last node of a list. | |
| GGZListEntry * | ggz_list_next (GGZListEntry *entry) |
| Get the next node of a list. | |
| GGZListEntry * | ggz_list_prev (GGZListEntry *entry) |
| Get the previous node of a list. | |
| void * | ggz_list_get_data (GGZListEntry *entry) |
| Retrieve the data stored in a list entry. | |
| GGZListEntry * | ggz_list_search (GGZList *list, void *data) |
| Search for a specified data item in the list. | |
| GGZListEntry * | ggz_list_search_alt (GGZList *list, void *data, ggzEntryCompare compare_func) |
| Search for a specified data item in the list using a provided comparison function. | |
| void | ggz_list_delete_entry (GGZList *list, GGZListEntry *entry) |
| Removes an entry from a list, calling a destructor if registered. | |
| void | ggz_list_free (GGZList *list) |
| Free all resources associated with a list. | |
| int | ggz_list_count (GGZList *list) |
| Get the length of the list. | |
| int | ggz_list_compare_str (void *a, void *b) |
| Compare two character strings. | |
| void * | ggz_list_create_str (void *data) |
| Copy a character string. | |
| void | ggz_list_destroy_str (void *data) |
| Free a character string. | |
| GGZStack * | ggz_stack_new (void) |
| Create a new stack. | |
| void | ggz_stack_push (GGZStack *stack, void *data) |
| Push a data item onto the top of the stack. | |
| void * | ggz_stack_pop (GGZStack *stack) |
| Pop the top item off of the stack. | |
| void * | ggz_stack_top (GGZStack *stack) |
| Get the top item on the stack without popping it. | |
| void | ggz_stack_free (GGZStack *stack) |
| Free the stack. | |
| GGZXMLElement * | ggz_xmlelement_new (const char *tag, const char *const *attrs, void(*process)(void *, GGZXMLElement *), void(*free)(GGZXMLElement *)) |
| Create a new GGZXMLElement element. | |
| void | ggz_xmlelement_init (GGZXMLElement *element, const char *tag, const char *const *attrs, void(*process)(void *, GGZXMLElement *), void(*free)(GGZXMLElement *)) |
| Initialize a GGZXMLElement. | |
| void | ggz_xmlelement_set_data (GGZXMLElement *element, void *data) |
| Set ancillary data on a GGZXMLElement object. | |
| const char * | ggz_xmlelement_get_tag (GGZXMLElement *element) |
| Get an XML element's name. | |
| const char * | ggz_xmlelement_get_attr (GGZXMLElement *element, const char *attr) |
| Get the value of an attribute on XML element. | |
| void * | ggz_xmlelement_get_data (GGZXMLElement *element) |
| Get the user-supplied data associated with an XML element. | |
| char * | ggz_xmlelement_get_text (GGZXMLElement *element) |
| Get an XML element's content text. | |
| void | ggz_xmlelement_add_text (GGZXMLElement *element, const char *text, int len) |
| Append a string to the element's content text. | |
| void | ggz_xmlelement_free (GGZXMLElement *element) |
| Free the memory associated with an XML element. | |
| void | ggz_debug_init (const char **types, const char *file) |
| Initialize and configure debugging for the program. | |
| GGZDebugHandlerFunc | ggz_debug_set_func (GGZDebugHandlerFunc func) |
| Set the debug handler function. | |
| void | ggz_debug_enable (const char *type) |
| Enable a specific type of debugging. | |
| void | ggz_debug_disable (const char *type) |
| Disable a specific type of debugging. | |
| void | ggz_debug (const char *type, const char *fmt,...) ggz__attribute((format(printf |
| Log a debugging message. | |
| void void | ggz_log (const char *type, const char *fmt,...) ggz__attribute((format(printf |
| Log a notice message. | |
| void void void | ggz_error_sys (const char *fmt,...) ggz__attribute((format(printf |
| Log a syscall error. | |
| void void void void | ggz_error_sys_exit (const char *fmt,...) ggz__attribute((format(printf |
| Log a fatal syscall error. | |
| void void void void | ggz__attribute ((noreturn)) |
| void | ggz_error_msg (const char *fmt,...) ggz__attribute((format(printf |
| Log an error message. | |
| void void | ggz_error_msg_exit (const char *fmt,...) ggz__attribute((format(printf |
| Log a fatal error message. | |
| void | ggz_debug_cleanup (GGZCheckType check) |
| Cleans up debugging state and prepares for exit. | |
| char * | ggz_xml_escape (const char *str) |
| Escape XML characters in a text string. | |
| char * | ggz_xml_unescape (const char *str) |
| Restore escaped XML characters into a text string. | |
| GGZFile * | ggz_get_file_struct (int fdes) |
| Setup a file structure to use with ggz_read_line(). | |
| int | ggz_make_path (const char *full) |
| Create directories to fill out a path. | |
| char * | ggz_read_line (GGZFile *file) |
| Read a line of arbitrary length from a file. | |
| void | ggz_free_file_struct (GGZFile *file) |
| Deallocate a file structure allocated via ggz_get_file_struct(). | |
| int | ggz_strcmp (const char *s1, const char *s2) |
| String comparison function that is safe with NULLs. | |
| int | ggz_strcasecmp (const char *s1, const char *s2) |
| Case-insensitive string comparison function that is safe with NULLs The function returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2. | |
| int | ggz_set_io_error_func (ggzIOError func) |
| Set the ggz/easysock error handling function. | |
| ggzIOError | ggz_remove_io_error_func (void) |
| Remove the ggz/easysock error handling function. | |
| int | ggz_set_io_exit_func (ggzIOExit func) |
| Set the ggz/easysock exit function. | |
| ggzIOExit | ggz_remove_io_exit_func (void) |
| Remove the ggz/easysock exit function. | |
| unsigned int | ggz_get_io_alloc_limit (void) |
| Get libggz's limit on memory allocation. | |
| unsigned int | ggz_set_io_alloc_limit (const unsigned int limit) |
| Set libggz's limit on memory allocation. | |
| int | ggz_init_network (void) |
| Initialize the network. | |
| int | ggz_set_network_notify_func (ggzNetworkNotify func) |
| Set the ggz/easysock resolver notification function. | |
| const char * | ggz_resolvename (const char *name) |
| Resolve a host name. | |
| const char * | ggz_getpeername (int fd, int resolve) |
| Get the IP address or host name of a connected peer. | |
| int | ggz_make_socket (const GGZSockType type, const unsigned short port, const char *server) |
| Make a socket connection. | |
| int | ggz_make_socket_or_die (const GGZSockType type, const unsigned short port, const char *server) |
| Make a socket connection, exiting on error. | |
| int | ggz_make_unix_socket (const GGZSockType type, const char *name) |
| Connect to a unix domain socket. | |
| int | ggz_make_unix_socket_or_die (const GGZSockType type, const char *name) |
| Connect to a unix domain socket, exiting on error. | |
| int | ggz_write_char (const int sock, const char data) |
| Write a character value to the given socket. | |
| void | ggz_write_char_or_die (const int sock, const char data) |
| Write a character value to the given socket, exiting on error. | |
| int | ggz_read_char (const int sock, char *data) |
| Read a character value from the given socket. | |
| void | ggz_read_char_or_die (const int sock, char *data) |
| Read a character value from the given socket, exiting on error. | |
| int | ggz_write_int (const int sock, const int data) |
| Write an integer to the socket in network byte order. | |
| void | ggz_write_int_or_die (const int sock, const int data) |
| Write an integer to the socket, exiting on error. | |
| int | ggz_read_int (const int sock, int *data) |
| Read an integer from the socket in network byte order. | |
| void | ggz_read_int_or_die (const int sock, int *data) |
| Read an integer from the socket, exiting on error. | |
| int | ggz_write_string (const int sock, const char *data) |
| Write a string to the given socket. | |
| void | ggz_write_string_or_die (const int sock, const char *data) |
| Write a string to the given socket, exiting on error. | |
| int | ggz_va_write_string (const int sock, const char *fmt,...) ggz__attribute((format(printf |
| Write a printf-style formatted string to the given socket. | |
| int void | ggz_va_write_string_or_die (const int sock, const char *fmt,...) ggz__attribute((format(printf |
| Write a formatted string to the socket, exiting on error. | |
| int void int | ggz_read_string (const int sock, char *data, const unsigned int len) |
| Read a string from the given socket. | |
| void | ggz_read_string_or_die (const int sock, char *data, const unsigned int len) |
| Read a string from the given socket, exiting on error. | |
| int | ggz_read_string_alloc (const int sock, char **data) |
| Read and allocate a string from the given socket. | |
| void | ggz_read_string_alloc_or_die (const int sock, char **data) |
| Read and allocate string from the given socket, exiting on error. | |
| int | ggz_write_fd (const int sock, int sendfd) |
| Write a file descriptor to the given (local) socket. | |
| int | ggz_read_fd (const int sock, int *recvfd) |
| Read a file descriptor from the given (local) socket. | |
| int | ggz_writen (const int sock, const void *vdata, size_t n) |
| Write a sequence of bytes to the socket. | |
| int | ggz_readn (const int sock, void *data, size_t n) |
| Read a sequence of bytes from the socket. | |
| hash_t | ggz_hash_create (const char *algo, const char *text) |
| Create a hash over a text. | |
| hash_t | ggz_hmac_create (const char *algo, const char *text, const char *secret) |
| Create a HMAC hash over a text. | |
| char * | ggz_base16_encode (const char *text, int length) |
| Encodes text to base16. | |
| char * | ggz_base64_encode (const char *text, int length) |
| Encodes text to base64. | |
| char * | ggz_base64_decode (const char *text, int length) |
| Decodes text from base64. | |
| void | ggz_tls_init (const char *certfile, const char *keyfile, const char *password) |
| Initialize TLS support on the server side. | |
| int | ggz_tls_support_query (void) |
| Check TLS support. | |
| const char * | ggz_tls_support_name (void) |
| Name of the TLS implementation. | |
| int | ggz_tls_enable_fd (int fdes, GGZTLSType whoami, GGZTLSVerificationType verify) |
| Enable TLS for a file descriptor. | |
| int | ggz_tls_disable_fd (int fdes) |
| Disable TLS for a file descriptor. | |
| size_t | ggz_tls_write (int fd, void *ptr, size_t n) |
| Write some bytes to a secured file descriptor. | |
| size_t | ggz_tls_read (int fd, void *ptr, size_t n) |
| Read from a secured file descriptor. | |
Hendricks
Copyright (C) 2001 Brent Hendricks.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library 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 Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
| #define ggz__attribute | ( | att | ) |
Allow easy use of GCC's "attribute" macro for debugging.
Under gcc, we use the __attribute__ macro to check variadic arguments, for instance to printf-style functions. Other compilers may be able to do something similar, but this is generally unnecessary since it's only realy purpose is to give warning messages when the developer compiles the code.
1.5.1