From de4e5cbc53859edf5a2e75331988e9e39d1253d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 14:48:57 +0200 Subject: Mark internal functions and data structures static. Functions and data structures that are not exported and are only ever used in the same unit they are defined should be marked static to improve compiler's ability to optimise them. This applies to xine_dispose_internal() function for xine-lib, the extended_to_int() function in the AIFF demuxer, the bandwidths array in QuickTime demuxer, the wc_pal_lookup table in the WC3 movie demuxer, and the rm_header and pnm_data_header arrays in pnm input plugin. --- src/input/pnm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/input') diff --git a/src/input/pnm.c b/src/input/pnm.c index 38d65b850..3516ab262 100644 --- a/src/input/pnm.c +++ b/src/input/pnm.c @@ -90,7 +90,7 @@ struct pnm_s { /* header of rm files */ #define RM_HEADER_SIZE 0x12 -const unsigned char rm_header[]={ +static const unsigned char rm_header[]={ 0x2e, 0x52, 0x4d, 0x46, /* object_id ".RMF" */ 0x00, 0x00, 0x00, 0x12, /* header_size 0x12 */ 0x00, 0x00, /* object_version 0x00 */ @@ -100,7 +100,7 @@ const unsigned char rm_header[]={ /* data chunk header */ #define PNM_DATA_HEADER_SIZE 18 -const unsigned char pnm_data_header[]={ +static const unsigned char pnm_data_header[]={ 'D','A','T','A', 0,0,0,0, /* data chunk size */ 0,0, /* object version */ -- cgit v1.2.3 From 88d23a2dbabf419ab4014b449be119a741aa54f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 16:59:00 +0200 Subject: xine_xmalloc() deprecation: replace its use with static and non-zero size. The xine_xmalloc() function is going to be deprecated, as its behaviour is rarely needed as such, and it's thus misused. With this, almost all uses of xine_xmalloc() with static size (for instance the value returned by sizeof()) or with a size that is guaranteed not to be zero (like strlen()+1) are replaced with calls to either calloc(1, ...) or malloc(). malloc() is used whenever the allocated memory is going to be immediately overwritten, while calloc() is used in every other case, as it sets the whole memory area to zero. --HG-- extra : transplant_source : %8F%98%EC%02%1E%83%F0s%06X%83C%205Y%80%B12%CC%E1 --- src/input/input_cdda.c | 8 ++++---- src/input/input_dvb.c | 41 +++++++++++++++++++--------------------- src/input/input_dvd.c | 4 ++-- src/input/input_file.c | 12 ++++++------ src/input/input_http.c | 4 ++-- src/input/input_mms.c | 4 ++-- src/input/input_net.c | 4 ++-- src/input/input_pnm.c | 4 ++-- src/input/input_pvr.c | 6 +++--- src/input/input_rtp.c | 4 ++-- src/input/input_rtsp.c | 6 +++--- src/input/input_smb.c | 8 ++++---- src/input/input_stdin_fifo.c | 4 ++-- src/input/input_v4l.c | 16 ++++++++-------- src/input/input_vcd.c | 10 +++++----- src/input/libreal/real.c | 2 +- src/input/libreal/sdpplin.c | 4 ++-- src/input/librtsp/rtsp_session.c | 2 +- src/input/mms.c | 2 +- src/input/mmsh.c | 2 +- src/input/net_buf_ctrl.c | 2 +- src/input/pnm.c | 2 +- src/input/vcd/xineplug_inp_vcd.c | 2 +- 23 files changed, 75 insertions(+), 78 deletions(-) (limited to 'src/input') diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index f43f79fc3..30b9b49e1 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -370,7 +370,7 @@ static cdrom_toc * init_cdrom_toc(void) { cdrom_toc *toc; - toc = (cdrom_toc *) xine_xmalloc(sizeof (cdrom_toc)); + toc = calloc(1, sizeof (cdrom_toc)); toc->first_track = toc->last_track = toc->total_tracks = 0; toc->toc_entries = NULL; @@ -2536,7 +2536,7 @@ static char ** cdda_class_get_autoplay_list (input_class_t *this_gen, * device we are going to open; but it is possible that this function * gets called, before a plugin instance has been created; * let's create a dummy instance in such a condition */ - ip = (cdda_input_plugin_t *)xine_xmalloc(sizeof(cdda_input_plugin_t)); + ip = calloc(1, sizeof(cdda_input_plugin_t)); ip->stream = NULL; ip->fd = -1; ip->net_fd = -1; @@ -2637,7 +2637,7 @@ static input_plugin_t *cdda_class_get_instance (input_class_t *cls_gen, xine_str } else return NULL; - this = (cdda_input_plugin_t *) xine_xmalloc (sizeof (cdda_input_plugin_t)); + this = calloc(1, sizeof (cdda_input_plugin_t)); class->ip = this; this->stream = stream; @@ -2726,7 +2726,7 @@ static void *init_plugin (xine_t *xine, void *data) { cdda_input_class_t *this; config_values_t *config; - this = (cdda_input_class_t *) xine_xmalloc (sizeof (cdda_input_class_t)); + this = calloc(1, sizeof (cdda_input_class_t)); this->xine = xine; this->config = xine->config; diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 795b843c5..0ec81026b 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -513,7 +513,7 @@ time_t dvb_mjdtime (char *buf) int i; unsigned int year, month, day, hour, min, sec; unsigned long int mjd; - struct tm *tma = xine_xmalloc(sizeof(struct tm)); + struct tm *tma = calloc(1, sizeof(struct tm)); time_t t; _x_assert(tma != NULL); @@ -577,11 +577,11 @@ static tuner_t *tuner_init(xine_t * xine, int adapter) tuner_t *this; int x; int test_video; - char *video_device=xine_xmalloc(200); + char *video_device=malloc(100); _x_assert(video_device != NULL); - this = (tuner_t *) xine_xmalloc(sizeof(tuner_t)); + this = calloc(1, sizeof(tuner_t)); _x_assert(this != NULL); @@ -922,7 +922,7 @@ static channel_t *load_channels(xine_t *xine, xine_stream_t *stream, int *num_ch continue; if (num_channels >= num_alloc) { - channel_t *new_channels = xine_xmalloc((num_alloc += 32) * sizeof (channel_t)); + channel_t *new_channels = calloc((num_alloc += 32), sizeof (channel_t)); _x_assert(new_channels != NULL); memcpy(new_channels, channels, num_channels * sizeof (channel_t)); free(channels); @@ -1229,7 +1229,7 @@ static void dvb_parse_si(dvb_input_plugin_t *this) { struct pollfd pfd; tuner_t *tuner = this->tuner; - tmpbuffer = xine_xmalloc (8192); + tmpbuffer = calloc(1, 8192); _x_assert(tmpbuffer != NULL); @@ -1437,13 +1437,10 @@ static void load_epg_data(dvb_input_plugin_t *this) already "found" in the stream. This information is used to initialize the channel's EPG structs when the EPG information for the channel is seen in the stream the first time. */ - seen_channels = xine_xmalloc(this->num_channels*sizeof(char)); + seen_channels = calloc(this->num_channels, sizeof(char)); _x_assert(seen_channels != NULL); - for (i = 0; i < this->num_channels; i++) { - seen_channels[i] = 0; - } - foo = xine_xmalloc(8192); + foo = calloc(1, 8192); _x_assert(foo != NULL); fd.fd = this->tuner->fd_pidfilter[EITFILTER]; @@ -1493,19 +1490,19 @@ static void load_epg_data(dvb_input_plugin_t *this) Allocate space for the strings. */ if (current_channel->epg[current_channel->epg_count] == NULL) { current_channel->epg[current_channel->epg_count] = - xine_xmalloc(sizeof(epg_entry_t)); + calloc(1, sizeof(epg_entry_t)); _x_assert(current_channel->epg[current_channel->epg_count] != NULL); current_channel->epg[current_channel->epg_count]->progname = - xine_xmalloc((MAX_EPG_PROGRAM_NAME_LENGTH + 1) * sizeof(char)); + malloc(MAX_EPG_PROGRAM_NAME_LENGTH + 1); _x_assert(current_channel->epg[current_channel->epg_count]->progname != NULL); current_channel->epg[current_channel->epg_count]->description = - xine_xmalloc((MAX_EPG_PROGRAM_DESCRIPTION_LENGTH + 1) * sizeof(char)); + malloc(MAX_EPG_PROGRAM_DESCRIPTION_LENGTH + 1); _x_assert(current_channel->epg[current_channel->epg_count]->description != NULL); current_channel->epg[current_channel->epg_count]->content = - xine_xmalloc((MAX_EPG_CONTENT_TYPE_LENGTH + 1) * sizeof(char)); + malloc(MAX_EPG_CONTENT_TYPE_LENGTH + 1); _x_assert(current_channel->epg[current_channel->epg_count]->content != NULL); current_channel->epg[current_channel->epg_count]->running = 0; @@ -1825,7 +1822,7 @@ static void show_program_info(int x, int y, int max_x, int max_y, int* last_y, if (epg_data == NULL || epg_data->progname == NULL) return; - buffer = xine_xmalloc(512); + buffer = calloc(1, 512); _x_assert(buffer != NULL); @@ -2207,7 +2204,7 @@ static void do_record (dvb_input_plugin_t *this) { this->stream->osd_renderer->hide (this->paused_osd, 0); this->record_paused=0; } else { - t=xine_xmalloc(sizeof(time_t)); + t=calloc(1, sizeof(time_t)); _x_assert(t != NULL); @@ -2876,7 +2873,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) } ptr = this->mrl; ptr += 7; - channels = xine_xmalloc(sizeof(channel_t)); + channels = calloc(1, sizeof(channel_t)); _x_assert(channels != NULL); if (extract_channel_from_string(channels, ptr, tuner->feinfo.type) < 0) { free(channels); @@ -2896,7 +2893,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) } ptr = this->mrl; ptr += 7; - channels = xine_xmalloc(sizeof(channel_t)); + channels = calloc(1, sizeof(channel_t)); _x_assert(channels != NULL); if (extract_channel_from_string(channels, ptr, tuner->feinfo.type) < 0) { free(channels); @@ -2919,7 +2916,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) } ptr = this->mrl; ptr += 7; - channels = xine_xmalloc(sizeof(channel_t)); + channels = calloc(1, sizeof(channel_t)); _x_assert(channels != NULL); if (extract_channel_from_string(channels, ptr, tuner->feinfo.type) < 0) { @@ -2945,7 +2942,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) } ptr = this->mrl; ptr += 7; - channels = xine_xmalloc(sizeof(channel_t)); + channels = calloc(1, sizeof(channel_t)); _x_assert(channels != NULL); if (extract_channel_from_string(channels, ptr, tuner->feinfo.type) < 0) { @@ -3109,7 +3106,7 @@ static input_plugin_t *dvb_class_get_instance (input_class_t *class_gen, fprintf(stderr, "input_dvb: continuing in get_instance\n"); - this = (dvb_input_plugin_t *) xine_xmalloc (sizeof(dvb_input_plugin_t)); + this = calloc(1, sizeof(dvb_input_plugin_t)); _x_assert(this != NULL); @@ -3256,7 +3253,7 @@ static void *init_class (xine_t *xine, void *data) { dvb_input_class_t *this; config_values_t *config = xine->config; - this = (dvb_input_class_t *) xine_xmalloc (sizeof (dvb_input_class_t)); + this = calloc(1, sizeof (dvb_input_class_t)); _x_assert(this != NULL); this->xine = xine; diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 620ce98c4..441a4544b 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -1625,7 +1625,7 @@ static input_plugin_t *dvd_class_get_instance (input_class_t *class_gen, xine_st if (strncasecmp (data, handled_mrl, strlen(handled_mrl) ) != 0) return NULL; - this = (dvd_input_plugin_t *) xine_xmalloc (sizeof (dvd_input_plugin_t)); + this = calloc(1, sizeof (dvd_input_plugin_t)); if (!this) { return NULL; } @@ -1758,7 +1758,7 @@ static void *init_class (xine_t *xine, void *data) { printf("input_dvd.c: config = %p\n", config); #endif - this = (dvd_input_class_t *) xine_xmalloc (sizeof (dvd_input_class_t)); + this = (dvd_input_class_t *) calloc(1, sizeof (dvd_input_class_t)); if (!this) return NULL; diff --git a/src/input/input_file.c b/src/input/input_file.c index 62d0d73d5..3364ef46b 100644 --- a/src/input/input_file.c +++ b/src/input/input_file.c @@ -421,7 +421,7 @@ static input_plugin_t *file_class_get_instance (input_class_t *cls_gen, xine_str return NULL; } - this = (file_input_plugin_t *) xine_xmalloc (sizeof (file_input_plugin_t)); + this = (file_input_plugin_t *) calloc(1, sizeof (file_input_plugin_t)); this->stream = stream; this->mrl = mrl; this->fh = -1; @@ -849,7 +849,7 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, if(num_files >= this->mrls_allocated_entries) { ++this->mrls_allocated_entries; this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[num_files] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[num_files] = calloc(1, sizeof(xine_mrl_t)); } else memset(this->mrls[num_files], 0, sizeof(xine_mrl_t)); @@ -867,7 +867,7 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, if(num_files >= this->mrls_allocated_entries) { ++this->mrls_allocated_entries; this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[num_files] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[num_files] = calloc(1, sizeof(xine_mrl_t)); } else memset(this->mrls[num_files], 0, sizeof(xine_mrl_t)); @@ -885,7 +885,7 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, if(num_files >= this->mrls_allocated_entries) { ++this->mrls_allocated_entries; this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[num_files] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[num_files] = calloc(1, sizeof(xine_mrl_t)); } else memset(this->mrls[num_files], 0, sizeof(xine_mrl_t)); @@ -965,7 +965,7 @@ static void *init_plugin (xine_t *xine, void *data) { file_input_class_t *this; config_values_t *config; - this = (file_input_class_t *) xine_xmalloc (sizeof (file_input_class_t)); + this = (file_input_class_t *) calloc(1, sizeof (file_input_class_t)); this->xine = xine; this->config = xine->config; @@ -979,7 +979,7 @@ static void *init_plugin (xine_t *xine, void *data) { this->input_class.dispose = file_class_dispose; this->input_class.eject_media = NULL; - this->mrls = (xine_mrl_t **) xine_xmalloc(sizeof(xine_mrl_t*)); + this->mrls = (xine_mrl_t **) calloc(1, sizeof(xine_mrl_t*)); this->mrls_allocated_entries = 0; { diff --git a/src/input/input_http.c b/src/input/input_http.c index af696ca14..93198a06e 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -1022,7 +1022,7 @@ static input_plugin_t *http_class_get_instance (input_class_t *cls_gen, xine_str strncasecmp (mrl, "peercast://pls/", 15)) { return NULL; } - this = (http_input_plugin_t *) xine_xmalloc(sizeof(http_input_plugin_t)); + this = calloc(1, sizeof(http_input_plugin_t)); if (!strncasecmp (mrl, "peercast://pls/", 15)) { this->mrl = xine_xmalloc (30 + strlen(mrl) - 15); @@ -1073,7 +1073,7 @@ static void *init_class (xine_t *xine, void *data) { config_values_t *config; char *proxy_env; - this = (http_input_class_t *) xine_xmalloc (sizeof (http_input_class_t)); + this = calloc(1, sizeof (http_input_class_t)); this->xine = xine; this->config = xine->config; diff --git a/src/input/input_mms.c b/src/input/input_mms.c index 6a1e729e6..158b40448 100644 --- a/src/input/input_mms.c +++ b/src/input/input_mms.c @@ -401,7 +401,7 @@ static input_plugin_t *mms_class_get_instance (input_class_t *cls_gen, xine_stre return NULL; } - this = (mms_input_plugin_t *) xine_xmalloc (sizeof (mms_input_plugin_t)); + this = calloc(1, sizeof (mms_input_plugin_t)); cls->ip = this; this->stream = stream; this->mms = NULL; @@ -459,7 +459,7 @@ static void *init_class (xine_t *xine, void *data) { mms_input_class_t *this; - this = (mms_input_class_t *) xine_xmalloc (sizeof (mms_input_class_t)); + this = calloc(1, sizeof (mms_input_class_t)); this->xine = xine; this->ip = NULL; diff --git a/src/input/input_net.c b/src/input/input_net.c index fe78c93f4..391f33a60 100644 --- a/src/input/input_net.c +++ b/src/input/input_net.c @@ -480,7 +480,7 @@ static input_plugin_t *net_class_get_instance (input_class_t *cls_gen, xine_stre return NULL; } - this = xine_xmalloc(sizeof(net_input_plugin_t)); + this = calloc(1, sizeof(net_input_plugin_t)); this->mrl = strdup(mrl); this->host_port = strdup(filename); this->stream = stream; @@ -528,7 +528,7 @@ static void *init_class (xine_t *xine, void *data) { net_input_class_t *this; - this = (net_input_class_t *) xine_xmalloc(sizeof(net_input_class_t)); + this = calloc(1, sizeof(net_input_class_t)); this->config = xine->config; this->xine = xine; diff --git a/src/input/input_pnm.c b/src/input/input_pnm.c index 680c5b1e8..937b7c89b 100644 --- a/src/input/input_pnm.c +++ b/src/input/input_pnm.c @@ -231,7 +231,7 @@ static input_plugin_t *pnm_class_get_instance (input_class_t *cls_gen, xine_stre return NULL; } - this = (pnm_input_plugin_t *) xine_xmalloc (sizeof (pnm_input_plugin_t)); + this = calloc(1, sizeof (pnm_input_plugin_t)); this->stream = stream; this->pnm = NULL; @@ -276,7 +276,7 @@ static void *init_class (xine_t *xine, void *data) { pnm_input_class_t *this; - this = (pnm_input_class_t *) xine_xmalloc (sizeof (pnm_input_class_t)); + this = calloc(1, sizeof (pnm_input_class_t)); this->xine = xine; diff --git a/src/input/input_pvr.c b/src/input/input_pvr.c index 1b8000072..e5c70c64d 100644 --- a/src/input/input_pvr.c +++ b/src/input/input_pvr.c @@ -379,7 +379,7 @@ static void pvrscr_exit (scr_plugin_t *scr) { static pvrscr_t* pvrscr_init (void) { pvrscr_t *this; - this = (pvrscr_t *) xine_xmalloc(sizeof(pvrscr_t)); + this = calloc(1, sizeof(pvrscr_t)); this->scr.interface_version = 3; this->scr.get_priority = pvrscr_get_priority; @@ -1480,7 +1480,7 @@ static input_plugin_t *pvr_class_get_instance (input_class_t *cls_gen, xine_stre mrl = strdup(data); aux = &mrl[5]; - this = (pvr_input_plugin_t *) xine_xmalloc (sizeof (pvr_input_plugin_t)); + this = calloc(1, sizeof (pvr_input_plugin_t)); this->class = cls; this->stream = stream; this->dev_fd = -1; @@ -1564,7 +1564,7 @@ static void *init_plugin (xine_t *xine, void *data) { pvr_input_class_t *this; - this = (pvr_input_class_t *) xine_xmalloc (sizeof (pvr_input_class_t)); + this = calloc(1, sizeof (pvr_input_class_t)); this->xine = xine; this->config = xine->config; diff --git a/src/input/input_rtp.c b/src/input/input_rtp.c index 25498f289..66fcba87e 100644 --- a/src/input/input_rtp.c +++ b/src/input/input_rtp.c @@ -717,7 +717,7 @@ static input_plugin_t *rtp_class_get_instance (input_class_t *cls_gen, } } - this = (rtp_input_plugin_t *) xine_xmalloc(sizeof(rtp_input_plugin_t)); + this = calloc(1, sizeof(rtp_input_plugin_t)); this->stream = stream; this->mrl = mrl; this->filename = filename; @@ -784,7 +784,7 @@ static void *init_class (xine_t *xine, void *data) { rtp_input_class_t *this; - this = (rtp_input_class_t *) xine_xmalloc(sizeof(rtp_input_class_t)); + this = calloc(1, sizeof(rtp_input_class_t)); this->config = xine->config; this->xine = xine; diff --git a/src/input/input_rtsp.c b/src/input/input_rtsp.c index 2895edf5d..8491d0a5d 100644 --- a/src/input/input_rtsp.c +++ b/src/input/input_rtsp.c @@ -246,7 +246,7 @@ static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_str if (strncasecmp (mrl, "rtsp://", 6)) return NULL; - this = (rtsp_input_plugin_t *) xine_xmalloc (sizeof (rtsp_input_plugin_t)); + this = calloc(1, sizeof (rtsp_input_plugin_t)); this->stream = stream; this->rtsp = NULL; @@ -254,7 +254,7 @@ static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_str /* since we handle only real streams yet, we can savely add * an .rm extention to force handling by demux_real. */ - this->public_mrl = xine_xmalloc (sizeof (char)*(strlen(this->mrl)+10)); + this->public_mrl = calloc(strlen(this->mrl)+10, sizeof (char)); sprintf(this->public_mrl, "%s.rm", this->mrl); this->nbc = nbc_init (stream); @@ -298,7 +298,7 @@ static void *init_class (xine_t *xine, void *data) { rtsp_input_class_t *this; - this = (rtsp_input_class_t *) xine_xmalloc (sizeof (rtsp_input_class_t)); + this = calloc(1, sizeof (rtsp_input_class_t)); this->xine = xine; diff --git a/src/input/input_smb.c b/src/input/input_smb.c index 777b80b46..c4706d9f3 100644 --- a/src/input/input_smb.c +++ b/src/input/input_smb.c @@ -359,7 +359,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, ++this->mrls_allocated_entries; this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[num_files] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[num_files] = calloc(1, sizeof(xine_mrl_t)); }else memset(this->mrls[num_files], 0, sizeof(xine_mrl_t)); @@ -376,7 +376,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, ++this->mrls_allocated_entries; this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[num_files] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[num_files] = calloc(1, sizeof(xine_mrl_t)); }else memset(this->mrls[num_files], 0, sizeof(xine_mrl_t)); @@ -475,7 +475,7 @@ smb_class_get_instance (input_class_t *class_gen, xine_stream_t *stream, if (strncmp (mrl, "smb://",6)) return NULL; - this = (smb_input_t *)xine_xmalloc(sizeof(smb_input_t)); + this = calloc(1, sizeof(smb_input_t)); this->stream = stream; this->mrl = strdup (mrl); this->fd = -1; @@ -514,7 +514,7 @@ static void if (smbc_init(smb_auth,(xine->verbosity >= XINE_VERBOSITY_DEBUG))) goto _exit_error; - this = (smb_input_class_t *) xine_xmalloc(sizeof(smb_input_class_t)); + this = calloc(1, sizeof(smb_input_class_t)); this->xine = xine; this->input_class.get_instance = smb_class_get_instance; diff --git a/src/input/input_stdin_fifo.c b/src/input/input_stdin_fifo.c index 465e9c00b..0ae841b4b 100644 --- a/src/input/input_stdin_fifo.c +++ b/src/input/input_stdin_fifo.c @@ -311,7 +311,7 @@ static input_plugin_t *stdin_class_get_instance (input_class_t *class_gen, * => create plugin instance */ - this = (stdin_input_plugin_t *) xine_xmalloc(sizeof(stdin_input_plugin_t)); + this = calloc(1, sizeof(stdin_input_plugin_t)); this->stream = stream; this->curpos = 0; @@ -362,7 +362,7 @@ static void *init_class (xine_t *xine, void *data) { stdin_input_class_t *this; - this = (stdin_input_class_t *) xine_xmalloc (sizeof (stdin_input_class_t)); + this = calloc(1, sizeof (stdin_input_class_t)); this->xine = xine; diff --git a/src/input/input_v4l.c b/src/input/input_v4l.c index d0558b492..7bb5322b5 100644 --- a/src/input/input_v4l.c +++ b/src/input/input_v4l.c @@ -349,7 +349,7 @@ static pvrscr_t* pvrscr_init (void) { pvrscr_t *this; - this = (pvrscr_t *) xine_xmalloc(sizeof(pvrscr_t)); + this = calloc(1, sizeof(pvrscr_t)); this->scr.interface_version = 3; this->scr.get_priority = pvrscr_get_priority; @@ -719,13 +719,13 @@ static void allocate_audio_frames(v4l_input_plugin_t *this) buf_element_t *frame; /* Audio frame */ - frame = xine_xmalloc(sizeof(buf_element_t)); + frame = calloc(1, sizeof(buf_element_t)); frame->content = xine_xmalloc(this->periodsize); frame->type = BUF_AUDIO_LPCM_LE; frame->source = this; frame->free_buffer = store_aud_frame; - frame->extra_info = xine_xmalloc(sizeof(extra_info_t)); + frame->extra_info = calloc(1, sizeof(extra_info_t)); store_aud_frame(frame); } @@ -957,13 +957,13 @@ static int open_video_capture_device(v4l_input_plugin_t *this) for (i = 0; i < NUM_FRAMES; i++) { buf_element_t *frame; - frame = xine_xmalloc (sizeof (buf_element_t)); + frame = calloc(1, sizeof (buf_element_t)); frame->content = xine_xmalloc (this->frame_size); frame->type = this->frame_format; frame->source = this; frame->free_buffer = store_vid_frame; - frame->extra_info = xine_xmalloc(sizeof(extra_info_t)); + frame->extra_info = calloc(1, sizeof(extra_info_t)); store_vid_frame(frame); } @@ -1715,7 +1715,7 @@ static input_plugin_t *v4l_class_get_instance (input_class_t *cls_gen, return NULL; } - this = (v4l_input_plugin_t *) xine_xmalloc (sizeof (v4l_input_plugin_t)); + this = calloc(1, sizeof (v4l_input_plugin_t)); extract_mrl(this, mrl); @@ -1900,7 +1900,7 @@ static void *init_video_class (xine_t *xine, void *data) v4l_input_class_t *this; config_values_t *config = xine->config; - this = (v4l_input_class_t *) xine_xmalloc (sizeof (v4l_input_class_t)); + this = calloc(1, sizeof (v4l_input_class_t)); this->xine = xine; @@ -1934,7 +1934,7 @@ static void *init_radio_class (xine_t *xine, void *data) v4l_input_class_t *this; config_values_t *config = xine->config; - this = (v4l_input_class_t *) xine_xmalloc (sizeof (v4l_input_class_t)); + this = calloc(1, sizeof (v4l_input_class_t)); this->xine = xine; diff --git a/src/input/input_vcd.c b/src/input/input_vcd.c index 007fa5946..02c2e83ab 100644 --- a/src/input/input_vcd.c +++ b/src/input/input_vcd.c @@ -889,7 +889,7 @@ static input_plugin_t *vcd_class_get_instance (input_class_t *cls_gen, xine_stre return 0; } - this = (vcd_input_plugin_t *) xine_xmalloc(sizeof(vcd_input_plugin_t)); + this = calloc(1, sizeof(vcd_input_plugin_t)); this->stream = stream; this->mrl = mrl; @@ -991,7 +991,7 @@ static xine_mrl_t **vcd_class_get_dir (input_class_t *this_gen, const char *file ++this->mrls_allocated_entries; /* note: 1 extra pointer for terminating NULL */ this->mrls = realloc(this->mrls, (this->mrls_allocated_entries+1) * sizeof(xine_mrl_t*)); - this->mrls[(i-1)] = (xine_mrl_t *) xine_xmalloc(sizeof(xine_mrl_t)); + this->mrls[(i-1)] = calloc(1, sizeof(xine_mrl_t)); } else { memset(this->mrls[(i-1)], 0, sizeof(xine_mrl_t)); @@ -1079,7 +1079,7 @@ static void *init_class (xine_t *xine, void *data) { config_values_t *config = xine->config; int i; - this = (vcd_input_class_t *) xine_xmalloc (sizeof (vcd_input_class_t)); + this = calloc(1, sizeof (vcd_input_class_t)); this->xine = xine; @@ -1097,11 +1097,11 @@ static void *init_class (xine_t *xine, void *data) { "you intend to play your VideoCDs with."), 10, device_change_cb, (void *)this); - this->mrls = (xine_mrl_t **) xine_xmalloc(sizeof(xine_mrl_t*)); + this->mrls = calloc(1, sizeof(xine_mrl_t*)); this->mrls_allocated_entries = 0; for (i = 0; i < 100; i++) { - this->filelist[i] = (char *) xine_xmalloc(sizeof(char *) * 256); + this->filelist[i] = calloc(256, sizeof(char)); } return this; diff --git a/src/input/libreal/real.c b/src/input/libreal/real.c index fecf9a794..dc3f00105 100644 --- a/src/input/libreal/real.c +++ b/src/input/libreal/real.c @@ -449,7 +449,7 @@ rmff_header_t *real_parse_sdp(char *data, char **stream_rules, uint32_t bandwidt if (!desc) return NULL; buf=xine_buffer_init(2048); - header = xine_xmalloc(sizeof(rmff_header_t)); + header = calloc(1, sizeof(rmff_header_t)); header->fileheader=rmff_new_fileheader(4+desc->stream_count); header->cont=rmff_new_cont( diff --git a/src/input/libreal/sdpplin.c b/src/input/libreal/sdpplin.c index 9117d15a5..2596391f9 100644 --- a/src/input/libreal/sdpplin.c +++ b/src/input/libreal/sdpplin.c @@ -122,7 +122,7 @@ static int filter(const char *in, const char *filter, char **out) { } static sdpplin_stream_t *sdpplin_parse_stream(char **data) { - sdpplin_stream_t *desc = xine_xmalloc(sizeof(sdpplin_stream_t)); + sdpplin_stream_t *desc = calloc(1, sizeof(sdpplin_stream_t)); char *buf=xine_buffer_init(32); char *decoded=xine_buffer_init(32); int handled; @@ -239,7 +239,7 @@ static sdpplin_stream_t *sdpplin_parse_stream(char **data) { sdpplin_t *sdpplin_parse(char *data) { - sdpplin_t *desc = xine_xmalloc(sizeof(sdpplin_t)); + sdpplin_t *desc = calloc(1, sizeof(sdpplin_t)); sdpplin_stream_t *stream; char *buf=xine_buffer_init(32); char *decoded=xine_buffer_init(32); diff --git a/src/input/librtsp/rtsp_session.c b/src/input/librtsp/rtsp_session.c index 5b02282e9..4e636410d 100644 --- a/src/input/librtsp/rtsp_session.c +++ b/src/input/librtsp/rtsp_session.c @@ -78,7 +78,7 @@ const char *rtsp_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)", rtsp_session_t *rtsp_session_start(xine_stream_t *stream, char *mrl) { - rtsp_session_t *rtsp_session = xine_xmalloc(sizeof(rtsp_session_t)); + rtsp_session_t *rtsp_session = calloc(1, sizeof(rtsp_session_t)); xine_t *xine = stream->xine; char *server; char *mrl_line=strdup(mrl); diff --git a/src/input/mms.c b/src/input/mms.c index 4a073f0ae..97a05dd89 100644 --- a/src/input/mms.c +++ b/src/input/mms.c @@ -680,7 +680,7 @@ mms_t *mms_connect (xine_stream_t *stream, const char *url, int bandwidth) { if (!url) return NULL; - this = (mms_t*) xine_xmalloc (sizeof (mms_t)); + this = calloc(1, sizeof (mms_t)); this->stream = stream; this->url = strdup (url); diff --git a/src/input/mmsh.c b/src/input/mmsh.c index ae1c62bc1..2feb7c37b 100644 --- a/src/input/mmsh.c +++ b/src/input/mmsh.c @@ -636,7 +636,7 @@ mmsh_t *mmsh_connect (xine_stream_t *stream, const char *url, int bandwidth) { report_progress (stream, 0); - this = (mmsh_t*) xine_xmalloc (sizeof (mmsh_t)); + this = calloc(1, sizeof (mmsh_t)); this->stream = stream; this->url = strdup(url); diff --git a/src/input/net_buf_ctrl.c b/src/input/net_buf_ctrl.c index 1a8ae388e..4a39aadfb 100644 --- a/src/input/net_buf_ctrl.c +++ b/src/input/net_buf_ctrl.c @@ -492,7 +492,7 @@ static void nbc_get_cb (fifo_buffer_t *fifo, nbc_t *nbc_init (xine_stream_t *stream) { - nbc_t *this = (nbc_t *) xine_xmalloc (sizeof (nbc_t)); + nbc_t *this = calloc(1, sizeof (nbc_t)); fifo_buffer_t *video_fifo = stream->video_fifo; fifo_buffer_t *audio_fifo = stream->audio_fifo; double video_fifo_factor, audio_fifo_factor; diff --git a/src/input/pnm.c b/src/input/pnm.c index 38d65b850..fca2050d3 100644 --- a/src/input/pnm.c +++ b/src/input/pnm.c @@ -716,7 +716,7 @@ pnm_t *pnm_connect(xine_stream_t *stream, const char *mrl) { mrl_ptr+=6; - p = xine_xmalloc(sizeof(pnm_t)); + p = calloc(1, sizeof(pnm_t)); p->stream = stream; p->port=7070; p->url=strdup(mrl); diff --git a/src/input/vcd/xineplug_inp_vcd.c b/src/input/vcd/xineplug_inp_vcd.c index 2e52ccc0f..d024c5bff 100644 --- a/src/input/vcd/xineplug_inp_vcd.c +++ b/src/input/vcd/xineplug_inp_vcd.c @@ -1767,7 +1767,7 @@ vcd_init (xine_t *xine, void *data) dbg_print(INPUT_DBG_CALL, "Called\n"); - class = (vcd_input_class_t *) xine_xmalloc (sizeof (vcd_input_class_t)); + class = calloc(1, sizeof (vcd_input_class_t)); class->xine = xine; class->config = config = xine->config; -- cgit v1.2.3 From c3744b6736ce45c1c700b7f026fb0acfb0069a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 17:49:47 +0200 Subject: Use asprintf() rather than malloc() + sprintf(). Using asprintf() instead of malloc() + sprintf() reduces the lines of code in xine-lib (moving the allocation to the C library or asprintf replacement), makes it safer to access the string and can also improve performance whenever the value returned by a function was used as parameter, as before it had to run the function twice in almost every case (once for strlen(), once for sprintf()). --- src/input/http_helper.c | 3 +-- src/input/input_dvd.c | 8 ++------ src/input/input_file.c | 15 +++------------ src/input/input_http.c | 3 +-- src/input/input_rtsp.c | 3 +-- src/input/input_smb.c | 30 ++++++++---------------------- src/input/librtsp/rtsp.c | 26 +++++++++++--------------- 7 files changed, 27 insertions(+), 61 deletions(-) (limited to 'src/input') diff --git a/src/input/http_helper.c b/src/input/http_helper.c index 4883763b0..279d3ff05 100644 --- a/src/input/http_helper.c +++ b/src/input/http_helper.c @@ -240,8 +240,7 @@ char *_x_canonicalise_url (const char *base, const char *url) { ++cut; } base_length = cut ? (size_t)(cut - base) : strlen (base); - ret = malloc (base_length + strlen (url) + 1); - sprintf (ret, "%.*s%s", (int)base_length, base, url); + asprintf (&ret, "%.*s%s", (int)base_length, base, url); return ret; } diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 441a4544b..ef5f1e055 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -1369,10 +1369,7 @@ check_solaris_vold_device(dvd_input_class_t *this) (volume_action = getenv("VOLUME_ACTION")) != NULL && strcmp(volume_action, "insert") == 0) { - device = malloc(strlen(volume_device) + strlen(volume_name) + 2); - if (device == NULL) - return; - sprintf(device, "%s/%s", volume_device, volume_name); + asprintf(&device, "%s/%s", volume_device, volume_name); if (stat(device, &stb) != 0 || !S_ISCHR(stb.st_mode)) { free(device); return; @@ -1820,8 +1817,7 @@ static void *init_class (xine_t *xine, void *data) { "playing scrambled DVDs."), 20, NULL, NULL); xine_setenv("DVDCSS_METHOD", decrypt_modes[mode], 0); - css_cache_default = (char *)malloc(strlen(xine_get_homedir()) + 10); - sprintf(css_cache_default, "%s/.dvdcss/", xine_get_homedir()); + asprintf(&css_cache_default, "%s/.dvdcss/", xine_get_homedir()); css_cache = config->register_filename(config, "media.dvd.css_cache_path", css_cache_default, XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("path to the title key cache"), _("Since cracking the copy protection of scrambled DVDs can " diff --git a/src/input/input_file.c b/src/input/input_file.c index 3364ef46b..f07c9e93c 100644 --- a/src/input/input_file.c +++ b/src/input/input_file.c @@ -708,11 +708,8 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, } else { - dir_files[num_dir_files].mrl = (char *) - xine_xmalloc(strlen(current_dir_slashed) + 1 + strlen(pdirent->d_name) + 1); - dir_files[num_dir_files].origin = strdup(current_dir); - sprintf(dir_files[num_dir_files].mrl, "%s%s", + asprintf(&(dir_files[num_dir_files].mrl), "%s%s", current_dir_slashed, pdirent->d_name); dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = get_file_type(fullfilename, current_dir, this->xine); @@ -746,11 +743,8 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, /* if user don't want to see hidden files, ignore them */ if(this->show_hidden_files) { - hide_files[num_hide_files].mrl = (char *) - xine_xmalloc(strlen(current_dir_slashed) + 1 + strlen(pdirent->d_name) + 1); - hide_files[num_hide_files].origin = strdup(current_dir); - sprintf(hide_files[num_hide_files].mrl, "%s%s", + asprintf(&(hide_files[num_hide_files].mrl), "%s%s", current_dir_slashed, pdirent->d_name); hide_files[num_hide_files].link = NULL; hide_files[num_hide_files].type = get_file_type(fullfilename, current_dir, this->xine); @@ -782,11 +776,8 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, } /* So a *normal* one. */ else { - norm_files[num_norm_files].mrl = (char *) - xine_xmalloc(strlen(current_dir_slashed) + 1 + strlen(pdirent->d_name) + 1); - norm_files[num_norm_files].origin = strdup(current_dir); - sprintf(norm_files[num_norm_files].mrl, "%s%s", + asprintf(&(norm_files[num_norm_files].mrl), "%s%s", current_dir_slashed, pdirent->d_name); norm_files[num_norm_files].link = NULL; norm_files[num_norm_files].type = get_file_type(fullfilename, current_dir, this->xine); diff --git a/src/input/input_http.c b/src/input/input_http.c index 93198a06e..0e9345731 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -1025,8 +1025,7 @@ static input_plugin_t *http_class_get_instance (input_class_t *cls_gen, xine_str this = calloc(1, sizeof(http_input_plugin_t)); if (!strncasecmp (mrl, "peercast://pls/", 15)) { - this->mrl = xine_xmalloc (30 + strlen(mrl) - 15); - sprintf (this->mrl, "http://127.0.0.1:7144/stream/%s", mrl+15); + asprintf (&this->mrl, "http://127.0.0.1:7144/stream/%s", mrl+15); } else { this->mrl = strdup (mrl); } diff --git a/src/input/input_rtsp.c b/src/input/input_rtsp.c index 8491d0a5d..db16c9bc6 100644 --- a/src/input/input_rtsp.c +++ b/src/input/input_rtsp.c @@ -254,8 +254,7 @@ static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_str /* since we handle only real streams yet, we can savely add * an .rm extention to force handling by demux_real. */ - this->public_mrl = calloc(strlen(this->mrl)+10, sizeof (char)); - sprintf(this->public_mrl, "%s.rm", this->mrl); + asprintf(&this->public_mrl, "%s.rm", this->mrl); this->nbc = nbc_init (stream); diff --git a/src/input/input_smb.c b/src/input/input_smb.c index c4706d9f3..dbab772c9 100644 --- a/src/input/input_smb.c +++ b/src/input/input_smb.c @@ -265,9 +265,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup(current_path); - dir_files[num_dir_files].mrl = (char *) xine_xmalloc( - strlen(current_path) + 1 + strlen(pdirent->name) + 1); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", current_path, pdirent->name); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", current_path, pdirent->name); dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; }else if (pdirent->smbc_type == SMBC_SERVER){ @@ -275,17 +273,14 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup("smb:/"); - dir_files[num_dir_files].mrl = (char *) xine_xmalloc(strlen("smb:/") + 4); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", "smb:/", ".."); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", "smb:/", ".."); dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; } dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup("smb:/"); - dir_files[num_dir_files].mrl = - (char *) xine_xmalloc(strlen("smb:/") + 1 + strlen(pdirent->name) + 1); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", "smb:/", pdirent->name); + asprintf(*(dir_files[num_dir_files].mrl), "%s/%s", "smb:/", pdirent->name); dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; } else if (pdirent->smbc_type == SMBC_FILE_SHARE){ @@ -293,9 +288,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup(current_path); - dir_files[num_dir_files].mrl = (char *) xine_xmalloc( - strlen(current_path) + 3); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", current_path, ".."); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", current_path, ".."); dir_files[num_dir_files].type |= mrl_file_directory; dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; @@ -304,9 +297,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup(current_path); - dir_files[num_dir_files].mrl = (char *) xine_xmalloc( - strlen(current_path) + 1 + strlen(pdirent->name) + 1); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", current_path, pdirent->name); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", current_path, pdirent->name); dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; } @@ -314,18 +305,14 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].origin = strdup(current_path); - dir_files[num_dir_files].mrl = - (char *) xine_xmalloc(strlen(current_path) + 1 + strlen(pdirent->name) + 1); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", current_path, pdirent->name); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", current_path, pdirent->name); dir_files[num_dir_files].size = pdirent->dirlen; num_dir_files ++; }else if (pdirent->smbc_type == SMBC_FILE){ norm_files[num_norm_files].link = NULL; norm_files[num_norm_files].type = mrl_file | mrl_file_normal; norm_files[num_norm_files].origin = strdup(current_path); - norm_files[num_norm_files].mrl = - (char *) xine_xmalloc(strlen(current_path) + 1 + strlen(pdirent->name) + 1); - sprintf(norm_files[num_norm_files].mrl, "%s/%s", current_path, pdirent->name); + asprintf(&(norm_files[num_norm_files].mrl), "%s/%s", current_path, pdirent->name); norm_files[num_norm_files].size = pdirent->dirlen; num_norm_files ++; } @@ -335,8 +322,7 @@ static xine_mrl_t **smb_class_get_dir (input_class_t *this_gen, if (num_dir_files == 0) { dir_files[num_dir_files].link = NULL; dir_files[num_dir_files].origin = strdup(current_path); - dir_files[num_dir_files].mrl = (char *) xine_xmalloc(strlen(current_path) + 4); - sprintf(dir_files[num_dir_files].mrl, "%s/%s", current_path, ".."); + asprintf(&(dir_files[num_dir_files].mrl), "%s/%s", current_path, ".."); dir_files[num_dir_files].type = mrl_file | mrl_file_directory; dir_files[num_dir_files].size = 0; num_dir_files ++; diff --git a/src/input/librtsp/rtsp.c b/src/input/librtsp/rtsp.c index 530ffc6cf..beb77d8b4 100644 --- a/src/input/librtsp/rtsp.c +++ b/src/input/librtsp/rtsp.c @@ -21,6 +21,10 @@ * *not* RFC 2326 compilant yet. */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -173,9 +177,7 @@ static void rtsp_send_request(rtsp_t *s, const char *type, const char *what) { char **payload=s->scheduled; char *buf; - buf = malloc(strlen(type)+strlen(what)+strlen(rtsp_protocol_version)+3); - - sprintf(buf,"%s %s %s",type, what, rtsp_protocol_version); + asprintf(&buf,"%s %s %s",type, what, rtsp_protocol_version); rtsp_put(s,buf); free(buf); if (payload) @@ -200,8 +202,7 @@ static void rtsp_schedule_standard(rtsp_t *s) { if (s->session) { char *buf; - buf = malloc(strlen(s->session)+15); - sprintf(buf, "Session: %s", s->session); + asprintf(&buf, "Session: %s", s->session); rtsp_schedule_field(s, buf); free(buf); } @@ -304,8 +305,7 @@ int rtsp_request_options(rtsp_t *s, const char *what) { buf=strdup(what); } else { - buf = malloc(sizeof(char)*(strlen(s->host)+16)); - sprintf(buf,"rtsp://%s:%i", s->host, s->port); + asprintf(&buf,"rtsp://%s:%i", s->host, s->port); } rtsp_send_request(s,"OPTIONS",buf); free(buf); @@ -321,8 +321,7 @@ int rtsp_request_describe(rtsp_t *s, const char *what) { buf=strdup(what); } else { - buf = malloc(sizeof(char)*(strlen(s->host)+strlen(s->path)+16)); - sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); + asprintf(&buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); } rtsp_send_request(s,"DESCRIBE",buf); free(buf); @@ -345,8 +344,7 @@ int rtsp_request_setparameter(rtsp_t *s, const char *what) { buf=strdup(what); } else { - buf = malloc(sizeof(char)*(strlen(s->host)+strlen(s->path)+16)); - sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); + asprintf(&buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); } rtsp_send_request(s,"SET_PARAMETER",buf); free(buf); @@ -362,8 +360,7 @@ int rtsp_request_play(rtsp_t *s, const char *what) { buf=strdup(what); } else { - buf = malloc(sizeof(char)*(strlen(s->host)+strlen(s->path)+16)); - sprintf(buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); + asprintf(&buf,"rtsp://%s:%i/%s", s->host, s->port, s->path); } rtsp_send_request(s,"PLAY",buf); free(buf); @@ -412,8 +409,7 @@ int rtsp_read_data(rtsp_t *s, char *buffer, unsigned int size) { } /* lets make the server happy */ rtsp_put(s, "RTSP/1.0 451 Parameter Not Understood"); - rest = malloc(sizeof(char)*17); - sprintf(rest,"CSeq: %u", seq); + asprintf(&rest,"CSeq: %u", seq); rtsp_put(s, rest); free(rest); rtsp_put(s, ""); -- cgit v1.2.3 From 837822b5c6924be7fbc297bcef9639d7ada95a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 17:53:58 +0200 Subject: Simplify MRL_FREE and MRL_DUPLICATE macros. There is no need to check if a pointer is not NULL before freeing it, so just call free() during MRL_FREE. During duplication, always prefer freeing and recreating to reallocating, as that would probably take more time than would actually be needed to allocate a new memory area. Also, most likely the duplication will happen on a new instance. --- src/input/input_plugin.h | 83 ++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 55 deletions(-) (limited to 'src/input') diff --git a/src/input/input_plugin.h b/src/input/input_plugin.h index 1d1e5cf53..4790164d5 100644 --- a/src/input/input_plugin.h +++ b/src/input/input_plugin.h @@ -333,65 +333,38 @@ struct input_plugin_s { /* * Freeing/zeroing all of entries of given mrl. */ -#define MRL_ZERO(m) { \ - if((m)) { \ - if((m)->origin) \ - free((m)->origin); \ - if((m)->mrl) \ - free((m)->mrl); \ - if((m)->link) \ - free((m)->link); \ - (m)->origin = NULL; \ - (m)->mrl = NULL; \ - (m)->link = NULL; \ - (m)->type = 0; \ - (m)->size = (off_t) 0; \ - } \ -} +#define MRL_ZERO(m) { \ + if((m)) { \ + free((m)->origin); \ + free((m)->mrl); \ + free((m)->link); \ + (m)->origin = NULL; \ + (m)->mrl = NULL; \ + (m)->link = NULL; \ + (m)->type = 0; \ + (m)->size = (off_t) 0; \ + } \ + } /* * Duplicate two mrls entries (s = source, d = destination). */ -#define MRL_DUPLICATE(s, d) { \ - _x_assert((s) != NULL); \ - _x_assert((d) != NULL); \ - \ - if((s)->origin) { \ - if((d)->origin) { \ - (d)->origin = (char *) realloc((d)->origin, strlen((s)->origin) + 1); \ - sprintf((d)->origin, "%s", (s)->origin); \ - } \ - else \ - (d)->origin = strdup((s)->origin); \ - } \ - else \ - (d)->origin = NULL; \ - \ - if((s)->mrl) { \ - if((d)->mrl) { \ - (d)->mrl = (char *) realloc((d)->mrl, strlen((s)->mrl) + 1); \ - sprintf((d)->mrl, "%s", (s)->mrl); \ - } \ - else \ - (d)->mrl = strdup((s)->mrl); \ - } \ - else \ - (d)->mrl = NULL; \ - \ - if((s)->link) { \ - if((d)->link) { \ - (d)->link = (char *) realloc((d)->link, strlen((s)->link) + 1); \ - sprintf((d)->link, "%s", (s)->link); \ - } \ - else \ - (d)->link = strdup((s)->link); \ - } \ - else \ - (d)->link = NULL; \ - \ - (d)->type = (s)->type; \ - (d)->size = (s)->size; \ -} +#define MRL_DUPLICATE(s, d) { \ + _x_assert((s) != NULL); \ + _x_assert((d) != NULL); \ + \ + free((d)->origin); \ + (d)->origin = (s)->origin ? strdup((s)->origin) : NULL; \ + \ + free((d)->mrl); \ + (d)->mrl = (s)->mrl ? strdup((s)->mrl) : NULL; \ + \ + free((d)->link); \ + (d)->link = (s)->link ? strdup((s)->link) : NULL; \ + \ + (d)->type = (s)->type; \ + (d)->size = (s)->size; \ + } /* * Duplicate two arrays of mrls (s = source, d = destination). -- cgit v1.2.3 From bbb2643bdcc8fb3d7f29c11e1344286b042535bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 18:06:56 +0200 Subject: Use proper string functions in place of sn?printf. Instead of calling sprintf or snprintf with a "%s" format string, use the proper strcpy, strncpy, strdup or strndup function. --- src/input/input_dvb.c | 5 ++--- src/input/input_dvd.c | 4 ++-- src/input/input_vcd.c | 11 ++--------- src/input/vcd/xineplug_inp_vcd.c | 4 +--- 4 files changed, 7 insertions(+), 17 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 0ec81026b..bccbc13be 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -1839,8 +1839,7 @@ static void show_program_info(int x, int y, int max_x, int max_y, int* last_y, /*Content type and rating, if any. */ if (strlen(epg_data->content) > 3) { - - snprintf(buffer, 94, "%s", epg_data->content); + strncpy(buffer, epg_data->content, 94-1); prog_rating = epg_data->rating; if (prog_rating > 0) { @@ -1870,7 +1869,7 @@ static void show_program_info(int x, int y, int max_x, int max_y, int* last_y, /* Print the description. */ if (epg_data->description && strlen(epg_data->description) > 0) { renderer->set_font(osd, "sans", EPG_DESCRIPTION_FONT_SIZE); - sprintf(buffer, "%s", epg_data->description); + strcpy(buffer, epg_data->description); /* If the description is not complete (i.e., there is no comma at the end), add "..." to the end. In my locale they often seem to send incomplete description texts :( */ diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index ef5f1e055..012d695ec 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -1313,7 +1313,7 @@ static int dvd_plugin_get_optional_data (input_plugin_t *this_gen, if(this && this->stream && this->dvdnav) { if(!(dvdnav_is_domain_vts(this->dvdnav))) { - sprintf(data, "%s", "menu"); + strcpy(data, "menu"); if (channel <= 0) return INPUT_OPTIONAL_SUCCESS; else @@ -1336,7 +1336,7 @@ static int dvd_plugin_get_optional_data (input_plugin_t *this_gen, return INPUT_OPTIONAL_SUCCESS; } else { if(channel == -1) { - sprintf(data, "%s", "none"); + strcpy(data, "none"); return INPUT_OPTIONAL_SUCCESS; } } diff --git a/src/input/input_vcd.c b/src/input/input_vcd.c index 02c2e83ab..760037e93 100644 --- a/src/input/input_vcd.c +++ b/src/input/input_vcd.c @@ -997,16 +997,9 @@ static xine_mrl_t **vcd_class_get_dir (input_class_t *this_gen, const char *file memset(this->mrls[(i-1)], 0, sizeof(xine_mrl_t)); } - if(this->mrls[(i-1)]->mrl) { - this->mrls[(i-1)]->mrl = (char *) - realloc(this->mrls[(i-1)]->mrl, strlen(mrl) + 1); - } - else { - this->mrls[(i-1)]->mrl = (char *) xine_xmalloc(strlen(mrl) + 1); - } - this->mrls[i-1]->origin = NULL; - sprintf(this->mrls[i-1]->mrl, "%s", mrl); + free(this->mrls[(i-1)]->mrl); + this->mrls[i-1]->mrl = strdup(mrl); this->mrls[i-1]->link = NULL; this->mrls[i-1]->type = (0 | mrl_vcd); diff --git a/src/input/vcd/xineplug_inp_vcd.c b/src/input/vcd/xineplug_inp_vcd.c index d024c5bff..f4f823918 100644 --- a/src/input/vcd/xineplug_inp_vcd.c +++ b/src/input/vcd/xineplug_inp_vcd.c @@ -272,11 +272,9 @@ vcd_add_mrl_slot(vcd_input_class_t *this, const char *mrl, off_t size, this->mrls[*i]->type = mrl_vcd; this->mrls[*i]->size = size * M2F2_SECTOR_SIZE; - this->mrls[*i]->mrl = (char *) malloc(strlen(mrl) + 1); + this->mrls[*i]->mrl = strdup(mrl); if (NULL==this->mrls[*i]->mrl) { LOG_ERR("Can't malloc %zu bytes for MRL name %s", sizeof(xine_mrl_t), mrl); - } else { - sprintf(this->mrls[*i]->mrl, "%s", mrl); } (*i)++; } -- cgit v1.2.3 From 657a953d5d2807ed99eddf7b45a4dc46cef626d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 18:23:55 +0200 Subject: Use strn?dup instead of alloc + strn?cpy. Whenever an allocated memory area is immediately filled in with a string through strcpy() or strncpy(), replace the calls with the appropriate strn?dup(). --- src/input/input_file.c | 15 +++++++-------- src/input/librtsp/rtsp.c | 4 +--- src/input/pnm.c | 8 +++++--- 3 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src/input') diff --git a/src/input/input_file.c b/src/input/input_file.c index f07c9e93c..774f6b081 100644 --- a/src/input/input_file.c +++ b/src/input/input_file.c @@ -727,8 +727,9 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, xprintf (this->xine, XINE_VERBOSITY_DEBUG, "input_file: readlink() failed: %s\n", strerror(errno)); else { - dir_files[num_dir_files].link = (char *) xine_xmalloc(linksize + 1); - strncpy(dir_files[num_dir_files].link, linkbuf, linksize); + dir_files[num_dir_files].link = + strndup(linkbuf, linksize); + dir_files[num_dir_files].type |= get_file_type(dir_files[num_dir_files].link, current_dir, this->xine); } } @@ -763,9 +764,8 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, "input_file: readlink() failed: %s\n", strerror(errno)); } else { - hide_files[num_hide_files].link = (char *) - xine_xmalloc(linksize + 1); - strncpy(hide_files[num_hide_files].link, linkbuf, linksize); + hide_files[num_hide_files].link = + strndup(linkbuf, linksize); hide_files[num_hide_files].type |= get_file_type(hide_files[num_hide_files].link, current_dir, this->xine); } } @@ -796,9 +796,8 @@ static xine_mrl_t **file_class_get_dir (input_class_t *this_gen, "input_file: readlink() failed: %s\n", strerror(errno)); } else { - norm_files[num_norm_files].link = (char *) - xine_xmalloc(linksize + 1); - strncpy(norm_files[num_norm_files].link, linkbuf, linksize); + norm_files[num_norm_files].link = + strndup(linkbuf, linksize); norm_files[num_norm_files].type |= get_file_type(norm_files[num_norm_files].link, current_dir, this->xine); } } diff --git a/src/input/librtsp/rtsp.c b/src/input/librtsp/rtsp.c index beb77d8b4..99f0da665 100644 --- a/src/input/librtsp/rtsp.c +++ b/src/input/librtsp/rtsp.c @@ -482,9 +482,7 @@ rtsp_t *rtsp_connect(xine_stream_t *stream, const char *mrl, const char *user_ag pathbegin=slash-mrl_ptr; hostend=colon-mrl_ptr; - s->host = malloc(sizeof(char)*hostend+1); - strncpy(s->host, mrl_ptr, hostend); - s->host[hostend]=0; + s->host = strndup(mrl_ptr, hostend); if (pathbegin < strlen(mrl_ptr)) s->path=strdup(mrl_ptr+pathbegin+1); if (colon != slash) { diff --git a/src/input/pnm.c b/src/input/pnm.c index edd7a5d71..47a24a620 100644 --- a/src/input/pnm.c +++ b/src/input/pnm.c @@ -21,6 +21,10 @@ * based upon code from joschka */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include #include @@ -732,9 +736,7 @@ pnm_t *pnm_connect(xine_stream_t *stream, const char *mrl) { pathbegin=slash-mrl_ptr; hostend=colon-mrl_ptr; - p->host = malloc(sizeof(char)*hostend+1); - strncpy(p->host, mrl_ptr, hostend); - p->host[hostend]=0; + p->host = strndup(mrl_ptr, hostend); if (pathbegin < strlen(mrl_ptr)) p->path=strdup(mrl_ptr+pathbegin+1); if (colon != slash) { -- cgit v1.2.3 From e16d7dddf1ef1df0c8a00f01fede497521134b74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 18:38:38 +0200 Subject: Replace strn?cpy() + strn?cat() calls with a?sprintf(). Instead of creating strings through a series os string copy and concatenations, use directly the appropriate printf-like function. --- src/input/input_dvb.c | 22 ++++++++++------------ src/input/input_http.c | 20 +++++--------------- 2 files changed, 15 insertions(+), 27 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index bccbc13be..121e11b11 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -66,14 +66,14 @@ * OSD - this will allow for filtering/searching of epg data - useful for automatic recording :) */ +#ifdef HAVE_CONFIG_H +#include +#endif + /* pthread.h must be included first so rest of the headers are imported thread safely (on some systems). */ #include -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - #include #include #include @@ -3222,21 +3222,19 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, for (ch = 0, apch = !!lastchannel_enable.num_value; ch < num_channels && ch < MAX_AUTOCHANNELS; ++ch, ++apch) { - snprintf(foobuffer, BUFSIZE, "dvb://%s", channels[ch].name); - free(class->autoplaylist[apch]); - class->autoplaylist[apch] = strdup(foobuffer); - _x_assert(class->autoplaylist[apch] != NULL); + free(class->autoplaylist[apch]); + asprintf(&(class->autoplaylist[apch]), "dvb://%s", channels[ch].name); + _x_assert(class->autoplaylist[apch] != NULL); } if (lastchannel_enable.num_value){ + free(class->autoplaylist[0]); if (default_channel != -1) /* plugin has been used before - channel is valid */ - sprintf (foobuffer, "dvb://%s", channels[default_channel].name); + asprintf (&(class->autoplaylist[0]), "dvb://%s", channels[default_channel].name); else /* set a reasonable default - the first channel */ - sprintf (foobuffer, "dvb://%s", num_channels ? channels[0].name : "0"); - free(class->autoplaylist[0]); - class->autoplaylist[0]=strdup(foobuffer); + asprintf (&(class->autoplaylist[0]), "dvb://%s", num_channels ? channels[0].name : "0"); } free_channel_list(channels, num_channels); diff --git a/src/input/input_http.c b/src/input/input_http.c index 0e9345731..3b091e7cb 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -235,26 +235,16 @@ static int http_plugin_basicauth (const char *user, const char *password, char* char *tmp; char *sptr; char *dptr; - int totlen; + size_t count; int enclen; - int count; - totlen = strlen (user) + 1; - if(password != NULL) - totlen += strlen (password); - - enclen = ((totlen + 2) / 3 ) * 4 + 1; + count = asprintf(&tmp, "%s:%s", user, (password != NULL) ? password : ""); + + enclen = ((count + 2) / 3 ) * 4 + 1; if (len < enclen) return -1; - - tmp = malloc (sizeof(char) * (totlen + 1)); - strcpy (tmp, user); - strcat (tmp, ":"); - if (password != NULL) - strcat (tmp, password); - - count = strlen(tmp); + sptr = tmp; dptr = dest; while (count >= 3) { -- cgit v1.2.3 From 76a5b22625edfc46109064298682fb1ecdefb216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 18:47:59 +0200 Subject: Cleanup http_proxy environment variable handling. Instead of duplicating twice the http_proxy environment variable value, do so only once, avoid a strlen() call when checking if the string is not empty, remove the http_proxy variable entirely, don't free the duplicated string as that's what it's used. --- src/input/input_http.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/input') diff --git a/src/input/input_http.c b/src/input/input_http.c index 3b091e7cb..deaaa0719 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -1079,25 +1079,21 @@ static void *init_class (xine_t *xine, void *data) { /* * honour http_proxy envvar */ - if((proxy_env = getenv("http_proxy")) && (strlen(proxy_env))) { + if((proxy_env = getenv("http_proxy")) && *proxy_env) { int proxy_port = DEFAULT_HTTP_PORT; - char *http_proxy = xine_xmalloc(strlen(proxy_env) + 1); char *p; if(!strncmp(proxy_env, "http://", 7)) proxy_env += 7; + + this->proxyhost_env = strdup(proxy_env); - sprintf(http_proxy, "%s", proxy_env); - - if((p = strrchr(&http_proxy[0], ':')) && (strlen(p) > 1)) { + if((p = strrchr(this->proxyhost_env, ':')) && (strlen(p) > 1)) { *p++ = '\0'; proxy_port = (int) strtol(p, &p, 10); } - this->proxyhost_env = strdup(http_proxy); this->proxyport_env = proxy_port; - - free(http_proxy); } else proxy_env = NULL; /* proxy_env can be "" */ -- cgit v1.2.3 From 05ad91eb1a7b46c3e0938aa8e9f0b6e23193691a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 19:33:35 +0200 Subject: Centralise frames allocation for input_v4l. Allocate all the frames, the extra info data and the audio and video content areas as one big memory area each. This also remove some use of xine_xmalloc(). --- src/input/input_v4l.c | 129 ++++++++++++++++++++++---------------------------- 1 file changed, 56 insertions(+), 73 deletions(-) (limited to 'src/input') diff --git a/src/input/input_v4l.c b/src/input/input_v4l.c index 7bb5322b5..e010132ec 100644 --- a/src/input/input_v4l.c +++ b/src/input/input_v4l.c @@ -120,6 +120,10 @@ typedef struct { int old_zoomx; int old_zoomy; int audio_only; + + buf_element_t *frames_base; + void *audio_content_base; + void *video_content_base; /* Audio */ buf_element_t *aud_frames; @@ -711,23 +715,50 @@ static int search_by_channel(v4l_input_plugin_t *this, char *input_source) return 1; } -static void allocate_audio_frames(v4l_input_plugin_t *this) +static void allocate_frames(v4l_input_plugin_t *this, unsigned dovideo) { + const size_t framescount = dovideo ? 2*NUM_FRAMES : NUM_FRAMES; + + /* Allocate a single memory area for both audio and video frames */ + buf_element_t *frames = this->frames_base = + calloc(framescount, sizeof(buf_element_t)); + extra_info_t *infos = + calloc(framescount, sizeof(extra_info_t)); + int i; - + + uint8_t *audio_content = this->audio_content_base = + calloc(NUM_FRAMES, this->periodsize); + + /* Set up audio frames */ for (i = 0; i < NUM_FRAMES; i++) { - buf_element_t *frame; - /* Audio frame */ - frame = calloc(1, sizeof(buf_element_t)); - - frame->content = xine_xmalloc(this->periodsize); - frame->type = BUF_AUDIO_LPCM_LE; - frame->source = this; - frame->free_buffer = store_aud_frame; - frame->extra_info = calloc(1, sizeof(extra_info_t)); - - store_aud_frame(frame); + frames[i].content = audio_content; + frames[i].type = BUF_AUDIO_LPCM_LE; + frames[i].source = this; + frames[i].free_buffer = store_aud_frame; + frames[i].extra_info = &infos[i]; + + audio_content += this->periodsize; + store_aud_frame(&frames[i]); + } + + if ( dovideo ) { + uint8_t *video_content = this->video_content_base = + calloc(NUM_FRAMES, this->frame_size); + + /* Set up video frames */ + for (i = NUM_FRAMES; i < 2*NUM_FRAMES; i++) { + /* Video frame */ + frames[i].content = video_content; + frames[i].type = this->frame_format; + frames[i].source = this; + frames[i].free_buffer = store_vid_frame; + frames[i].extra_info = &infos[i]; + + video_content += this->frame_size; + store_vid_frame(&frames[i]); + } } } @@ -778,7 +809,7 @@ static int open_radio_capture_device(v4l_input_plugin_t *this) /* Pre-allocate some frames for audio so it doesn't have to be done during * capture */ - allocate_audio_frames(this); + allocate_frames(this, 0); this->audio_only = 1; @@ -850,7 +881,7 @@ static int open_video_capture_device(v4l_input_plugin_t *this) /* Pre-allocate some frames for audio and video so it doesn't have to be * done during capture */ - allocate_audio_frames(this); + allocate_frames(this, 1); /* Unmute audio off video capture device */ unmute_audio(this); @@ -954,20 +985,6 @@ static int open_video_capture_device(v4l_input_plugin_t *this) break; } - for (i = 0; i < NUM_FRAMES; i++) { - buf_element_t *frame; - - frame = calloc(1, sizeof (buf_element_t)); - - frame->content = xine_xmalloc (this->frame_size); - frame->type = this->frame_format; - frame->source = this; - frame->free_buffer = store_vid_frame; - frame->extra_info = calloc(1, sizeof(extra_info_t)); - - store_vid_frame(frame); - } - /* Strip the vbi / sync signal from the image by zooming in */ this->old_zoomx = xine_get_param(this->stream, XINE_PARAM_VO_ZOOM_X); this->old_zoomy = xine_get_param(this->stream, XINE_PARAM_VO_ZOOM_Y); @@ -1569,52 +1586,18 @@ static void v4l_plugin_dispose (input_plugin_t *this_gen) { if (this->event_queue) xine_event_dispose_queue (this->event_queue); - - lprintf("Freeing allocated audio frames"); - if (this->aud_frames) { - buf_element_t *cur_frame = this->aud_frames; - - while (cur_frame != NULL) { - buf_element_t *next_frame = cur_frame->next; -#ifdef LOG - printf("."); -#endif - if (cur_frame->content) - free(cur_frame->content); - - if (cur_frame->extra_info) - free(cur_frame->extra_info); - - free(cur_frame); - cur_frame = next_frame; - } - } -#ifdef LOG - printf("\n"); -#endif + /* All the frames, both video and audio, are allocated in a single + memory area pointed by the frames_base pointer. The content of + the frames is divided in two areas, one pointed by + audio_content_base and the other by video_content_base. The + extra_info structures are all allocated in the first frame + data. */ + free(this->audio_content_base); + free(this->video_content_base); + free(this->frames_base->extra_info); + free(this->frames_base); - - lprintf("Freeing allocated video frames"); - if (this->vid_frames) { - buf_element_t *cur_frame = this->vid_frames; - - while (cur_frame != NULL) { - buf_element_t *next_frame = cur_frame->next; -#ifdef LOG - printf("."); -#endif - - if (cur_frame->content) - free(cur_frame->content); - - if (cur_frame->extra_info) - free(cur_frame->extra_info); - - free(cur_frame); - cur_frame = next_frame; - } - } #ifdef LOG printf("\n"); #endif -- cgit v1.2.3 From 6c804046b36cdb413a78e2cb3225f9980c5842dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 19:53:17 +0200 Subject: Optimise input_vcd: don't use a static-sized filelist array, and use asprintf where appropriate. Instead of creating a 100-elements filelist array, with each element containing a 256 bytes string, make it dynamic, create it when get_autoplay_list is called, free it if it was present before, and use asprintf() for creating the entries. This not only reduces the complexity of the code, but also reduces the size of the input class object (which in turn reduce memory usage), but also avoids memory leaks that the previous code certainly had. The total memory used even with a full list of files should also be drastically reduced. Also, use asprintf while filling the mrls data, rather than allocating a 1 KiB array on the stack, and use it as temporary. --- src/input/input_vcd.c | 52 +++++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 29 deletions(-) (limited to 'src/input') diff --git a/src/input/input_vcd.c b/src/input/input_vcd.c index 760037e93..90f6fcc70 100644 --- a/src/input/input_vcd.c +++ b/src/input/input_vcd.c @@ -84,7 +84,7 @@ typedef struct { const char *device; - char *filelist[100]; + char **filelist; int mrls_allocated_entries; xine_mrl_t **mrls; @@ -924,6 +924,18 @@ static const char *vcd_class_get_identifier (input_class_t *this_gen) { return "vcdo"; } +static void vcd_filelist_dispose(vcd_input_class_t *this) { + if ( this->filelist == NULL ) return; + + char **entry = this->filelist; + + while(*(entry)) { + free(*(entry++)); + } + + free(this->filelist); +} + static void vcd_class_dispose (input_class_t *this_gen) { vcd_input_class_t *this = (vcd_input_class_t *) this_gen; @@ -932,9 +944,7 @@ static void vcd_class_dispose (input_class_t *this_gen) { config->unregister_callback(config, "media.vcd.device"); - for (i = 0; i < 100; i++) - free (this->filelist[i]); - + vcd_filelist_dispose(this); free (this->mrls); free (this); } @@ -982,11 +992,6 @@ static xine_mrl_t **vcd_class_get_dir (input_class_t *this_gen, const char *file /* printf ("%d tracks\n", this->total_tracks); */ for (i=1; itotal_tracks; i++) { /* FIXME: check if track 0 contains valid data */ - char mrl[1024]; - - memset(&mrl, 0, sizeof (mrl)); - sprintf(mrl, "vcdo:/%d",i); - if((i-1) >= this->mrls_allocated_entries) { ++this->mrls_allocated_entries; /* note: 1 extra pointer for terminating NULL */ @@ -997,11 +1002,9 @@ static xine_mrl_t **vcd_class_get_dir (input_class_t *this_gen, const char *file memset(this->mrls[(i-1)], 0, sizeof(xine_mrl_t)); } - this->mrls[i-1]->origin = NULL; - free(this->mrls[(i-1)]->mrl); - this->mrls[i-1]->mrl = strdup(mrl); - this->mrls[i-1]->link = NULL; - this->mrls[i-1]->type = (0 | mrl_vcd); + asprintf(&(this->mrls[i-1]->mrl), "vcdo:/%d", i); + + this->mrls[i-1]->type = mrl_vcd; /* hack */ this->mrls[i-1]->size = vcd_plugin_get_length ((input_plugin_t *) this); @@ -1048,20 +1051,15 @@ static char ** vcd_class_get_autoplay_list (input_class_t *this_gen, int *num_fi fd = -1; *num_files = this->total_tracks - 1; - - /* printf ("%d tracks\n", this->total_tracks); */ - - for (i = 1; i < this->total_tracks; i++) { /* FIXME: check if track 0 contains valid data */ - if(this->filelist[i - 1] == NULL) - this->filelist[i - 1] = (char *) realloc(this->filelist[i - 1], sizeof(char *) * 256); + vcd_filelist_dispose(this); + this->filelist = calloc(this->total_tracks+1, sizeof(char*)); - sprintf (this->filelist[i - 1], "vcdo:/%d",i); - /* printf ("list[%d] : %d %s\n", i, this->filelist[i-1], this->filelist[i-1]); */ - } + /* FIXME: check if track 0 contains valid data */ + for (i = 1; i < this->total_tracks; i++) + asprintf(&this->filelist[i-1], "vcdo:/%d", i); - this->filelist[i - 1] = (char *) realloc(this->filelist[i-1], sizeof(char *)); - this->filelist[i - 1] = NULL; + /* printf ("%d tracks\n", this->total_tracks); */ return this->filelist; } @@ -1093,10 +1091,6 @@ static void *init_class (xine_t *xine, void *data) { this->mrls = calloc(1, sizeof(xine_mrl_t*)); this->mrls_allocated_entries = 0; - for (i = 0; i < 100; i++) { - this->filelist[i] = calloc(256, sizeof(char)); - } - return this; } -- cgit v1.2.3 From 1230c21aea047e429f050c5ceeff20820e0d6044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Wed, 7 May 2008 20:21:28 +0200 Subject: Don't overuse sscanf(). Instead of using sscanf() to get the data out of headers, as we just compared them, skip the name of the header and get the rest. Add the whitespace to the compare so that it actually works as intended. Also save some unneeded dup/free. --- src/input/librtsp/rtsp.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'src/input') diff --git a/src/input/librtsp/rtsp.c b/src/input/librtsp/rtsp.c index 99f0da665..4e17c1e57 100644 --- a/src/input/librtsp/rtsp.c +++ b/src/input/librtsp/rtsp.c @@ -233,38 +233,32 @@ static int rtsp_get_answers(rtsp_t *s) { if (!answer) return 0; - if (!strncasecmp(answer,"Cseq:",5)) { - sscanf(answer,"%*s %u",&answer_seq); + if (!strncasecmp(answer,"Cseq: ",6)) { + sscanf(answer+6,"%u",&answer_seq); if (s->cseq != answer_seq) { lprintf("warning: Cseq mismatch. got %u, assumed %u", answer_seq, s->cseq); s->cseq=answer_seq; } } - if (!strncasecmp(answer,"Server:",7)) { - char *buf = xine_xmalloc(strlen(answer)); - sscanf(answer,"%*s %s",buf); - if (s->server) free(s->server); - s->server=strdup(buf); - free(buf); + if (!strncasecmp(answer,"Server: ",8)) { + free(s->server); + s->server = strdup(answer + 8); } - if (!strncasecmp(answer,"Session:",8)) { - char *buf = xine_xmalloc(strlen(answer)); - sscanf(answer,"%*s %s",buf); + if (!strncasecmp(answer,"Session: ",9)) { + char *tmp = answer + 9; if (s->session) { - if (strcmp(buf, s->session)) { + if (strcmp(tmp, s->session)) { xprintf(s->stream->xine, XINE_VERBOSITY_DEBUG, - "rtsp: warning: setting NEW session: %s\n", buf); - free(s->session); - s->session=strdup(buf); + "rtsp: warning: setting NEW session: %s\n", tmp); + s->session=strdup(tmp); } } else { lprintf("setting session id to: %s\n", buf); - s->session=strdup(buf); + s->session=strdup(tmp); } - free(buf); } *answer_ptr=answer; answer_ptr++; -- cgit v1.2.3 From 4520cf440178ef98e859759e3fdbed4921703ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 17:46:47 +0200 Subject: Loop improvements, avoid multiple strlen() and strdup() calls. Instead of executing strlen() after each snprintf() call, use the value returned by the call itself. Instead of using sprintf() on a buffer and then duplicate it, use asprintf(). --- src/input/input_cdda.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'src/input') diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index 30b9b49e1..047916a07 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -1721,12 +1721,11 @@ static int _cdda_cddb_retrieve(cdda_input_plugin_t *this) { /* Send query command */ memset(&buffer, 0, sizeof(buffer)); - sprintf(buffer, "cddb query %08lx %d ", this->cddb.disc_id, this->cddb.num_tracks); + size_t size = sprintf(buffer, "cddb query %08lx %d ", this->cddb.disc_id, this->cddb.num_tracks); for (i = 0; i < this->cddb.num_tracks; i++) { - int size = strlen(buffer); - snprintf(buffer + size, sizeof(buffer) - size, "%d ", this->cddb.track[i].start); + size += snprintf(buffer + size, sizeof(buffer) - size, "%d ", this->cddb.track[i].start); } - snprintf(buffer + strlen(buffer), sizeof(buffer) - strlen(buffer), "%d\n", this->cddb.disc_length); + snprintf(buffer + strlen(buffer), sizeof(buffer) - size, "%d\n", this->cddb.disc_length); if ((err = _cdda_cddb_send_command(this, buffer)) <= 0) { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_cdda: error while sending cddb query command.\n"); @@ -2514,7 +2513,6 @@ static char ** cdda_class_get_autoplay_list (input_class_t *this_gen, cdda_input_class_t *this = (cdda_input_class_t *) this_gen; cdda_input_plugin_t *ip = this->ip; cdrom_toc *toc; - char trackmrl[20]; int fd, i, err = -1; int num_tracks; @@ -2580,10 +2578,8 @@ static char ** cdda_class_get_autoplay_list (input_class_t *this_gen, num_tracks = toc->last_track - toc->first_track; if (toc->ignore_last_track) num_tracks--; - for ( i = 0; i <= num_tracks; i++ ) { - sprintf(trackmrl,"cdda:/%d",i+toc->first_track); - this->autoplaylist[i] = strdup(trackmrl); - } + for ( i = 0; i <= num_tracks; i++ ) + asprintf(&this->autoplaylist[i],"cdda:/%d",i+toc->first_track); *num_files = toc->last_track - toc->first_track + 1; -- cgit v1.2.3 From 902d66eb8304ccffdb683b7130e9f548011b8d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 17:51:40 +0200 Subject: Avoid loop for common memory operations (zeroing, copying, moving). Use the proper function for common memory operations (memset() for zeroing, memcpy() for copying, memmove() for moving), instead of looping through arrays. By extension, remove loops to reset arrays when they were allocated with calloc() and thus already zeroed. --- src/input/input_dvb.c | 6 ++---- src/input/pnm.c | 5 +---- 2 files changed, 3 insertions(+), 8 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 121e11b11..669cd1e14 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -587,8 +587,7 @@ static tuner_t *tuner_init(xine_t * xine, int adapter) xprintf(this->xine, XINE_VERBOSITY_DEBUG, "tuner_init adapter=%d\n", adapter); this->fd_frontend = -1; - for (x = 0; x < MAX_FILTERS; x++) - this->fd_pidfilter[x] = 0; + memset(this->fd_pidfilter, 0, sizeof(this->fd_pidfilter)); this->xine = xine; this->adapter_num = adapter; @@ -933,8 +932,7 @@ static channel_t *load_channels(xine_t *xine, xine_stream_t *stream, int *num_ch /* Initially there's no EPG data in the EPG structs. */ channels[num_channels].epg_count = 0; - for (i = 0; i < MAX_EPG_ENTRIES_PER_CHANNEL; ++i) - channels[num_channels].epg[i] = NULL; + memset(channels[num_channels].epg, 0, sizeof(channels[num_channels].epg)); num_channels++; } diff --git a/src/input/pnm.c b/src/input/pnm.c index 47a24a620..5b8aa7c42 100644 --- a/src/input/pnm.c +++ b/src/input/pnm.c @@ -631,10 +631,7 @@ static int pnm_get_stream_chunk(pnm_t *p) { */ n=0; while (p->buffer[0] != 0x5a) { - int i; - for (i=1; i<8; i++) { - p->buffer[i-1]=p->buffer[i]; - } + memmove(p->buffer, &p->buffer[1], 8); _x_io_tcp_read (p->stream, p->s, &p->buffer[7], 1); n++; } -- cgit v1.2.3 From 706317bb88fef28abbcb875a266608e44e56048c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 18:15:17 +0200 Subject: Use size_t rather than int to store the return value of strlen(). Also, don't reset buffers when we're just going to run a snprintf() call, and avoid multiple calls to strlen() when we're appending to it. --- src/input/input_cdda.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) (limited to 'src/input') diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index 047916a07..990f4d8b0 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -1307,20 +1307,17 @@ static void _cdda_mkdir_recursive_safe(xine_t *xine, char *path) { if(p && strlen(p)) { #ifdef WIN32 - if (*buf2 != '\0') { + if (*buf2 != '\0') { #endif - - int size = strlen(buf2); - snprintf(buf2 + size, sizeof(buf2) - size, "/%s", p); - + size_t size = strlen(buf2); + snprintf(buf2 + size, sizeof(buf2) - size, "/%s", p); #ifdef WIN32 - } - else { - snprintf(buf2, sizeof(buf2), "%s", p); - } - + } + else { + snprintf(buf2, sizeof(buf2), "%s", p); + } #endif /* WIN32 */ - + _cdda_mkdir_safe(xine, buf2); } } @@ -1438,13 +1435,13 @@ static int _cdda_cddb_handle_code(char *buf) { */ static int _cdda_load_cached_cddb_infos(cdda_input_plugin_t *this) { char cdir[XINE_PATH_MAX + XINE_NAME_MAX + 1]; + size_t cdir_size = 0; DIR *dir; if(this == NULL) return 0; - memset(&cdir, 0, sizeof(cdir)); - snprintf(cdir, sizeof(cdir), "%s", this->cddb.cache_dir); + cdir_size = snprintf(cdir, sizeof(cdir), "%s", this->cddb.cache_dir); if((dir = opendir(cdir)) != NULL) { struct dirent *pdir; @@ -1452,14 +1449,12 @@ static int _cdda_load_cached_cddb_infos(cdda_input_plugin_t *this) { while((pdir = readdir(dir)) != NULL) { char discid[9]; - memset(&discid, 0, sizeof(discid)); snprintf(discid, sizeof(discid), "%08lx", this->cddb.disc_id); if(!strcasecmp(pdir->d_name, discid)) { FILE *fd; - int size = strlen(cdir); - snprintf(cdir + size, sizeof(cdir) - size, "/%s", discid); + cdir_size += snprintf(cdir + cdir_size, sizeof(cdir) - cdir_size, "/%s", discid); if((fd = fopen(cdir, "r")) == NULL) { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_cdda: fopen(%s) failed: %s.\n", cdir, strerror(errno)); @@ -1812,7 +1807,7 @@ static int _cdda_cddb_retrieve(cdda_input_plugin_t *this) { while (strcmp(buffer, ".")) { char buf[2048]; int tnum; - int bufsize = strlen(buffercache); + size_t bufsize = strlen(buffercache); memset(&buffer, 0, sizeof(buffer)); _cdda_cddb_socket_read(this, buffer, sizeof(buffer) - 1); -- cgit v1.2.3 From 22d7909903325df7cb5b2ee177d72d7ee7c1371d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 18:16:37 +0200 Subject: Use size_t rather than int to store the return value of strlen(). Also, reduce visibility of the i variable to the loop where it is used. --- src/input/input_dvb.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 669cd1e14..9166a80a6 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -884,7 +884,6 @@ static channel_t *load_channels(xine_t *xine, xine_stream_t *stream, int *num_ch channel_t *channels = NULL; int num_channels = 0; int num_alloc = 0; - int i; struct stat st; snprintf(filename, BUFSIZE, "%s/.xine/channels.conf", xine_get_homedir()); @@ -909,8 +908,8 @@ static channel_t *load_channels(xine_t *xine, xine_stream_t *stream, int *num_ch while ( fgets (str, BUFSIZE, f)) { channel_t channel = {0}; - /* lose trailing spaces & control characters */ - i = strlen (str); + /* lose trailing spaces & control characters */ + size_t i = strlen (str); while (i && str[i - 1] <= ' ') --i; if (i == 0) @@ -2816,7 +2815,7 @@ static int dvb_plugin_open(input_plugin_t * this_gen) * that the channels have really ugly names, sometimes prefixed * by numbers... */ - int chanlen = strlen(channame); + size_t chanlen = strlen(channame); int offset = 0; xprintf(this->class->xine, XINE_VERBOSITY_LOG, -- cgit v1.2.3 From 3aeb7a2cc052a7bef5d8781f81d1835db7c5af63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 18:17:23 +0200 Subject: Use asprintf() rather than malloc() + snprintf(). --- src/input/input_pvr.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) (limited to 'src/input') diff --git a/src/input/input_pvr.c b/src/input/input_pvr.c index e5c70c64d..af6070a9e 100644 --- a/src/input/input_pvr.c +++ b/src/input/input_pvr.c @@ -504,34 +504,24 @@ static void pvr_adjust_realtime_speed(pvr_input_plugin_t *this, fifo_buffer_t *f } #define PVR_FILENAME "%s%08d_%08d.vob" -#define PVR_FILENAME_SIZE 1+8+1+8+4+1 static char *make_temp_name(pvr_input_plugin_t *this, int page) { - char *filename; - int size = strlen(this->tmp_prefix)+PVR_FILENAME_SIZE; - filename = malloc(size); - - snprintf(filename, size, PVR_FILENAME, this->tmp_prefix, this->session, page); + asprintf(&filename, PVR_FILENAME, this->tmp_prefix, this->session, page); return filename; } #define SAVE_BASE_FILENAME "ch%03d %02d-%02d-%04d %02d:%02d:%02d" -#define SAVE_BASE_FILENAME_SIZE 2+3+1+2+1+2+1+4+1+2+1+2+1+2+1 static char *make_base_save_name(int channel, time_t tm) { - struct tm rec_time; char *filename; - int size = SAVE_BASE_FILENAME_SIZE; - filename = malloc(size); - localtime_r(&tm, &rec_time); - snprintf(filename, size, SAVE_BASE_FILENAME, + asprintf(&filename, SAVE_BASE_FILENAME, channel, rec_time.tm_mon+1, rec_time.tm_mday, rec_time.tm_year+1900, rec_time.tm_hour, rec_time.tm_min, rec_time.tm_sec); @@ -539,16 +529,11 @@ static char *make_base_save_name(int channel, time_t tm) { } #define SAVE_FILENAME "%s%s_%04d.vob" -#define SAVE_FILENAME_SIZE 1+4+4+1 static char *make_save_name(pvr_input_plugin_t *this, char *base, int page) { - char *filename; - int size = strlen(this->save_prefix)+strlen(base)+SAVE_FILENAME_SIZE; - filename = malloc(size); - - snprintf(filename, size, SAVE_FILENAME, this->save_prefix, base, page); + asprintf(&filename, SAVE_FILENAME, this->save_prefix, base, page); return filename; } -- cgit v1.2.3 From 4384f0b14a658b4179cedf77c2d6c2718610017b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 18:17:44 +0200 Subject: Use size_t rather than int to store the return value of strlen(). --- src/input/libreal/sdpplin.c | 2 +- src/input/librtsp/rtsp.c | 2 +- src/input/pnm.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/input') diff --git a/src/input/libreal/sdpplin.c b/src/input/libreal/sdpplin.c index 2596391f9..4c1687d41 100644 --- a/src/input/libreal/sdpplin.c +++ b/src/input/libreal/sdpplin.c @@ -99,7 +99,7 @@ static char *nl(char *data) { static int filter(const char *in, const char *filter, char **out) { - int flen=strlen(filter); + size_t flen=strlen(filter); size_t len; if (!in) diff --git a/src/input/librtsp/rtsp.c b/src/input/librtsp/rtsp.c index 4e17c1e57..07769064a 100644 --- a/src/input/librtsp/rtsp.c +++ b/src/input/librtsp/rtsp.c @@ -127,7 +127,7 @@ static char *rtsp_get(rtsp_t *s) { static void rtsp_put(rtsp_t *s, const char *string) { - int len=strlen(string); + size_t len=strlen(string); char *buf = malloc(sizeof(char)*len+2); lprintf(">> '%s'", string); diff --git a/src/input/pnm.c b/src/input/pnm.c index 5b8aa7c42..cbd245e7b 100644 --- a/src/input/pnm.c +++ b/src/input/pnm.c @@ -415,8 +415,8 @@ static void pnm_send_request(pnm_t *p, uint32_t bandwidth) { */ static void pnm_send_response(pnm_t *p, const char *response) { - - int size=strlen(response); + /** @TODO should check that sze is always < 256 */ + size_t size=strlen(response); p->buffer[0]=0x23; p->buffer[1]=0; -- cgit v1.2.3 From 8532f9356cdbd6585c5d9eaf5d92588ae7ddecbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 18:36:28 +0200 Subject: Use asprintf() rather than sn?printf() + strn?dup(). Instead of duplicating a buffer after using sn?printf() on it, use asprintf() directly on the final variable. --- src/input/input_cdda.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) (limited to 'src/input') diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index 990f4d8b0..92eca7559 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -1532,14 +1532,9 @@ static int _cdda_load_cached_cddb_infos(cdda_input_plugin_t *this) { int nyear; y = strstr(buffer, "YEAR:"); - if(y) { - if (sscanf(y+5, "%4d", &nyear) == 1) { - char year[5]; - - snprintf(year, 5, "%d", nyear); - if (this->cddb.disc_year == NULL) - this->cddb.disc_year = strdup(year); - } + if (y && this->cddb.disc_year == NULL) { + if (sscanf(y+5, "%4d", &nyear) == 1) + asprintf(&this->cddb.disc_year, "%d", nyear); } } } @@ -1875,14 +1870,9 @@ static int _cdda_cddb_retrieve(cdda_input_plugin_t *this) { int nyear; y = strstr(buffer, "YEAR:"); - if (y) { - if (sscanf(y+5, "%4d", &nyear) == 1) { - char year[5]; - - snprintf(year, 5, "%d", nyear); - if (this->cddb.disc_year == NULL) - this->cddb.disc_year = strdup(year); - } + if (y && this->cddb.disc_year == NULL) { + if (sscanf(y+5, "%4d", &nyear) == 1) + asprintf(&this->cddb.disc_year, "%d", nyear); } } } -- cgit v1.2.3 From f7293a004a864626e6ff764ddb0e62f87abea56c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 20:11:56 +0200 Subject: Use xine_ui_data_t's array rather than creating a temporary. Instead of passing through a temporary ui_title array on the stack, use the array already allocated for the xine_ui_data_t element. Also do that for ui_str_length. --HG-- extra : transplant_source : %1A%B5e%8E%C0gQ%A9%BC%08%B2%0Bm%A9Ec%C1%9F%23%EF --- src/input/input_dvd.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 012d695ec..9a83c0662 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -352,11 +352,9 @@ static void send_mouse_enter_leave_event(dvd_input_plugin_t *this, int direction } static int update_title_display(dvd_input_plugin_t *this) { - char ui_title[MAX_STR_LEN + 1]; xine_event_t uevent; xine_ui_data_t data; int tt=-1, pr=-1; - size_t ui_str_length=0; int num_tt = 0; if(!this || !(this->stream)) @@ -386,15 +384,15 @@ static int update_title_display(dvd_input_plugin_t *this) { dvdnav_get_number_of_parts(this->dvdnav, tt, &num_part); dvdnav_get_angle_info(this->dvdnav, &cur_angle, &num_angle); if(num_angle > 1) { - snprintf(ui_title, MAX_STR_LEN, - "Title %i, Chapter %i, Angle %i of %i", - tt,pr,cur_angle, num_angle); + data.str_len = snprintf(data.str, sizeof(data.str), + "Title %i, Chapter %i, Angle %i of %i", + tt,pr,cur_angle, num_angle); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_NUMBER,cur_angle); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_COUNT,num_angle); } else { - snprintf(ui_title, MAX_STR_LEN, - "Title %i, Chapter %i", - tt,pr); + data.str_len = snprintf(data.str, sizeof(data.str), + "Title %i, Chapter %i", + tt,pr); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_NUMBER,0); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_COUNT,0); } @@ -403,9 +401,9 @@ static int update_title_display(dvd_input_plugin_t *this) { _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_CHAPTER_NUMBER,pr); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_CHAPTER_COUNT,num_part); } else if (tt == 0 && dvdnav_menu_table[pr]) { - snprintf(ui_title, MAX_STR_LEN, - "DVD %s Menu", - dvdnav_menu_table[pr]); + data.str_len = snprintf(data.str, sizeof(data.str), + "DVD %s Menu", + dvdnav_menu_table[pr]); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_TITLE_NUMBER,tt); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_TITLE_COUNT,num_tt); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_CHAPTER_NUMBER,0); @@ -413,7 +411,8 @@ static int update_title_display(dvd_input_plugin_t *this) { _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_NUMBER,0); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_COUNT,0); } else { - strcpy(ui_title, "DVD Menu"); + strcpy(data.str, "DVD Menu"); + data.str_len = strlen(data.str); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_TITLE_NUMBER,0); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_TITLE_COUNT,num_tt); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_CHAPTER_NUMBER,0); @@ -421,22 +420,19 @@ static int update_title_display(dvd_input_plugin_t *this) { _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_NUMBER,0); _x_stream_info_set(this->stream,XINE_STREAM_INFO_DVD_ANGLE_COUNT,0); } - ui_str_length = strlen(ui_title); if (this->dvd_name && this->dvd_name[0] && - (ui_str_length + strlen(this->dvd_name) < MAX_STR_LEN)) { - snprintf(ui_title+ui_str_length, MAX_STR_LEN - ui_str_length, - ", %s", this->dvd_name); + (data.str_len + strlen(this->dvd_name) < sizeof(data.str))) { + data.str_len += snprintf(data.str+data.str_len, sizeof(data.str) - data.str_len, + ", %s", this->dvd_name); } #ifdef INPUT_DEBUG - printf("input_dvd: Changing title to read '%s'\n", ui_title); + printf("input_dvd: Changing title to read '%s'\n", data.str); #endif uevent.type = XINE_EVENT_UI_SET_TITLE; uevent.stream = this->stream; uevent.data = &data; - uevent.data_length = sizeof(data);; - memcpy(data.str, ui_title, strlen(ui_title) + 1); - data.str_len = strlen(ui_title) + 1; + uevent.data_length = sizeof(data); xine_event_send(this->stream, &uevent); return 1; -- cgit v1.2.3 From 2c442080281fa7c583042a39beed6d47891aab74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 20:13:21 +0200 Subject: Initialise the xine_event_t instance directly on declaration. --HG-- extra : transplant_source : %3B%87%DA%89%F2.%1F%F4%F0L/%C4%A3%5B%5C3%1A%09%05g --- src/input/input_dvd.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 9a83c0662..a845d7628 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -352,8 +352,13 @@ static void send_mouse_enter_leave_event(dvd_input_plugin_t *this, int direction } static int update_title_display(dvd_input_plugin_t *this) { - xine_event_t uevent; xine_ui_data_t data; + xine_event_t uevent = { + .type = XINE_EVENT_UI_SET_TITLE, + .stream = this->stream, + .data = &data, + .data_length = sizeof(data) + }; int tt=-1, pr=-1; int num_tt = 0; @@ -429,10 +434,6 @@ static int update_title_display(dvd_input_plugin_t *this) { #ifdef INPUT_DEBUG printf("input_dvd: Changing title to read '%s'\n", data.str); #endif - uevent.type = XINE_EVENT_UI_SET_TITLE; - uevent.stream = this->stream; - uevent.data = &data; - uevent.data_length = sizeof(data); xine_event_send(this->stream, &uevent); return 1; -- cgit v1.2.3 From f1d33d90c6b93c60d554145e015b5e48f47810b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 20:17:21 +0200 Subject: Use snprintf() return value rather than calling strlen() multiple times. Instead of using strlen() to get the new size of the string every time, use the value returned by snprintf() to gather the size of the final string. --HG-- extra : transplant_source : %AA%0D%D3d9%D6%99%D7BP%21w%F3%DE%8Au%90l%AD%16 --- src/input/input_http.c | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'src/input') diff --git a/src/input/input_http.c b/src/input/input_http.c index deaaa0719..dab7310c3 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -651,7 +651,7 @@ static int http_plugin_open (input_plugin_t *this_gen ) { int done, len, linenum; int httpcode; int res; - int buflen; + size_t buflen; int use_proxy; int proxyport; int mpegurl_redirect = 0; @@ -743,43 +743,38 @@ static int http_plugin_open (input_plugin_t *this_gen ) { if (use_proxy) { if (this->port != DEFAULT_HTTP_PORT) { - snprintf (this->buf, BUFSIZE, "GET http://%s:%d%s HTTP/1.0\015\012", - this->host, this->port, this->uri); + buflen = snprintf (this->buf, BUFSIZE, "GET http://%s:%d%s HTTP/1.0\015\012", + this->host, this->port, this->uri); } else { - snprintf (this->buf, BUFSIZE, "GET http://%s%s HTTP/1.0\015\012", - this->host, this->uri); + buflen = snprintf (this->buf, BUFSIZE, "GET http://%s%s HTTP/1.0\015\012", + this->host, this->uri); } } else - snprintf (this->buf, BUFSIZE, "GET %s HTTP/1.0\015\012", this->uri); + buflen = snprintf (this->buf, BUFSIZE, "GET %s HTTP/1.0\015\012", this->uri); - buflen = strlen(this->buf); if (this->port != DEFAULT_HTTP_PORT) - snprintf (this->buf + buflen, BUFSIZE - buflen, "Host: %s:%d\015\012", - this->host, this->port); + buflen += snprintf (this->buf + buflen, BUFSIZE - buflen, "Host: %s:%d\015\012", + this->host, this->port); else - snprintf (this->buf + buflen, BUFSIZE - buflen, "Host: %s\015\012", - this->host); + buflen += snprintf (this->buf + buflen, BUFSIZE - buflen, "Host: %s\015\012", + this->host); - buflen = strlen(this->buf); if (this_class->proxyuser && strlen(this_class->proxyuser)) { - snprintf (this->buf + buflen, BUFSIZE - buflen, - "Proxy-Authorization: Basic %s\015\012", this->proxyauth); - buflen = strlen(this->buf); + buflen += snprintf (this->buf + buflen, BUFSIZE - buflen, + "Proxy-Authorization: Basic %s\015\012", this->proxyauth); } if (this->user && strlen(this->user)) { - snprintf (this->buf + buflen, BUFSIZE - buflen, - "Authorization: Basic %s\015\012", this->auth); - buflen = strlen(this->buf); + buflen += snprintf (this->buf + buflen, BUFSIZE - buflen, + "Authorization: Basic %s\015\012", this->auth); } - snprintf(this->buf + buflen, BUFSIZE - buflen, - "User-Agent: xine/%s\015\012" - "Accept: */*\015\012" - "Icy-MetaData: 1\015\012" - "\015\012", - VERSION); - buflen = strlen(this->buf); + buflen += snprintf(this->buf + buflen, BUFSIZE - buflen, + "User-Agent: xine/%s\015\012" + "Accept: */*\015\012" + "Icy-MetaData: 1\015\012" + "\015\012", + VERSION); if (_x_io_tcp_write (this->stream, this->fh, this->buf, buflen) != buflen) { _x_message(this->stream, XINE_MSG_CONNECTION_REFUSED, "couldn't send request", NULL); xprintf(this_class->xine, XINE_VERBOSITY_DEBUG, "input_http: couldn't send request\n"); -- cgit v1.2.3 From 16a41a85516f6055918887938e9dd3f3f9fbcf28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Fri, 9 May 2008 21:54:58 +0200 Subject: Use size_t to keep the value returned by strlen(). When using a variable to store the result of strlen(), make sure its type is size_t just like the function returns, rather than using a smaller type like int. --HG-- extra : transplant_source : %B0%D5%3B%D7%1Dy%0A%7E%7D%7C%023%08%B2%CE%D3t%0B3%D7 --- src/input/input_dvb.c | 2 +- src/input/libreal/real.c | 2 +- src/input/mms.c | 6 ++---- src/input/mmsh.c | 4 +--- 4 files changed, 5 insertions(+), 9 deletions(-) (limited to 'src/input') diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 9166a80a6..69a413bac 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -1659,7 +1659,7 @@ static void render_text_area(osd_renderer_t* renderer, osd_object_t* osd, char* /* The line to be printed next. */ char text_line[512]; int text_width, text_height; - int old_line_length, line_cursor; + size_t old_line_length, line_cursor; char* bound, *old_bound; *height = 0; diff --git a/src/input/libreal/real.c b/src/input/libreal/real.c index dc3f00105..f4698a4fb 100644 --- a/src/input/libreal/real.c +++ b/src/input/libreal/real.c @@ -313,7 +313,7 @@ static void calc_response_string (char *result, char *challenge) { void real_calc_response_and_checksum (char *response, char *chksum, char *challenge) { - int ch_len, resp_len; + size_t ch_len, resp_len; int i; char *ptr; char buf[128]; diff --git a/src/input/mms.c b/src/input/mms.c index 97a05dd89..ab1983955 100644 --- a/src/input/mms.c +++ b/src/input/mms.c @@ -771,12 +771,10 @@ mms_t *mms_connect (xine_stream_t *stream, const char *url, int bandwidth) { /* command 0x5 */ { mms_buffer_t command_buffer; - char *path; - int pathlen; + char *path = this->uri; + size_t pathlen = strlen(path); /* remove the first '/' */ - path = this->uri; - pathlen = strlen(path); if (pathlen > 1) { path++; pathlen--; diff --git a/src/input/mmsh.c b/src/input/mmsh.c index 2feb7c37b..4ee7ed07d 100644 --- a/src/input/mmsh.c +++ b/src/input/mmsh.c @@ -190,11 +190,9 @@ struct mmsh_s { }; static int send_command (mmsh_t *this, char *cmd) { - int length; - lprintf ("send_command:\n%s\n", cmd); - length = strlen(cmd); + const size_t length = strlen(cmd); if (_x_io_tcp_write(this->stream, this->s, cmd, length) != length) { xprintf (this->stream->xine, XINE_LOG_MSG, _("libmmsh: send error\n")); return 0; -- cgit v1.2.3