Some ownership towards dList removal in the file helper.
This commit is contained in:
+12
-16
@@ -93,8 +93,8 @@ struct DilloDir {
|
||||
|
||||
struct ClientInfo {
|
||||
Dsh *sh;
|
||||
char *orig_url;
|
||||
char *filename;
|
||||
std::optional< std::string > orig_url;
|
||||
std::optional< std::string > filename;
|
||||
int file_fd;
|
||||
off_t file_sz;
|
||||
DilloDir *d_dir;
|
||||
@@ -560,11 +560,11 @@ static const char *File_content_type(const char *filename)
|
||||
* Send an error page
|
||||
*/
|
||||
static void File_prepare_send_error_page(ClientInfo *client, int res,
|
||||
const char *orig_url)
|
||||
const std::string_view orig_url)
|
||||
{
|
||||
client->state = st_err;
|
||||
client->err_code = res;
|
||||
client->orig_url = dStrdup(orig_url);
|
||||
client->orig_url = orig_url;
|
||||
client->flags &= ~FILE_READ;
|
||||
client->flags |= FILE_WRITE;
|
||||
}
|
||||
@@ -612,7 +612,7 @@ static void File_send_error_page(ClientInfo *client)
|
||||
* Scan the directory, sort and prepare to send it enclosed in HTTP.
|
||||
*/
|
||||
static int File_prepare_send_dir(ClientInfo *client,
|
||||
const char *DirName, const char *orig_url)
|
||||
const char *DirName, const std::string_view orig_url)
|
||||
{
|
||||
std::string ds_dirname;
|
||||
DilloDir *Ddir;
|
||||
@@ -626,7 +626,7 @@ static int File_prepare_send_dir(ClientInfo *client,
|
||||
Ddir = File_dillodir_new(ds_dirname.c_str()).release();
|
||||
if (Ddir) {
|
||||
/* looks ok, set things accordingly */
|
||||
client->orig_url = dStrdup(orig_url);
|
||||
client->orig_url = orig_url;
|
||||
client->d_dir = Ddir;
|
||||
client->state = st_start;
|
||||
client->flags &= ~FILE_READ;
|
||||
@@ -641,7 +641,7 @@ static int File_prepare_send_dir(ClientInfo *client,
|
||||
*/
|
||||
static int File_prepare_send_file(ClientInfo *client,
|
||||
const char *filename,
|
||||
const char *orig_url)
|
||||
const std::string_view orig_url)
|
||||
{
|
||||
int fd, res = -1;
|
||||
struct stat sb;
|
||||
@@ -658,8 +658,8 @@ static int File_prepare_send_file(ClientInfo *client,
|
||||
client->file_sz = sb.st_size;
|
||||
client->d_dir = NULL;
|
||||
client->state = st_start;
|
||||
client->filename = dStrdup(filename);
|
||||
client->orig_url = dStrdup(orig_url);
|
||||
client->filename = filename;
|
||||
client->orig_url = orig_url;
|
||||
client->flags &= ~FILE_READ;
|
||||
client->flags |= FILE_WRITE;
|
||||
res = 0;
|
||||
@@ -717,9 +717,9 @@ static int File_send_file(ClientInfo *client)
|
||||
/* send HTTP header */
|
||||
|
||||
/* Check for gzipped file */
|
||||
namelen = strlen(client->filename);
|
||||
namelen = client->filename.value().size();
|
||||
if (namelen > 3 &&
|
||||
!dStrAsciiCasecmp(client->filename + namelen - 3, ".gz")) {
|
||||
!dStrAsciiCasecmp(client->filename.value().c_str() + namelen - 3, ".gz")) {
|
||||
gzipped = true;
|
||||
namelen -= 3;
|
||||
}
|
||||
@@ -727,7 +727,7 @@ static int File_send_file(ClientInfo *client)
|
||||
* If there's no known extension, perform data sniffing.
|
||||
* If this doesn't lead to a conclusion, use "application/octet-stream".
|
||||
*/
|
||||
name = dStrndup(client->filename, namelen);
|
||||
name = dStrndup(client->filename.value().c_str(), namelen);
|
||||
if (!(ct = File_content_type(name)))
|
||||
ct = unknown_type;
|
||||
dFree(name);
|
||||
@@ -894,8 +894,6 @@ static ClientInfo *File_add_client(int sock_fd)
|
||||
{
|
||||
auto new_client = std::make_unique< ClientInfo >();
|
||||
new_client->sh = a_Dpip_dsh_new(sock_fd, sock_fd, 8*1024);
|
||||
new_client->orig_url = NULL;
|
||||
new_client->filename = NULL;
|
||||
new_client->file_fd = -1;
|
||||
new_client->file_sz = 0;
|
||||
new_client->d_dir = NULL;
|
||||
@@ -920,8 +918,6 @@ static void File_remove_client(ClientInfo *client)
|
||||
a_Dpip_dsh_close(client->sh);
|
||||
a_Dpip_dsh_free(client->sh);
|
||||
File_close(client->file_fd);
|
||||
dFree(client->orig_url);
|
||||
dFree(client->filename);
|
||||
File_dillodir_free(client->d_dir);
|
||||
|
||||
delete client;
|
||||
|
||||
Reference in New Issue
Block a user