1111#include "consts.h"
1212
1313//====================================GLOBALS=========================================
14- const char * dynamic_lib ;
14+ char dynamic_lib_path [ 2000 ] = { 0 } ;
1515const char * callback_name ;
1616int global_argc ;
1717char * * global_argv ;
@@ -54,10 +54,10 @@ CwebHttpResponse *main_sever(CwebHttpRequest *request ){
5454 if (!allow_read_dynamic_lib ) {
5555 return cweb_send_text ("Reading dynamic library is not allowed. Use --allow_read_dynamic_lib flag." , 403 );
5656 }
57- CwebHttpResponse * response = cweb_send_file (dynamic_lib ,CWEB_AUTO_SET_CONTENT , 200 );
57+ CwebHttpResponse * response = cweb_send_file (dynamic_lib_path ,CWEB_AUTO_SET_CONTENT , 200 );
5858
59- DtwPath * path = newDtwPath (dynamic_lib );
60- char * formmated = (char * )malloc (100 + strlen (dynamic_lib ));
59+ DtwPath * path = newDtwPath (dynamic_lib_path );
60+ char * formmated = (char * )malloc (100 + strlen (dynamic_lib_path ));
6161 sprintf (formmated , "attachment; filename=%s" , DtwPath_get_full_name (path ));
6262 CwebHttpResponse_add_header (response , "Content-Disposition" , formmated );
6363 free (formmated );
@@ -73,7 +73,7 @@ CwebHttpResponse *main_sever(CwebHttpRequest *request ){
7373 if (!data ){
7474 return cweb_send_text ("Error reading content" , 404 );
7575 }
76- dtw_write_any_content (dynamic_lib , data , request -> content_length );
76+ dtw_write_any_content (dynamic_lib_path , data , request -> content_length );
7777 return cweb_send_text ("Dynamic library updated" , 202 );
7878 }
7979
@@ -86,7 +86,7 @@ CwebHttpResponse *main_sever(CwebHttpRequest *request ){
8686 CwebHttpResponse * (* request_handler )(CwebHttpRequest * ,int ,char * []) =
8787 (CwebHttpResponse * (* )(CwebHttpRequest * ,int ,char * []))GetProcAddress (handler ,callback_name );
8888#else
89- void * handler = dlopen (dynamic_lib , RTLD_LAZY );
89+ void * handler = dlopen (dynamic_lib_path , RTLD_LAZY );
9090 if (!handler ){
9191 printf ("Error loading dynamic library: %s\n" , dlerror ());
9292 return cweb_send_var_html ((char * )private_cweb_500 , 500 );
@@ -134,11 +134,23 @@ int main(int argc, char *argv[]){
134134 return 1 ;
135135 }
136136
137- dynamic_lib = CArgvParse_get_flag (& args ,DYNAMIC_LIV_FLAGS ,FLAGS_SIZE ,0 );
138- if (!dynamic_lib ){
137+ const char * dynamic_lib_entrie = CArgvParse_get_flag (& args ,DYNAMIC_LIV_FLAGS ,FLAGS_SIZE ,0 );
138+ if (!dynamic_lib_entrie ){
139139 printf ("--dynamic_lib library not provided\n" );
140140 return 1 ;
141141 }
142+ bool is_absolute = dtw_starts_with (dynamic_lib_entrie , "/" ) || dtw_starts_with (dynamic_lib_entrie , "\\" );
143+ if (is_absolute ){
144+ strcpy (dynamic_lib_path , dynamic_lib_entrie );
145+ }
146+ if (!is_absolute ){
147+ char * current_dir = dtw_get_current_dir ();
148+ char * joined = dtw_concat_path (current_dir , dynamic_lib_entrie );
149+ strcpy (dynamic_lib_path , joined );
150+ free (current_dir );
151+ free (joined );
152+ }
153+
142154
143155 callback_name = CArgvParse_get_flag (& args ,CALLBACK_FLAGS ,FLAGS_SIZE ,0 );
144156
0 commit comments