Nilorea Library
C utilities for networking, threading, graphics
COMMONS: macros, headers, defines, timers, allocators,...

Macros

#define __EXTENSIONS__
 feature test macro More...
 
#define __n_assert(__ptr, __ret)
 macro to assert things More...
 
#define _nstr(__PTR)   ((__PTR&&__PTR->data)?(__PTR->data):"NULL")
 N_STR or "NULL" string for logging purposes. More...
 
#define _nstrp(__PTR)   ((__PTR&&__PTR->data)?(__PTR->data):NULL)
 N_STR or NULL pointer for testing purposes. More...
 
#define _str(__PTR)   ((__PTR)?(__PTR):"NULL")
 define true More...
 
#define _strp(__PTR)   ((__PTR)?(__PTR):NULL)
 String or NULL pointer for testing purposes. More...
 
#define _strw(__PTR)   ((__PTR)?(__PTR):" ")
 String or " " string for config purposes. More...
 
#define Alloca(__ptr, __size)
 Malloca Handler to get errors and set to 0. More...
 
#define BYTEORDER_BIG_ENDIAN   1
 Big endian macro value. More...
 
#define BYTEORDER_LITTLE_ENDIAN   0
 Little endian macro value. More...
 
#define CALL_RETRY(retvar, expression)
 TEMP_FAILURE gnu macro portable version. More...
 
#define checkerror()
 check for errors More...
 
#define CONCAT(a, b)   CONCAT_BUILDER(a, b)
 Concatenate two macro. More...
 
#define CONCAT_BUILDER(a, b)   a ## b
 CONCAT macro helper. More...
 
#define DEFAULT   1000
 Default APP_STATUS Value. More...
 
#define endif   ){ ___error__check_flag = TRUE ; n_log( LOG_ERR , "First err was at line %d of %s" , __LINE__ , __FILE__ );}
 close a ifwhatever block More...
 
#define equal_if(__a, __cond, __b)   if( (__a) __cond (__b) ){ __a = __b ; }
 if( a , condition, b ) then a = b More...
 
#define FALL_THROUGH
 set windows if true More...
 
#define FORCE_INLINE   __attribute__((always_inline))
 FORCE_INLINE portable macro. More...
 
#define Free(__ptr)
 Free Handler to get errors. More...
 
#define FreeNoLog(__ptr)
 Free Handler without log. More...
 
#define GET   4321
 Flag for GET something , passing as a function parameter. More...
 
#define get_error()   (___error__check_flag == TRUE)
 pop up errors if any More...
 
#define htonll(x)   (x)
 htonl for 64 bits numbers More...
 
#define iffalse   if( FALSE ==
 error checker type if( toto == FALSE )
More...
 
#define ifnull   if( !
 error checker type if( !toto ) More...
 
#define iftrue   if( TRUE ==
 error checker type if( toto == FALSE )
More...
 
#define ifzero   if( 0 ==
 error checker type if( 0 != toto ) More...
 
#define init_error_check()    static int ___error__check_flag = FALSE ;
 init error checking in a function More...
 
#define init_lock(__rwlock_mutex)
 Macro for initializing a rwlock. More...
 
#define Malloc(__ptr, __struct, __size)
 Malloc Handler to get errors and set to 0. More...
 
#define next_even(__val)   ( (__val)%2 == 0 ) ? (__val + 1) : ( __val )
 next odd helper More...
 
#define next_odd(__val)   ( (__val)%2 == 0 ) ? (__val) : ( __val + 1 )
 next odd helper More...
 
#define ntohll(x)   (x)
 ntonl for 64 bits numbers More...
 
#define PAUSED   1004
 Value of the state of an application who is paused. More...
 
#define randomize()   { srand((unsigned)time(NULL)); rand(); }
 Initialize the random sequence with time. More...
 
#define read_lock(__rwlock_mutex)
 Macro for acquiring a read lock on a rwlock mutex. More...
 
#define Realloc(__ptr, __struct, __size)
 Realloc Handler to get errors. More...
 
#define Reallocz(__ptr, __struct, __old_size, __size)
 Realloc + zero new memory zone Handler to get errors. More...
 
