References a divisor in s_decimal_powbase.
unsigned tabidx
Returns index into table s_decimal_powbase.
static inline unsigned tableindex_decimalpowbase( uint32_t bigintsize )
Returns index into table s_decimal_powbase.
static inline unsigned tableindexfromdecsize_decimalpowbase( uint32_t decsize )
Returns size in bytes of csvfilereader_t.tablevalues.
static inline size_t tablesize_csvfilereader( csvfilereader_t * csvfile )
Table of strings indexing memory mapped file.
struct string_t * tablevalues/*[nrrows][nrcolumns]*/
Inline implementation of maincontext_t.tcontext_maincontext.
#define tcontext_maincontext( ) (sys_context_threadtls())
Returns threadcontext_t of the current thread.
threadcontext_t * tcontext_maincontext( void )
Tests CONDITION and jumps to label ONABORT in case of false.
#define TEST( CONDITION ) if ( !(CONDITION) ) { logfailed_unittest(__FILE__, __LINE__, 0); goto ONABORT; }
Test call functions of mm_t.
static int test_call( void )
Static initializer.
#define test_errortimer_FREE { 0, 0 }
Holds a timer value and an error code.
struct test_errortimer_t
Evaluate f(a = 77617, b = 33096)
static int test_example1( void )
static int test_fromutf8( void )
Tests generic functions of iobj_t.
static int test_generic( void )
Tests lifetime functions of iobj_t.
static int test_initfree( void )
Test runall_syncrun with all possible state transitions.
static int test_run( void )
Test correct variable values of a single thread in every posible state.
static int test_run2( void )
Implements adapter for type testobject_t.
struct testadapt_t
Element which is interconnected to a buddy with buddy.
struct testelem_t
Describes the header of an allocated memory block.
struct testmm_block_t
Static initializer.
#define testmm_FREE { 0, 0 }
Holds one big data block consisting of many vm memory pages.
struct testmm_page_t
Test memory manager for allocating/freeing blocks of memory.
struct testmm_t
Table of imlemented functions.
struct testmodule_functable_t
Tests (CMP FCTCALL) jumps to label ONABORT in case of false.
#define TESTP( PRIx, CMP, FCTCALL ) { typeof(FCTCALL) _r = FCTCALL; if ( !(CMP _r) ) { logfailedunexpected_unittest( __FILE__, __LINE__, "%" PRIx, _r); goto ONABORT; } }
Contains list of textresource_text_t.
slist_t textlist
Static initializer.
#define textpos_FREE { 0, 0, 0 }
Static initializer.
#define textpos_INIT { 0, 1, 0 }
Describes position in text as column and line number.
struct textpos_t
Implements utf8reader_t.textpos_utf8reader.
#define textpos_utf8reader( utfread ) (&(utfread)->pos)
Returns the current textposition from utfread.
const textpos_t * textpos_utf8reader( const utf8reader_t * utfread )
A condition which selects or deselects the contained textresource_textatom_t.
struct textresource_condition_t
Static initializer.
#define textresource_FREE { 0, 0, 0, slist_INIT, slist_INIT, outconfig_FREE }
Static initializer.
#define textresource_langref_INIT( language ) { slist_INIT, 0, (language) }
A reference to a language and container for one or more textresource_condition_t.
struct textresource_langref_t
Static initializer.
#define textresource_language_INIT( name ) { string_INIT(name->size, name->addr), 0 }
A language selector for textresource_text_t.
struct textresource_language_t
Static initializer.
#define textresource_parameter_FREE { arraystf_node_INIT(0,0), 0, 0, typemodifier_PLAIN }
A parameter for textresource_text_t.
struct textresource_parameter_t
Static initializer.
#define textresource_paramtype_INIT( cstr, modifier, format ) textresource_paramtype_INIT2(cstr,modifier,format,"")
struct textresource_paramtype_t
Static initializer.
#define textresource_reader_FREE { textresource_FREE, utf8reader_FREE } ;
Reads textual representation of text resource.
struct textresource_reader_t
Defines memory representation of parsed text resource description.
struct textresource_t
A single text resource description.
struct textresource_text_t
Static initializer.
#define textresource_textatom_INIT( string ) { 0, textresource_textatom_STRING, { string } }
Static initializer.
#define textresource_textatom_INIT_FCTPARAM( fctparam ) { 0, textresource_textatom_FCTPARAM, { .fctparam = { fctparam } } }
An atomic text element string content referenced by textresource_condition_t.
struct textresource_textatom_t
Static initializer.
#define textresource_writer_FREE { 0, file_FREE }
Writes programming language representation of text resource.
struct textresource_writer_t
Stores the syncthread_t which is waiting.
syncthread_t thread
Defines function type executed by thread_t.
typedef int ( * thread_f ) (void * main_arg)
Static initializer.
#define thread_FREE { 0, 0, 0, 0, 0, sys_thread_FREE, 0, { .uc_link = 0 } }
Identification number which is incremented every time a thread is created.
size_t thread_id
Startargument of the started system thread.
struct thread_startargument_t
Implements syncwait_t.thread_syncwait.
#define thread_syncwait( syncwait ) (&(syncwait)->thread)
Returns pointer to syncwait->thread (see syncwait_t.thread).
syncthread_t * thread_syncwait( syncwait_t * syncwait )
Describes a system thread.
struct thread_t
Implements thread_tls_t.thread_threadtls.
#define thread_threadtls( tls ) ((thread_t*) ( (tls)->addr + sizeof(threadcontext_t) ))
Returns pointer to thread_t stored in thread local storage.
struct thread_t * thread_threadtls( const thread_tls_t * tls )
Static initializer.
#define thread_tls_FREE { 0 }
struct thread_tls_t
Static initializer.
#define thread_vars_INIT_STATIC { threadcontext_INIT_STATIC, thread_FREE }
Variables stored in thread local storage.
struct thread_vars_t
Thread which allocated the memory block.
threadcontext_t * threadcontext
Static initializer for threadcontext_t.
#define threadcontext_FREE { 0, iobj_FREE, iobj_FREE, 0, iobj_FREE, iobj_FREE, 0, 0 }
Static initializer for threadcontext_t.
#define threadcontext_INIT_STATIC { &g_maincontext.pcontext, iobj_FREE, iobj_FREE, 0, iobj_FREE, { 0, &g_logmain_interface }, 0, 0 }
Stores services useable exclusively from one thread.
struct threadcontext_t
Inline implementation of maincontext_t.threadid_maincontext.
#define threadid_maincontext( ) (tcontext_maincontext()->thread_id)
Returns the thread id of the calling thread.
size_t threadid_maincontext( void )
Returns in stackmem the thread stack from tls.
void threadstack_threadtls( const thread_tls_t * tls, /*out*/struct memblock_t * stackmem )
Returns the thread stack from tls.
void threadstack_threadtls( const thread_tls_t * tls, /*out*/struct memblock_t * stackmem )
Static initializer.
#define thrmutex_FREE { 0, 0, 0 }
Static initializer.
#define thrmutex_INIT { 0, 0, 0 }
Mutual exclusion lock.
struct thrmutex_t
Returns the absolute time value of the underlying clock.
int time_sysclock( sysclock_e clock_type, /*out*/struct timevalue_t * clock_time )
The number of times process_testerrortimer returns success.
uint32_t timercount
Returns the maximum value timespec->tv_sec can hold.
static inline uint64_t timespec_MAXSECONDS( void )
Converts struct timespec into timevalue_t.
static inline void timespec2timevalue_sysclock( /*out*/timevalue_t * tval, const struct timespec * tspec )
Converts struct timespec into timevalue_t.
static inline void timespec2timevalue_systimer( /*out*/timevalue_t * tval, const struct timespec * tspec )
Static initializer.
#define timevalue_INIT( seconds, nano_secconds ) { seconds, nano_secconds }
The time value specifies either an aboslute time or a relative time offset.
struct timevalue_t
Returns the window title string in title encoded in UTF-8.
int title_x11window( const x11window_t * x11win, /*ret*/struct cstring_t * title )
Contains start address of thread local storage.
uint8_t * tls_addr
Converts dec to cstring_t.
int tocstring_decimal( const decimal_t * dec, struct cstring_t * cstr )
Converts a big integer value into a double.
double todouble_bigint( const bigint_t * big )
Implements binarystack_t.top_binarystack.
#define top_binarystack( stack ) ((void*)(&(stack)->blockstart[(stack)->freeblocksize]))
Returns the start address in memory of the last pushed object.
void * top_binarystack( binarystack_t * stack )
The size of array root.
uint32_t toplevelsize:24
The size of array root.
uint32_t toplevelsize:24
Number of stored elements of type vm_region_t.
size_t total_count
Logs an TEXTID from C-kern/resource/errlog.text and error number err.
#define TRACE_ERRLOG( FLAGS, TEXTID, err, ... ) TRACE2_ERRLOG(FLAGS, TEXTID, __FUNCTION__, __FILE__, __LINE__, err, __VA_ARGS__)
Logs an TEXTID from C-kern/resource/errlog.text and error number err.
#define TRACE_NOARG_ERRLOG( FLAGS, TEXTID, err ) do { log_header_t _header = log_header_INIT(__FUNCTION__, __FILE__, __LINE__, err) ; PRINTTEXT_NOARG_LOG( log_channel_ERR, FLAGS, &_header, TEXTID ## _ERRLOG) ; } while(0)
Logs an TEXTID from C-kern/resource/errlog.text and error number err.
#define TRACE2_ERRLOG( FLAGS, TEXTID, funcname, filename, linenr, err, ... ) do { log_header_t _header = log_header_INIT(funcname, filename, linenr, err) ; PRINTTEXT_LOG(log_channel_ERR, FLAGS, &_header, TEXTID ## _ERRLOG, __VA_ARGS__) ; } while(0)
Logs the abortion of a function and the its corresponding error code.
#define TRACEABORT_ERRLOG( err ) TRACE_NOARG_ERRLOG(log_flags_END|log_flags_OPTIONALHEADER, FUNCTION_ABORT, err)
Logs that an error occurred during free_XXX or delete_XXX.
#define TRACEABORTFREE_ERRLOG( err ) TRACE_NOARG_ERRLOG(log_flags_END|log_flags_OPTIONALHEADER, FUNCTION_ABORT_FREE, err)
Logs reason of failure and name of called app function.
#define TRACECALL_ERRLOG( fct_name, err ) TRACE_ERRLOG(log_flags_START, FUNCTION_CALL, err, fct_name)
Logs “out of memory” reason for function abort.
#define TRACEOUTOFMEM_ERRLOG( size, err ) TRACE_ERRLOG(log_flags_START, MEMORY_OUT_OF, err, size)
Logs reason of failure and name of called system function.
#define TRACESYSCALL_ERRLOG( sys_fctname, err ) TRACE_ERRLOG(log_flags_START, FUNCTION_SYSCALL, err, sys_fctname)
Transfer ownership of all nodes from fromlist to tolist.
void transfer_dlist( dlist_t * tolist, dlist_t * fromlist )
Transfers all nodes from fromwlist to towlist.
int transferall_syncwlist( syncwlist_t * towlist, syncwlist_t * fromwlist )
Transfers the first node from fromwlist to towlist.
int transferfirst_syncwlist( syncwlist_t * towlist, syncwlist_t * fromwlist )
Static initializer.
#define trie_FREE { 0 }
Static initializer.
#define trie_INIT { 0 }
Stores decoded information about a trie node in memory.
struct trie_node_t
Describes a flexible structure of trie node data stored in memory.
struct trie_nodedata_t
Stores offsets of every possible member of trie_node_t.
struct trie_nodeoffsets_t
Points to 256 childs of type trie_nodedata_t.
struct trie_subnode_t
Points to up to 8 trie_node_ts.
struct trie_subnode2_t
Manages an index which associates abinary key with a user defined pointer.
struct trie_t
Frees preallocated memory which is not in use.
int trimmemory_malloc( void )
Adapts size of cstr to a smaller value.
int truncate_cstring( cstring_t * cstr, size_t new_size )
Truncates file to file_size bytes.
int truncate_file( file_t fileobj, off_t file_size )
Tries to grow the upper bound of an already mapped address range.
int tryexpand_vmpage( vmpage_t * vmpage, size_t size_in_bytes )
Extends prefix with new head prefix1[len-1] + prefix2.
static int tryextendprefix_trienode( trie_node_t * node, uint8_t len, uint8_t prefix1[len-1], uint8_t prefix2/*single digit*/ )
Maps an objectid to its associated object pointer.
int tryfindobject_x11display( x11display_t * x11disp, /*out*/struct x11window_t ** object/*could be NULL*/, uint32_t objectid )
Same as insert_arraysf but no error log in case of EEXIST.
int tryinsert_arraysf( arraysf_t * array, struct arraysf_node_t * node, /*out; err*/struct arraysf_node_t ** inserted_or_existing_node, struct typeadapt_member_t * nodeadp/*0 = >no copy is made*/ )
Same as insert_arraystf but no error log in case of EEXIST.
int tryinsert_arraystf( arraystf_t * array, struct arraystf_node_t * node, /*out; err*/struct arraystf_node_t ** inserted_or_existing_node, struct typeadapt_member_t * nodeadp/*0 = >no copy is made*/ )
Implements trie_t.tryinsert_trie.
#define tryinsert_trie( trie, keylen, key, uservalue ) (insert2_trie((trie), (keylen), (key), (uservalue), false))
TODO: describe
int tryinsert_trie( trie_t * trie, uint16_t keylen, const uint8_t key[keylen], void * uservalue )
Checks that file_path refers to an existing file or directory.
int trypath_directory( const directory_t * dir/*0 = > current working directory*/, const char * const file_path )
Same as remove_arraysf but no error log in case of ESRCH.
int tryremove_arraysf( arraysf_t * array, size_t pos, /*out*/struct arraysf_node_t ** removed_node )
Same as remove_arraystf but no error log in case of ESRCH.
int tryremove_arraystf( arraystf_t * array, size_t size, const uint8_t keydata[size], /*out*/struct arraystf_node_t ** removed_node )
Implements trie_t.tryremove_trie.
#define tryremove_trie( trie, keylen, key, uservalue ) (remove2_trie((trie), (keylen), (key), (uservalue), false))
TODO: describe
int tryremove_trie( trie_t * trie, uint16_t keylen, const uint8_t key[keylen], /*out*/void ** uservalue )
Same as skipbytes_stringstream but checks the number of unread bytes before.
int tryskipbytes_stringstream( stringstream_t * strstream, size_t size )
The function returns 0 if the calling thread has been resumed.
int trysuspend_thread( void )
Polls the queue for a single realtime signal.
int trywait_signalrt( signalrt_t nr, /*out*/uintptr_t * value )
Tries to wake up the first waiting thread.
int trywakeup_waitlist( waitlist_t * wlist, int (*main_task)(void * main_arg), void * main_arg )
Inline implementation of maincontext_t.type_maincontext.
#define type_maincontext( ) (self_maincontext()->type)
Returns type context_e of current maincontext_t.
maincontext_e type_maincontext( void )
Static initializer.
#define typeadapt_binarykey_FREE typeadapt_binarykey_INIT( 0, (const uint8_t*)0 )
Inits typeadapt_binarykey_t with size in bytes in start (lowest) memory address.
#define typeadapt_binarykey_INIT( size, addr ) { addr, size }
Describes byte aligned binary data used as key.
struct typeadapt_binarykey_t
Declares a derived interface from generic typeadapt_comparator_it.
#define typeadapt_comparator_DECLARE( declared_it, typeadapter_t, object_t, key_t ) static inline void compiletimeassert##declared_it(void) { static_assert(sizeof(key_t)==sizeof(void*), "compatible with cmp_key_object") ; } typedef struct declared_it declared_it ; struct declared_it { typeadapt_comparator_EMBED(typeadapter_t, object_t, key_t) ; }
Declares a derived interface from generic typeadapt_comparator_it.
#define typeadapt_comparator_EMBED( typeadapter_t, object_t, key_t ) int (* cmp_key_object) (typeadapter_t * typeadp, const key_t lkey, const object_t * robject) ; int (* cmp_object) (typeadapter_t * typeadp, const object_t * lobject, const object_t * robject)
Static initializer.
#define typeadapt_comparator_FREE { 0, 0 }
Static initializer.
#define typeadapt_comparator_INIT( cmpkeyobj_f, cmpobj_f ) { cmpkeyobj_f, cmpobj_f }
Declares interface for comparing two objects and key with object.
struct typeadapt_comparator_it
Implements typeadapt_t.typeadapt_DECLARE.
#define typeadapt_DECLARE( typeadapter_t, object_t, key_t ) typedef struct typeadapter_t typeadapter_t ; struct typeadapter_t { typeadapt_EMBED(typeadapter_t, object_t, key_t) ; }
Declares a derived interface from generic typeadapt_t.
void typeadapt_DECLARE( TYPENAME typeadapter_t, TYPENAME object_t, TYPENAME key_t )
Implements typeadapt_t.typeadapt_EMBED.
#define typeadapt_EMBED( typeadapter_t, object_t, key_t ) struct { typeadapt_comparator_EMBED(typeadapter_t, object_t, key_t) ; } comparator ; struct { typeadapt_gethash_EMBED(typeadapter_t, object_t, key_t) ; } gethash ; struct { typeadapt_getkey_EMBED(typeadapter_t, object_t) ; } getkey ; struct { typeadapt_lifetime_EMBED(typeadapter_t, object_t) ; } lifetime
Embeds the public interface part from generic typeadapt_t.
void typeadapt_EMBED( TYPENAME typeadapter_t, TYPENAME object_t, TYPENAME key_t )
Static initializer.
#define typeadapt_FREE { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }
Implements typeadapt_gethash_it.typeadapt_gethash_DECLARE.
#define typeadapt_gethash_DECLARE( declared_it, typeadapter_t, object_t, key_t ) static inline void compiletimeassert##declared_it(void) { static_assert(sizeof(key_t)==sizeof(void*), "compatible with hashkey") ; } typedef struct declared_it declared_it ; struct declared_it { typeadapt_gethash_EMBED(typeadapter_t, object_t, key_t) ; }
Declares a derived interface from generic typeadapt_gethash_it.
void typeadapt_gethash_DECLARE( TYPENAME declared_it, TYPENAME typeadapter_t, TYPENAME object_t, TYPENAME key_t ) ;
Implements typeadapt_gethash_it.typeadapt_gethash_EMBED.
#define typeadapt_gethash_EMBED( typeadapter_t, object_t, key_t ) size_t (*hashobject) (typeadapter_t * typeadp, const object_t * node) ; size_t (*hashkey) (typeadapter_t * typeadp, const key_t key)
Declares a derived interface from generic typeadapt_gethash_it.
void typeadapt_gethash_EMBED( TYPENAME typeadapter_t, TYPENAME object_t, TYPENAME key_t ) ;
Static initializer.
#define typeadapt_gethash_FREE typeadapt_gethash_INIT( 0, )
Static initializer.
#define typeadapt_gethash_INIT( hashobject_f, hashkey_f ) { hashobject_f, hashkey_f }
Declares interface for computing a hash value from key / object.
struct typeadapt_gethash_it
Declares a derived interface from generic typeadapt_getkey_it.
#define typeadapt_getkey_DECLARE( declared_it, typeadapter_t, object_t ) typedef struct declared_it declared_it ; struct declared_it { typeadapt_getkey_EMBED(typeadapter_t, object_t) ; }
Declares a derived interface from generic typeadapt_getkey_it.
#define typeadapt_getkey_EMBED( typeadapter_t, object_t ) void (* getbinarykey) (typeadapter_t * typeadp, object_t * node, /*out*/typeadapt_binarykey_t * binkey)
Static initializer.
#define typeadapt_getkey_FREE { 0 }
Static initializer.
#define typeadapt_getkey_INIT( getbinarykey_f ) { getbinarykey_f }
Declares interface for getting a description of a binary key of the object.
struct typeadapt_getkey_it
Static initializer.
#define typeadapt_impl_FREE { typeadapt_FREE, 0 }
Static initializer.
#define typeadapt_impl_INIT( objectsize ) { typeadapt_INIT_LIFETIME(&lifetime_newcopyobj_typeadaptimpl, &lifetime_deleteobj_typeadaptimpl), objectsize }
Default implementation of typeadapt_t.
struct typeadapt_impl_t
Static initializer.
#define typeadapt_INIT_CMP( cmpkeyobj_f, cmpobj_f ) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }
Static initializer.
#define typeadapt_INIT_LIFECMP( newcopyobj_f, deleteobj_f, cmpkeyobj_f, cmpobj_f ) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPHASH( newcopyobj_f, deleteobj_f, cmpkeyobj_f, cmpobj_f, hashobject_f, hashkey_f ) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPHASHKEY( newcopyobj_f, deleteobj_f, cmpkeyobj_f, cmpobj_f, hashobject_f, hashkey_f, getbinarykey_f ) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPKEY( newcopyobj_f, deleteobj_f, cmpkeyobj_f, cmpobj_f, getbinarykey_f ) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFEKEY( newcopyobj_f, deleteobj_f, getbinarykey_f ) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFETIME( newcopyobj_f, deleteobj_f ) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Declares a derived interface from generic typeadapt_lifetime_it.
#define typeadapt_lifetime_DECLARE( declared_it, typeadapter_t, object_t ) typedef struct declared_it declared_it ; struct declared_it { typeadapt_lifetime_EMBED(typeadapter_t, object_t) ; }
Declares the function table used to implement typeadapt_lifetime_DECLARE Use typeadapt_lifetime_EMBED if you want to embed the function table directly into another structure.
#define typeadapt_lifetime_EMBED( typeadapter_t, object_t ) int (* newcopy_object) (typeadapter_t * typeadp, /*out*/object_t ** destobject, const object_t * srcobject) ; int (* delete_object) (typeadapter_t * typeadp, object_t ** object)
Static initializer.
#define typeadapt_lifetime_FREE { 0, 0 }
Static initializer.
#define typeadapt_lifetime_INIT( newcopyobj_f, deleteobj_f ) { (newcopyobj_f), (deleteobj_f) }
Declares interface (function table) for managing the lifetime of objects.
struct typeadapt_lifetime_it
Static initializer.
#define typeadapt_member_FREE typeadapt_member_INIT( 0, )
Static initializer.
#define typeadapt_member_INIT( typeadp, nodeoffset ) { typeadp, typeadapt_nodeoffset_INIT(nodeoffset) }
Export typeadapt_member_t into global namespace.
typedef struct typeadapt_member_t typeadapt_member_t
Static initializer.
#define typeadapt_nodeoffset_INIT( nodeoffset ) nodeoffset
Describes an offset to a struct member.
typedef uint16_t typeadapt_nodeoffset_t
Declares abstract object type.
typedef struct typeadapt_object_t typeadapt_object_t
Interface to services needed by containers in the data store.
struct typeadapt_t
Pointer to typeadapt_t.
typeadapt_t * typeadp
It’s a marker in a function declaration.
#define TYPENAME void*
It’s a marker in a function declaration.
#define TYPEQUALIFIER void*