Start listing entries in directory

This commit is contained in:
2026-05-08 15:50:18 +02:00
parent 55b91e4f84
commit 5ecf3cdb8e
2 changed files with 20 additions and 7 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
output/ output/
library/

View File

@@ -13,6 +13,8 @@ This will ignore any auth headers and always log in with username demo.
#define SV Noh_String_View #define SV Noh_String_View
#define sv noh_sv_from_cstr #define sv noh_sv_from_cstr
Noh_Arena temp;
static enum MHD_Result send_response(struct MHD_Connection *connection, int status, SV message) { static enum MHD_Result send_response(struct MHD_Connection *connection, int status, SV message) {
struct MHD_Response *response = MHD_create_response_from_buffer( struct MHD_Response *response = MHD_create_response_from_buffer(
message.count, (void*)message.elems, MHD_RESPMEM_PERSISTENT); message.count, (void*)message.elems, MHD_RESPMEM_PERSISTENT);
@@ -34,20 +36,29 @@ static enum MHD_Result handle_opds(struct MHD_Connection *connection, SV url, SV
noh_log(NOH_INFO, "Physical path: "Nsv_Fmt, Nsv_Arg(fs_path)); noh_log(NOH_INFO, "Physical path: "Nsv_Fmt, Nsv_Arg(fs_path));
DIR* dir = opendir(fs_path.elems); DIR *dir = opendir(fs_path.elems);
if (dir) { if (dir) {
noh_log(NOH_INFO, "Exists."); noh_log(NOH_INFO, "Exists.");
noh_arena_save(&temp);
struct dirent *entry = noh_arena_alloc(&temp, sizeof(struct dirent));
while ((entry = readdir(dir)) != NULL) {
(void)entry;
noh_log(NOH_INFO, "Entry..");
}
noh_arena_reset(&temp);
closedir(dir); closedir(dir);
} else if (ENOENT == errno) {
noh_log(NOH_INFO, "Does not exist."); } else if (errno == ENOENT) {
closedir(dir); closedir(dir);
/* Directory does not exist. */ return send_response(connection, 404, sv("That directory does not exist."));
} else { } else {
noh_log(NOH_ERROR, "Opening directory failed."); noh_log(NOH_ERROR, "Opening directory failed.");
return send_response(connection, 500, sv("")); return send_response(connection, 500, sv(""));
} }
return send_response(connection, 200, sv("TODO: OPDS\n")); return send_response(connection, 200, sv("TODO: OPDS\n"));
} }
@@ -125,6 +136,7 @@ int main(int argc, char **argv)
char *library_path = noh_shift_args(&argc, &argv); char *library_path = noh_shift_args(&argc, &argv);
SV base_path = sv(library_path); SV base_path = sv(library_path);
temp = noh_arena_init(4 * 1024);
struct MHD_Daemon *server; struct MHD_Daemon *server;
// Start the HTTP server // Start the HTTP server
@@ -136,11 +148,11 @@ int main(int argc, char **argv)
MHD_OPTION_END); MHD_OPTION_END);
if (!server) { if (!server) {
fprintf(stderr, "Failed to start server\n"); noh_log(NOH_ERROR, "Failed to start server.");
return 1; return 1;
} }
printf("Server is running on http://0.0.0.0:%d\n", port); noh_log(NOH_INFO, "Server is running on http://0.0.0.0:%d", port);
// Keep the server running // Keep the server running
getchar(); getchar();