#define RUNNING   1001
 Value of the state of an application who is running. More...
 
#define rw_lock_destroy(__rwlock_mutex)
 Macro to destroy rwlock mutex. More...
 
#define RWLOCK_LOGLEVEL   LOG_NULL
 flag to tell the API to disable DEBUG log on locks More...
 
#define SET   1234
 Flag for SET something , passing as a function parameter. More...
 
#define STOPPED   1003
 Value of the state of an application who is stopped. More...
 
#define STOPWANTED   1002
 Value of the state of an application who want to stop his activity. More...
 
#define unlock(__rwlock_mutex)
 Macro for releasing read/write lock a rwlock mutex. More...
 
#define write_lock(__rwlock_mutex)
 Macro for acquiring a write lock on a rwlock mutex. More...
 

Functions

int file_exist (const char *filename)
 test if file exist and if it's readable More...
 
int get_computer_name (char *computer_name, size_t len)
 abort program with a text More...
 
char * get_prog_dir (void)
 get current program running directory More...
 
char * get_prog_name (void)
 get current program name More...
 
void n_abort (char const *format,...)
 abort program with a text More...
 
int n_daemonize (void)
 Daemonize program. More...
 
char * n_get_file_extension (char path[])
 get extension of path+filename More...
 
void N_HIDE_STR (char *buf,...)
 store a hidden version of a string More...
 
int n_popen (char *cmd, int read_buf_size, void **nstr_output, int *ret)
 launch a command abd return output and status More...
 
pid_t system_nb (const char *command, int *infp, int *outfp)
 Non blocking system call. More...
 

Detailed Description

Macro Definition Documentation

◆ __EXTENSIONS__

#define __EXTENSIONS__

feature test macro

Definition at line 32 of file n_common.h.

◆ __n_assert

#define __n_assert (   __ptr,
  __ret 
)
Value:
if( !(__ptr) ) \
{ \
n_log( LOG_DEBUG , "if( !(%s) ) assert at line %d of %s" , #__ptr , __LINE__ , __FILE__ ); \
__ret ; \
}
#define LOG_DEBUG
debug-level messages
Definition: n_log.h:66

macro to assert things

Examples
ex_common.c, ex_fluid_config.c, ex_list.c, and ex_threads.c.

Definition at line 276 of file n_common.h.

◆ _nstr

#define _nstr (   __PTR)    ((__PTR&&__PTR->data)?(__PTR->data):"NULL")

N_STR or "NULL" string for logging purposes.

Examples
ex_base64.c, ex_common.c, ex_crypto.c, ex_fluid.c, ex_hash.c, ex_monolith.c, and ex_nstr.c.

Definition at line 178 of file n_common.h.

◆ _nstrp

#define _nstrp (   __PTR)    ((__PTR&&__PTR->data)?(__PTR->data):NULL)

N_STR or NULL pointer for testing purposes.

Examples
ex_common.c.

Definition at line 180 of file n_common.h.

◆ _str

#define _str (   __PTR)    ((__PTR)?(__PTR):"NULL")

define true

define TRUE

define false

define FALSE

returned by N_STRLIST functions to tell the caller that the list is empty

String or "NULL" string for logging purposes

Examples
ex_common.c, ex_fluid.c, ex_gui_dictionary.c, ex_hash.c, and ex_network.c.

Definition at line 172 of file n_common.h.

◆ _strp

#define _strp (   __PTR)    ((__PTR)?(__PTR):NULL)

String or NULL pointer for testing purposes.

Definition at line 174 of file n_common.h.

◆ _strw

#define _strw (   __PTR)    ((__PTR)?(__PTR):" ")

String or " " string for config purposes.

Definition at line 176 of file n_common.h.

◆ Alloca

#define Alloca (   __ptr,
  __size 
)
Value:
{ \
int __n_errno = 0 ; \
int64_t __byte_size = __size ; \
if( __byte_size <= 0 ) __byte_size = 16 ; \
errno= 0 ;\
__ptr = alloca( __byte_size ); \
__n_errno = errno ;\
if( ! __ptr ) \
{ \
n_log( LOG_ERR , "%s=alloca( %d ) %s at line %d of %s \n", #__ptr , __size , (__n_errno==0)?"alloca error":strerror( __n_errno ) , __LINE__ , __FILE__); \
} \
else \
{ \
memset( __ptr , 0 , __byte_size ); \
} \
}
#define LOG_ERR
error conditions
Definition: n_log.h:58

Malloca Handler to get errors and set to 0.

Examples
ex_common.c.

Definition at line 198 of file n_common.h.

◆ BYTEORDER_BIG_ENDIAN

#define BYTEORDER_BIG_ENDIAN   1

Big endian macro value.

Definition at line 77 of file n_common.h.

◆ BYTEORDER_LITTLE_ENDIAN

#define BYTEORDER_LITTLE_ENDIAN   0

Little endian macro value.

Definition at line 75 of file n_common.h.

◆ CALL_RETRY

#define CALL_RETRY (   retvar,
  expression 
)
Value:
do { \
retvar = (expression); \
} while (retvar == -1 && errno == EINTR);

