diff options
-rw-r--r-- | render/directory.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/render/directory.c b/render/directory.c index b66e94dbc..602d979db 100644 --- a/render/directory.c +++ b/render/directory.c @@ -176,29 +176,13 @@ bool dirlist_generate_hide_columns(int flags, char *buffer, int buffer_length) bool dirlist_generate_title(char *title, char *buffer, int buffer_length) { - int error = 0; - int index_title_length = strlen(title) + - strlen(messages_get("FileIndex")); - char *index_title = malloc(index_title_length); - - if(index_title == NULL) - /* Title buffer allocation error */ - return false; - - error = snprintf(index_title, index_title_length, - messages_get("FileIndex"), - title); - if (error < 0 || error >= index_title_length) - /* Error or buffer too small */ - return false; - - error = snprintf(buffer, buffer_length, + int error = snprintf(buffer, buffer_length, "</style>\n" "<title>%s</title>\n" "</head>\n" "<body>\n" "<h1>%s</h1>\n", - index_title, index_title); + title, title); if (error < 0 || error >= buffer_length) /* Error or buffer too small */ return false; @@ -439,6 +423,7 @@ bool directory_create(struct content *c, const struct http_parameter *params) { } bool directory_convert(struct content *c) { + int error = 0; char *path; DIR *parent; struct dirent *entry; @@ -457,6 +442,8 @@ bool directory_convert(struct content *c) { char modtime[100]; long long filesize; bool extendedinfo, evenrow = false; + char *index_title; + int index_title_length; /* Get directory path from URL */ path = url_to_path(content__get_url(c)); @@ -497,9 +484,32 @@ bool directory_convert(struct content *c) { binding_parse_chunk(c->data.html.parser_binding, (uint8_t *) buffer, strlen(buffer)); + /* Construct a localised title string */ + index_title_length = strlen(nice_path) + + strlen(messages_get("FileIndex")); + index_title = malloc(index_title_length); + + if(index_title == NULL) { + msg_data.error = messages_get("NoMemory"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + return false; + } + + snprintf(index_title, index_title_length, + messages_get("FileIndex"), + nice_path); + if (error < 0 || error >= index_title_length) { + /* Error or buffer too small */ + msg_data.error = messages_get("NoMemory"); + content_broadcast(c, CONTENT_MSG_ERROR, msg_data); + free(index_title); + return false; + } + /* Print document title and heading */ - dirlist_generate_title(nice_path, buffer, MAX_LENGTH); + dirlist_generate_title(index_title, buffer, MAX_LENGTH); free(nice_path); + free(index_title); binding_parse_chunk(c->data.html.parser_binding, (uint8_t *) buffer, strlen(buffer)); |