Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/azatoth/minidlna.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Fürstenberg <azatoth@gmail.com>2011-07-06 21:51:56 +0400
committerCarl Fürstenberg <azatoth@gmail.com>2011-07-06 21:58:41 +0400
commit2cf2ffe15efd3e123c41a2971baf27ce266407cb (patch)
tree44b2ce94724e723c704f9774042f32d0d1e1d28e
parent9ab8c974cd02a707f729d3c5497dc3ea0d703849 (diff)
Rewrite the icon code so it actually works
The previous rewrite of the icon code from static to dynamic didn't really work (it was totally untested). Have rewritten it now (had to freshen up a lot of dormant c-knowledge.
-rw-r--r--src/minidlna.c34
-rw-r--r--src/upnpglobalvars.c2
-rw-r--r--src/upnpglobalvars.h7
-rw-r--r--src/upnphttp.c16
4 files changed, 32 insertions, 27 deletions
diff --git a/src/minidlna.c b/src/minidlna.c
index 35a6758..4142c88 100644
--- a/src/minidlna.c
+++ b/src/minidlna.c
@@ -333,12 +333,9 @@ open_db(void)
return new_db;
}
-static const uint8_t* read_file(const char* dir, const char *filename) {
+static void read_file(img_t* img, const char* dir, const char *filename) {
char path[1024];
- long size;
sprintf( path, "%s/%s", dir, filename);
- uint8_t * data;
- struct stat sb;
FILE *file = fopen(path, "rb");
if(!file) {
char err[1024];
@@ -348,17 +345,16 @@ static const uint8_t* read_file(const char* dir, const char *filename) {
exit(EXIT_FAILURE);
}
fseek( file , 0L , SEEK_END);
- size = ftell( file );
+ img->size = ftell( file );
rewind( file );
- data = malloc(size + 1);
- if(!data) {
+ img->data = calloc(img->size + 1, sizeof(char));
+ if(!img->data) {
perror("read_file(): failed to allocate memory");
exit(EXIT_FAILURE);
}
- fread(data, sizeof(char), sb.st_size, file);
+ fread(img->data, sizeof(char), img->size, file);
fclose(file);
- return data;
}
/* init phase :
@@ -868,10 +864,14 @@ init(int argc, char * * argv)
}
/* Read icons */
- png_sm = read_file(DATADIR, "png_sm.png");
- png_lrg = read_file(DATADIR, "png_lrg.png");
- jpeg_sm = read_file(DATADIR, "jpeg_sm.jpeg");
- jpeg_lrg = read_file(DATADIR, "jpeg_lrg.jpeg");
+ memset(&png_sm, '\0', sizeof(img_t));
+ memset(&png_lrg, '\0', sizeof(img_t));
+ memset(&jpeg_sm, '\0', sizeof(img_t));
+ memset(&jpeg_lrg, '\0', sizeof(img_t));
+ read_file(&png_sm, DATADIR, "png_sm.png");
+ read_file(&png_lrg, DATADIR, "png_lrg.png");
+ read_file(&jpeg_sm, DATADIR, "jpeg_sm.jpeg");
+ read_file(&jpeg_lrg, DATADIR, "jpeg_lrg.jpeg");
/* set signal handler */
@@ -1328,10 +1328,10 @@ shutdown:
DPRINTF(E_ERROR, L_GENERAL, "Failed to remove pidfile %s: %s\n", pidfilename, strerror(errno));
}
- free((void*)png_sm);
- free((void*)png_lrg);
- free((void*)jpeg_sm);
- free((void*)jpeg_lrg);
+ free(png_sm.data);
+ free(png_lrg.data);
+ free(jpeg_sm.data);
+ free(jpeg_lrg.data);
freeoptions();
diff --git a/src/upnpglobalvars.c b/src/upnpglobalvars.c
index 2adc67b..9b9dda9 100644
--- a/src/upnpglobalvars.c
+++ b/src/upnpglobalvars.c
@@ -98,4 +98,4 @@ short int scanning = 0;
volatile short int quitting = 0;
volatile uint32_t updateID = 0;
-const uint8_t *png_sm = 0, *png_lrg = 0, *jpeg_sm = 0, *jpeg_lrg = 0;
+img_t png_sm, png_lrg, jpeg_sm, jpeg_lrg;
diff --git a/src/upnpglobalvars.h b/src/upnpglobalvars.h
index fd004b1..175ad73 100644
--- a/src/upnpglobalvars.h
+++ b/src/upnpglobalvars.h
@@ -206,7 +206,12 @@ extern char presentationurl[];
extern char pnpx_hwid[];
#endif
-extern const uint8_t *png_sm, *png_lrg, *jpeg_sm, *jpeg_lrg;
+typedef struct img_s {
+ uint8_t* data;
+ long size;
+} img_t;
+
+extern img_t png_sm, png_lrg, jpeg_sm, jpeg_lrg;
/* lan addresses */
/* MAX_LAN_ADDR : maximum number of interfaces
diff --git a/src/upnphttp.c b/src/upnphttp.c
index 79efe74..b0ccd66 100644
--- a/src/upnphttp.c
+++ b/src/upnphttp.c
@@ -1222,29 +1222,29 @@ SendResp_icon(struct upnphttp * h, char * icon)
if( strcmp(icon, "sm.png") == 0 )
{
DPRINTF(E_DEBUG, L_HTTP, "Sending small PNG icon\n");
- data = (char *)png_sm;
- size = sizeof(png_sm)-1;
+ data = (char *)png_sm.data;
+ size = png_sm.size;
strcpy(mime+6, "png");
}
else if( strcmp(icon, "lrg.png") == 0 )
{
DPRINTF(E_DEBUG, L_HTTP, "Sending large PNG icon\n");
- data = (char *)png_lrg;
- size = sizeof(png_lrg)-1;
+ data = (char *)png_lrg.data;
+ size = png_lrg.size;
strcpy(mime+6, "png");
}
else if( strcmp(icon, "sm.jpg") == 0 )
{
DPRINTF(E_DEBUG, L_HTTP, "Sending small JPEG icon\n");
- data = (char *)jpeg_sm;
- size = sizeof(jpeg_sm)-1;
+ data = (char *)jpeg_sm.data;
+ size = jpeg_sm.size;
strcpy(mime+6, "jpeg");
}
else if( strcmp(icon, "lrg.jpg") == 0 )
{
DPRINTF(E_DEBUG, L_HTTP, "Sending large JPEG icon\n");
- data = (char *)jpeg_lrg;
- size = sizeof(jpeg_lrg)-1;
+ data = (char *)jpeg_lrg.data;
+ size = jpeg_lrg.size;
strcpy(mime+6, "jpeg");
}
else