TEMP_FAILURE gnu macro portable version.

Definition at line 284 of file n_common.h.

◆ checkerror

#define checkerror ( )
Value:
if( ___error__check_flag == TRUE ) \
{ n_log( LOG_ERR , "checkerror return false at line %d of %s" , __LINE__ , __FILE__ ); \
goto error ; \
}
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition: n_log.h:74

check for errors

Examples
ex_common.c.

Definition at line 312 of file n_common.h.

◆ CONCAT

#define CONCAT (   a,
 
)    CONCAT_BUILDER(a, b)

Concatenate two macro.

Definition at line 450 of file n_common.h.

◆ CONCAT_BUILDER

#define CONCAT_BUILDER (   a,
 
)    a ## b

CONCAT macro helper.

Definition at line 448 of file n_common.h.

◆ DEFAULT

#define DEFAULT   1000

Default APP_STATUS Value.

Definition at line 424 of file n_common.h.

◆ endif

#define endif   ){ ___error__check_flag = TRUE ; n_log( LOG_ERR , "First err was at line %d of %s" , __LINE__ , __FILE__ );}

close a ifwhatever block

Examples
ex_common.c.

Definition at line 318 of file n_common.h.

◆ equal_if

#define equal_if (   __a,
  __cond,
  __b 
)    if( (__a) __cond (__b) ){ __a = __b ; }

if( a , condition, b ) then a = b

Definition at line 325 of file n_common.h.

◆ FALL_THROUGH

#define FALL_THROUGH
Value:
/* fall through */ \
((void)0)

set windows if true

Definition at line 52 of file n_common.h.

◆ FORCE_INLINE

#define FORCE_INLINE   __attribute__((always_inline))

FORCE_INLINE portable macro.

Examples
ex_common.c.

Definition at line 141 of file n_common.h.

◆ Free

