Skip to content

Commit 93ab27e

Browse files
att
1 parent bf832df commit 93ab27e

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/main.c

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include "consts.h"
1212

1313
//====================================GLOBALS=========================================
14-
const char *dynamic_lib;
14+
char dynamic_lib_path[2000] = {0};
1515
const char *callback_name;
1616
int global_argc;
1717
char **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

Comments
 (0)