#include #include #include #include #include #include #include #include #include #include char *t3_buffer = NULL; __attribute__((visibility("default"))) extern void *testfunc(){ fputs( "Yes, it worked, testfunc executed\n", stdout ); return NULL; } __attribute__((visibility("default"))) extern void *testfunc2( char *testvalue ){ fprintf( stdout, "Value passed from python: %s\n", (const char*)testvalue ); return NULL; } __attribute__((visibility("default"))) extern char *testfunc3(){ t3_buffer = (char*)calloc( strlen("test") + 1, sizeof(char) ); assert( t3_buffer != NULL ); snprintf( t3_buffer, (strlen("test") * sizeof(char)) + 1, "test" ); return t3_buffer; } __attribute__((visibility("default"))) extern void *cleanup_buffer(){ if ( t3_buffer == NULL ) return NULL; free( t3_buffer ); t3_buffer = NULL; fputs( "Buffer freed\n", stdout ); return NULL; } __attribute__((visibility("hidden"))) extern void *thread_func( void *uptr ){ uint32_t loop_counter = 0; for ( ; loop_counter < 30; loop_counter++ ){ fprintf( stdout, "Loop counter is now %i\n", loop_counter ); sleep( 1 ); } return NULL; } __attribute__((visibility("default"))) extern void *threadstarter(){ pthread_t tid = 0; if ( pthread_create(&tid, NULL, &thread_func, NULL) == -1 ) return NULL; return NULL; }