1-
21#include "consts.h"
32
43#include "../dependencies/CWebStudioOne.c"
@@ -67,7 +66,7 @@ int main(int argc, char *argv[]){
6766 return 1 ;
6867 }
6968
70-
69+ starter_callback_name = CArgvParse_get_flag ( & args , STARTER_CALLBACK_FLAGS , FLAGS_SIZE , 0 );
7170
7271
7372 allow_read_dynamic_lib = CArgvParse_is_flags_present (& args , ALLOW_READ_DYNAMIC_LIB_FLAGS , FLAGS_SIZE );
@@ -87,7 +86,40 @@ int main(int argc, char *argv[]){
8786
8887 }
8988
90- CwebServer server = newCwebSever (port_num , main_sever );
89+ CwebServer server ;
90+ if (starter_callback_name ){
91+ #ifdef _WIN32
92+ HMODULE handler = LoadLibrary (dynamic_lib_path );
93+ if (!handler ){
94+ printf ("Error loading dynamic library for starter callback: %lu\n" , GetLastError ());
95+ return 1 ;
96+ }
97+ CwebServer (* starter_callback )() = (CwebServer (* )())GetProcAddress (handler ,starter_callback_name );
98+ if (!starter_callback ){
99+ printf ("Starter callback function not found\n" );
100+ FreeLibrary (handler );
101+ return 1 ;
102+ }
103+ server = starter_callback ();
104+ FreeLibrary (handler );
105+ #else
106+ void * handler = dlopen (dynamic_lib_path , RTLD_LAZY );
107+ if (!handler ){
108+ printf ("Error loading dynamic library for starter callback: %s\n" , dlerror ());
109+ return 1 ;
110+ }
111+ CwebServer (* starter_callback )() = (CwebServer (* )())dlsym (handler ,starter_callback_name );
112+ if (!starter_callback ){
113+ printf ("Starter callback function not found\n" );
114+ dlclose (handler );
115+ return 1 ;
116+ }
117+ server = starter_callback ();
118+ dlclose (handler );
119+ #endif
120+ } else {
121+ server = newCwebSever (port_num , main_sever );
122+ }
91123 CwebServer_start (& server );
92124 return 0 ;
93125}
0 commit comments