#define Free (   __ptr)
Value:
if ( __ptr )\
{\
free( __ptr );\
__ptr = NULL;\
}\
else\
{\
n_log( LOG_DEBUG , "Free( %s ) already done or NULL at line %d of %s \n", #__ptr , __LINE__ , __FILE__ );\
}

Free Handler to get errors.

Examples
ex_common.c, ex_fluid.c, ex_hash.c, ex_log.c, and ex_nstr.c.

Definition at line 256 of file n_common.h.

◆ FreeNoLog

#define FreeNoLog (   __ptr)
Value:
if ( __ptr )\
{\
free( __ptr );\
__ptr = NULL;\
}

Free Handler without log.

Examples
ex_common.c, ex_gui_dictionary.c, and ex_network.c.

Definition at line 268 of file n_common.h.

◆ GET

#define GET   4321

Flag for GET something , passing as a function parameter.

Definition at line 422 of file n_common.h.

◆ get_error

#define get_error ( )    (___error__check_flag == TRUE)

pop up errors if any

Examples
ex_common.c.

Definition at line 321 of file n_common.h.

◆ htonll

#define htonll (   x)    (x)

htonl for 64 bits numbers

Definition at line 454 of file n_common.h.

◆ iffalse

#define iffalse   if( FALSE ==

error checker type if( toto == FALSE )

Examples
ex_common.c.

Definition at line 306 of file n_common.h.

◆ ifnull

#define ifnull   if( !

error checker type if( !toto )

Examples
ex_common.c.

Definition at line 300 of file n_common.h.

◆ iftrue

#define iftrue   if( TRUE ==

error checker type if( toto == FALSE )

Examples
ex_common.c.

Definition at line 309 of file n_common.h.

◆ ifzero

#define ifzero   if( 0 ==

error checker type if( 0 != toto )

Examples
ex_common.c.

Definition at line 303 of file n_common.h.

◆ init_error_check

#define init_error_check ( )     static int ___error__check_flag = FALSE ;

init error checking in a function

Examples
ex_common.c.

Definition at line 296 of file n_common.h.

◆ init_lock

#define init_lock (   __rwlock_mutex)
Value:
({ \
pthread_rwlockattr_t __attr ; \
pthread_rwlockattr_init( &__attr ); \
int __ret = 0 ; \
do \
{ \
n_log( RWLOCK_LOGLEVEL , "init_lock %s" , #__rwlock_mutex ); \
__rwlock_mutex = (pthread_rwlock_t)PTHREAD_RWLOCK_INITIALIZER ; \
__ret = pthread_rwlock_init( &(__rwlock_mutex) , &__attr ); \
if( __ret != 0 ) \
{ \
n_log( LOG_ERR , "Error %s while initializing %s at %s:%s:%d" , strerror( __ret ) , #__rwlock_mutex , __FILE__ , __func__ , __LINE__ ); \
} \
pthread_rwlockattr_destroy( &__attr ); \
} while( 0 ); \
__ret ; \
})
#define RWLOCK_LOGLEVEL
flag to tell the API to disable DEBUG log on locks
Definition: n_common.h:333

Macro for initializing a rwlock.

Definition at line 337 of file n_common.h.

◆ Malloc

#define Malloc (   __ptr,
  __struct,
  __size 
)
Value:
{ \
int __n_errno = 0 ; \
int64_t __byte_size = __size ; \
if( __byte_size <= 0 ) __byte_size = 16; \
errno= 0 ;\
__ptr = ( __struct *)calloc( __byte_size , sizeof( __struct ) ); \
__n_errno = errno ;\
if( ! __ptr ) \
{ \
n_log( LOG_ERR , "( %s *)calloc( %ld , sizeof( %s ) ) %s at line %d of %s \n", #__ptr , __size , #__struct , (__n_errno==0)?"malloc error":strerror( __n_errno ) , __LINE__ , __FILE__); \
} \
}

Malloc Handler to get errors and set to 0.

Examples
ex_common.c, ex_fluid.c, ex_gui_dictionary.c, and ex_hash.c.

Definition at line 183 of file n_common.h.

◆ next_even

#define next_even (   __val)    ( (__val)%2 == 0 ) ? (__val + 1) : ( __val )

next odd helper

Examples
ex_common.c.

Definition at line 292 of file n_common.h.

◆ next_odd

#define next_odd (   __val)    ( (__val)%2 == 0 ) ? (__val) : ( __val + 1 )

next odd helper

Examples
ex_common.c.

Definition at line 289 of file n_common.h.

◆ ntohll

#define ntohll (   x)    (x)

ntonl for 64 bits numbers

Definition at line 456 of file n_common.h.

◆ PAUSED

#define PAUSED   1004

Value of the state of an application who is paused.

Definition at line 432 of file n_common.h.

◆ randomize

#define randomize ( )    { srand((unsigned)time(NULL)); rand(); }

Initialize the random sequence with time.

Definition at line 435 of file n_common.h.

◆ read_lock

#define read_lock (   __rwlock_mutex)
Value:
({ \
int __ret = 0 ; \
do \
{ \
n_log( RWLOCK_LOGLEVEL , "read lock %s" , #__rwlock_mutex ); \
__ret = pthread_rwlock_rdlock( &(__rwlock_mutex) ); \
if( __ret != 0 ) \
{ \
n_log( LOG_ERR , "Error %s while read locking %s at %s:%s:%d" , strerror( __ret ) , #__rwlock_mutex , __FILE__ , __func__ , __LINE__ ); \
} \
} while( 0 ); \
__ret ; \
})

Macro for acquiring a read lock on a rwlock mutex.

Definition at line 357 of file n_common.h.

◆ Realloc

#define Realloc (   __ptr,
  __struct,
  __size 
)
Value:
{ \
int __n_errno = 0 ; \
int64_t __byte_size = __size * sizeof( __struct ); \
if( __byte_size <= 0 ) __byte_size = 16 ; \
errno= 0 ;\
void *__new_ptr = ( __struct *)realloc( __ptr , __byte_size ); \
__n_errno = errno ; \
if( !__new_ptr ) \
{ \
n_log( LOG_ERR , "( %s *)realloc( %s * sizeof( %d ) ) %s at line %d of %s \n", #__ptr , #__struct , __size , (__n_errno==0)?"realloc error":strerror( __n_errno ) , __LINE__ , __FILE__);\
} \
else \
{ \
__ptr = __new_ptr ; \
} \
}

Realloc Handler to get errors.

Examples
ex_common.c.

Definition at line 217 of file n_common.h.

◆ Reallocz

#define Reallocz (   __ptr,
  __struct,
  __old_size,
  __size 
)
Value:
{ \
int __n_errno = 0 ; \
size_t __byte_size = __size * sizeof( __struct ); \
if( __byte_size <= 0 ) __byte_size = 16 ; \
errno= 0 ;\
void *__new_ptr = ( __struct *)realloc( __ptr , __byte_size ); \
__n_errno = errno ; \
if( !__new_ptr ) \
{ \
n_log( LOG_ERR , "( %s *)realloc( %s * sizeof( %d ) ) %s at line %d of %s \n", #__ptr , #__struct , __size , (__n_errno==0)?"realloc error":strerror( __n_errno ) , __LINE__ , __FILE__);\
} \
else \
{ \
__ptr = __new_ptr ; \
if( __byte_size > __old_size ) memset( ( __ptr + __old_size ) , 0 , __byte_size - __old_size ); \
} \
}

Realloc + zero new memory zone Handler to get errors.

Examples
ex_common.c.

Definition at line 236 of file n_common.h.

◆ RUNNING

#define RUNNING   1001

Value of the state of an application who is running.

Definition at line 426 of file n_common.h.

◆ rw_lock_destroy

#define rw_lock_destroy (   __rwlock_mutex)
Value:
({ \
int __ret = 0 ; \
do \
{ \
n_log( RWLOCK_LOGLEVEL , "destroy lock %s" , #__rwlock_mutex ); \
__ret = pthread_rwlock_destroy( &(__rwlock_mutex) ); \
if( __ret != 0 ) \
{ \
n_log( LOG_ERR , "Error %s while destroying %s at %s:%s:%d" , strerror( __ret ) , #__rwlock_mutex , __FILE__ , __func__ , __LINE__ ); \
} \
} while( 0 ); \
__ret ; \
})

Macro to destroy rwlock mutex.

Definition at line 404 of file n_common.h.

◆ RWLOCK_LOGLEVEL

#define RWLOCK_LOGLEVEL   LOG_NULL

flag to tell the API to disable DEBUG log on locks

Definition at line 333 of file n_common.h.

◆ SET

#define SET   1234

Flag for SET something , passing as a function parameter.

Definition at line 420 of file n_common.h.

◆ STOPPED

#define STOPPED   1003

Value of the state of an application who is stopped.

Definition at line 430 of file n_common.h.

◆ STOPWANTED

#define STOPWANTED   1002

Value of the state of an application who want to stop his activity.

Definition at line 428 of file n_common.h.

◆ unlock

#define unlock (   __rwlock_mutex)
Value:
({ \
int __ret = 0 ; \
do \
{ \
n_log( RWLOCK_LOGLEVEL , "unlock lock %s" , #__rwlock_mutex ); \
__ret = pthread_rwlock_unlock( &(__rwlock_mutex) ); \
if( __ret != 0 ) \
{ \
n_log( LOG_ERR , "Error %s while unlocking %s at %s:%s:%d" , strerror( __ret ) , #__rwlock_mutex , __FILE__ , __func__ , __LINE__ ); \
} \
} while( 0 ); \
__ret ; \
})

Macro for releasing read/write lock a rwlock mutex.

Definition at line 389 of file n_common.h.

◆ write_lock

#define write_lock (   __rwlock_mutex)
Value:
({ \
int __ret = 0 ; \
do \
{ \
n_log( RWLOCK_LOGLEVEL , "write lock %s" , #__rwlock_mutex ); \
__ret = pthread_rwlock_wrlock( &(__rwlock_mutex) ); \
if( __ret != 0 ) \
{ \
n_log( LOG_ERR , "Error %s while write locking %s at %s:%s:%d" , strerror( __ret ) , #__rwlock_mutex , __FILE__ , __func__ , __LINE__ ); \
} \
} while( 0 ); \
__ret ; \
})

Macro for acquiring a write lock on a rwlock mutex.

Definition at line 373 of file n_common.h.

Function Documentation

◆ file_exist()

int file_exist ( const char *  filename)

test if file exist and if it's readable

Parameters
filenamePath/name of the file
Returns
TRUE or FALSE

Definition at line 92 of file n_common.c.

◆ get_computer_name()

int get_computer_name ( char *  computer_name,
size_t  len 
)

abort program with a text

Parameters
computer_nameallocated buffer to hold the computer name
lensize of computer_name variable
Returns
TRUE or FALSE

Definition at line 58 of file n_common.c.

References LOG_ERR, and n_log.

Referenced by n_kafka_load_config().

+ Here is the caller graph for this function:

◆ get_prog_dir()

char * get_prog_dir ( void  )

get current program running directory

Returns
A copy of the current program running directory inside a string

Definition at line 109 of file n_common.c.

◆ get_prog_name()

char * get_prog_name ( void  )

get current program name

Returns
A copy of the current program name inside a string

Definition at line 145 of file n_common.c.

◆ n_abort()

void n_abort ( char const *  format,
  ... 
)

abort program with a text

Parameters
formatprintf style format and args

Definition at line 38 of file n_common.c.

◆ n_daemonize()

int n_daemonize ( void  )

Daemonize program.

Returns
TRUE or FALSE

Definition at line 236 of file n_common.c.

References LOG_ERR, LOG_NOTICE, and n_log.

◆ n_get_file_extension()

char * n_get_file_extension ( char  path[])

get extension of path+filename

Parameters
paththe path + filename
Returns
a pointer to the first extension character or NULL

Definition at line 394 of file n_common.c.

References __n_assert.

◆ N_HIDE_STR()

void N_HIDE_STR ( char *  buf,
  ... 
)

store a hidden version of a string

Parameters
bufthe variable which will receive the string

Definition at line 371 of file n_common.c.

◆ n_popen()

int n_popen ( char *  cmd,
int  read_buf_size,
void **  nstr_output,
int *  ret 
)

launch a command abd return output and status

Parameters
cmdThe command to launch
read_buf_sizepopen read buf. Also serves as a minimum size for the dynamically allocated returned output if not already allocaded
nstr_outputPointer to a valid N_STR or NULL (see read_buf_size)
retCommand output if any. Should be initialized to -1 and tested against to check if it's valid.
Returns
TRUE or FALSE

Definition at line 185 of file n_common.c.

References __n_assert, LOG_ERR, n_log, new_nstr(), and nstrprintf_cat.

Referenced by addr2line(), and n_get_current_dir_hd_serial().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ system_nb()

pid_t system_nb ( const char *  command,
int *  infp,
int *  outfp 
)

Non blocking system call.

Parameters
commandto call
infpstdin file descriptor holder or NULL
outfpstdout file descriptor holder or NULL
Returns
The system command pid or -1

Close all other descriptors for the safety sake.

Definition at line 293 of file n_common.c.

References __n_assert, LOG_ERR, and n_log.