diff options
author | Carl Fürstenberg <azatoth@gmail.com> | 2011-07-06 21:51:56 +0400 |
---|---|---|
committer | Carl Fürstenberg <azatoth@gmail.com> | 2011-07-06 21:58:41 +0400 |
commit | 2cf2ffe15efd3e123c41a2971baf27ce266407cb (patch) | |
tree | 44b2ce94724e723c704f9774042f32d0d1e1d28e | |
parent | 9ab8c974cd02a707f729d3c5497dc3ea0d703849 (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.c | 34 | ||||
-rw-r--r-- | src/upnpglobalvars.c | 2 | ||||
-rw-r--r-- | src/upnpglobalvars.h | 7 | ||||
-rw-r--r-- | src/upnphttp.c | 16 |
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 |