[-] Lots of housekeeping thanks to scan-build and input from @acmay
This commit is contained in:
parent
8525c278ec
commit
bdd6bab982
|
@ -92,9 +92,7 @@ command_cb_sync(struct commands_base *cmdbase, struct command *cmd)
|
|||
{
|
||||
// Command execution finished, execute the bottom half function
|
||||
if (cmd->ret == 0 && cmd->func_bh)
|
||||
{
|
||||
cmdstate = cmd->func_bh(cmd->arg, &cmd->ret);
|
||||
}
|
||||
cmd->func_bh(cmd->arg, &cmd->ret);
|
||||
|
||||
// Signal the calling thread that the command execution finished
|
||||
pthread_cond_signal(&cmd->cond);
|
||||
|
@ -159,6 +157,7 @@ send_command(struct commands_base *cmdbase, struct command *cmd)
|
|||
ret = write(cmdbase->command_pipe[1], &cmd, sizeof(cmd));
|
||||
if (ret != sizeof(cmd))
|
||||
{
|
||||
DPRINTF(E_LOG, L_MAIN, "Bad write to command pipe (write incomplete)\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -360,7 +359,10 @@ commands_exec_async(struct commands_base *cmdbase, command_function func, void *
|
|||
|
||||
ret = send_command(cmdbase, cmd);
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
{
|
||||
free(cmd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -377,7 +377,7 @@ db_upgrade_v11(sqlite3 *hdl)
|
|||
else if (count < 0)
|
||||
return -1;
|
||||
|
||||
spkids = (uint64_t *)malloc(count * sizeof(uint64_t));
|
||||
spkids = calloc(count, sizeof(uint64_t));
|
||||
if (!spkids)
|
||||
{
|
||||
DPRINTF(E_LOG, L_DB, "Out of memory for speaker IDs\n");
|
||||
|
@ -1073,7 +1073,6 @@ db_upgrade_v16(sqlite3 *hdl)
|
|||
}
|
||||
}
|
||||
|
||||
sqlite3_free(errmsg);
|
||||
sqlite3_finalize(stmt);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -161,7 +161,7 @@ push_dir(struct stacked_dir **s, char *path, int parent_id)
|
|||
{
|
||||
struct stacked_dir *d;
|
||||
|
||||
d = (struct stacked_dir *)malloc(sizeof(struct stacked_dir));
|
||||
d = malloc(sizeof(struct stacked_dir));
|
||||
if (!d)
|
||||
{
|
||||
DPRINTF(E_LOG, L_SCAN, "Could not stack directory %s; out of memory\n", path);
|
||||
|
@ -172,6 +172,7 @@ push_dir(struct stacked_dir **s, char *path, int parent_id)
|
|||
if (!d->path)
|
||||
{
|
||||
DPRINTF(E_LOG, L_SCAN, "Could not stack directory %s; out of memory for path\n", path);
|
||||
free(d);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1025,13 +1026,15 @@ process_directory(char *path, int parent_id, int flags)
|
|||
}
|
||||
|
||||
ret = snprintf(entry, sizeof(entry), "%s", deref);
|
||||
free(deref);
|
||||
if ((ret < 0) || (ret >= sizeof(entry)))
|
||||
{
|
||||
DPRINTF(E_LOG, L_SCAN, "Skipping %s, PATH_MAX exceeded\n", deref);
|
||||
DPRINTF(E_LOG, L_SCAN, "Skipping %s, PATH_MAX exceeded\n", entry);
|
||||
|
||||
free(deref);
|
||||
continue;
|
||||
}
|
||||
|
||||
free(deref);
|
||||
}
|
||||
|
||||
if (S_ISREG(sb.st_mode))
|
||||
|
|
|
@ -183,15 +183,13 @@ scan_smartpl(char *file, time_t mtime, int dir_id)
|
|||
pli = db_pl_fetch_bypath(file);
|
||||
if (!pli)
|
||||
{
|
||||
pli = (struct playlist_info *) malloc(sizeof(struct playlist_info));
|
||||
pli = calloc(1, sizeof(struct playlist_info));
|
||||
if (!pli)
|
||||
{
|
||||
DPRINTF(E_LOG, L_SCAN, "Out of memory\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(pli, 0, sizeof(struct playlist_info));
|
||||
|
||||
pli->path = strdup(file);
|
||||
snprintf(virtual_path, PATH_MAX, "/file:%s", file);
|
||||
ptr = strrchr(virtual_path, '.');
|
||||
|
@ -200,8 +198,6 @@ scan_smartpl(char *file, time_t mtime, int dir_id)
|
|||
pli->virtual_path = strdup(virtual_path);
|
||||
pli->type = PL_SMART;
|
||||
}
|
||||
else
|
||||
pl_id = pli->id;
|
||||
|
||||
pli->directory_id = dir_id;
|
||||
|
||||
|
@ -216,6 +212,7 @@ scan_smartpl(char *file, time_t mtime, int dir_id)
|
|||
|
||||
if (pli->id)
|
||||
{
|
||||
pl_id = pli->id;
|
||||
ret = db_pl_update(pli);
|
||||
}
|
||||
else
|
||||
|
@ -230,7 +227,7 @@ scan_smartpl(char *file, time_t mtime, int dir_id)
|
|||
return;
|
||||
}
|
||||
|
||||
DPRINTF(E_INFO, L_SCAN, "Added smart playlist as id %d\n", pl_id);
|
||||
DPRINTF(E_INFO, L_SCAN, "Added or updated smart playlist as id %d\n", pl_id);
|
||||
|
||||
free_pli(pli, 0);
|
||||
|
||||
|
|
16
src/httpd.c
16
src/httpd.c
|
@ -1248,11 +1248,10 @@ httpd_basic_auth(struct evhttp_request *req, char *user, char *passwd, char *rea
|
|||
{
|
||||
struct evbuffer *evbuf;
|
||||
struct evkeyvalq *headers;
|
||||
char *header;
|
||||
char header[256];
|
||||
const char *auth;
|
||||
char *authuser;
|
||||
char *authpwd;
|
||||
int len;
|
||||
int ret;
|
||||
|
||||
headers = evhttp_request_get_input_headers(req);
|
||||
|
@ -1317,16 +1316,8 @@ httpd_basic_auth(struct evhttp_request *req, char *user, char *passwd, char *rea
|
|||
return 0;
|
||||
|
||||
need_auth:
|
||||
len = strlen(realm) + strlen("Basic realm=") + 3;
|
||||
header = (char *)malloc(len);
|
||||
if (!header)
|
||||
{
|
||||
httpd_send_error(req, HTTP_SERVUNAVAIL, "Internal Server Error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = snprintf(header, len, "Basic realm=\"%s\"", realm);
|
||||
if ((ret < 0) || (ret >= len))
|
||||
ret = snprintf(header, sizeof(header), "Basic realm=\"%s\"", realm);
|
||||
if ((ret < 0) || (ret >= sizeof(header)))
|
||||
{
|
||||
httpd_send_error(req, HTTP_SERVUNAVAIL, "Internal Server Error");
|
||||
return -1;
|
||||
|
@ -1346,7 +1337,6 @@ httpd_basic_auth(struct evhttp_request *req, char *user, char *passwd, char *rea
|
|||
|
||||
httpd_send_reply(req, 401, "Unauthorized", evbuf, HTTPD_SEND_NO_GZIP);
|
||||
|
||||
free(header);
|
||||
evbuffer_free(evbuf);
|
||||
|
||||
return -1;
|
||||
|
|
|
@ -785,6 +785,7 @@ find_first_song_id(const char *query)
|
|||
int id;
|
||||
int ret;
|
||||
|
||||
id = 0;
|
||||
memset(&qp, 0, sizeof(struct query_params));
|
||||
|
||||
/* We only want the id of the first song */
|
||||
|
@ -1012,6 +1013,8 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u
|
|||
}
|
||||
}
|
||||
|
||||
player_get_status(&status);
|
||||
|
||||
cuequery = evhttp_find_header(query, "query");
|
||||
if (cuequery)
|
||||
{
|
||||
|
@ -1030,8 +1033,6 @@ dacp_reply_cue_play(struct evhttp_request *req, struct evbuffer *evbuf, char **u
|
|||
}
|
||||
else
|
||||
{
|
||||
player_get_status(&status);
|
||||
|
||||
if (status.status != PLAY_STOPPED)
|
||||
player_playback_stop();
|
||||
}
|
||||
|
@ -1537,7 +1538,6 @@ dacp_reply_playqueuecontents(struct evhttp_request *req, struct evbuffer *evbuf,
|
|||
DPRINTF(E_LOG, L_DACP, "Invalid span value in playqueue-contents request\n");
|
||||
}
|
||||
|
||||
i = 0;
|
||||
n = 0; // count of songs in songlist
|
||||
songlist = evbuffer_new();
|
||||
if (!songlist)
|
||||
|
@ -1548,6 +1548,8 @@ dacp_reply_playqueuecontents(struct evhttp_request *req, struct evbuffer *evbuf,
|
|||
return;
|
||||
}
|
||||
|
||||
player_get_status(&status);
|
||||
|
||||
/*
|
||||
* If the span parameter is negativ make song list for Previously Played,
|
||||
* otherwise make song list for Up Next and begin with first song after playlist position.
|
||||
|
@ -1577,8 +1579,6 @@ dacp_reply_playqueuecontents(struct evhttp_request *req, struct evbuffer *evbuf,
|
|||
}
|
||||
else
|
||||
{
|
||||
player_get_status(&status);
|
||||
|
||||
queue = player_queue_get_bypos(abs(span));
|
||||
if (queue)
|
||||
{
|
||||
|
|
|
@ -97,6 +97,13 @@ streaming_fail_cb(struct evhttp_connection *evcon, void *arg)
|
|||
prev = session;
|
||||
}
|
||||
|
||||
if (!session)
|
||||
{
|
||||
DPRINTF(E_LOG, L_STREAMING, "Bug! Got a failure callback for an unknown stream\n");
|
||||
free(this);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!prev)
|
||||
streaming_sessions = session->next;
|
||||
else
|
||||
|
|
17
src/lastfm.c
17
src/lastfm.c
|
@ -575,23 +575,28 @@ lastfm_login(char *path)
|
|||
kv = keyval_alloc();
|
||||
if (!kv)
|
||||
{
|
||||
free(username);
|
||||
free(password);
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto out_free_credentials;
|
||||
}
|
||||
|
||||
ret = ( (keyval_add(kv, "api_key", lastfm_api_key) == 0) &&
|
||||
(keyval_add(kv, "username", username) == 0) &&
|
||||
(keyval_add(kv, "password", password) == 0) );
|
||||
|
||||
free(username);
|
||||
free(password);
|
||||
if (!ret)
|
||||
{
|
||||
ret = -1;
|
||||
goto out_free_kv;
|
||||
}
|
||||
|
||||
// Send the login request
|
||||
ret = request_post("auth.getMobileSession", kv, 1);
|
||||
|
||||
out_free_kv:
|
||||
keyval_clear(kv);
|
||||
free(kv);
|
||||
out_free_credentials:
|
||||
free(username);
|
||||
free(password);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -498,7 +498,6 @@ main(int argc, char **argv)
|
|||
ffid = NULL;
|
||||
mdns_no_rsp = 0;
|
||||
mdns_no_daap = 0;
|
||||
mdns_no_mpd = 1; // only announce if mpd protocol support is activated
|
||||
|
||||
while ((option = getopt_long(argc, argv, "D:d:c:P:fb:v", option_map, NULL)) != -1)
|
||||
{
|
||||
|
@ -789,6 +788,8 @@ main(int argc, char **argv)
|
|||
goto mpd_fail;
|
||||
}
|
||||
mdns_no_mpd = 0;
|
||||
#else
|
||||
mdns_no_mpd = 1;
|
||||
#endif
|
||||
|
||||
/* Start Remote pairing service */
|
||||
|
|
|
@ -498,12 +498,14 @@ browse_resolve_callback(AvahiServiceResolver *r, AvahiIfIndex intf, AvahiProtoco
|
|||
DPRINTF(E_DBG, L_MDNS, "Avahi Resolver: resolved service '%s' type '%s' proto %d, host %s\n", name, type, proto, hostname);
|
||||
|
||||
rb_data = calloc(1, sizeof(struct mdns_record_browser));
|
||||
if (! (rb_data && (rb_data->name = strdup(name)) && (rb_data->domain = strdup(domain))) )
|
||||
if (!rb_data)
|
||||
{
|
||||
DPRINTF(E_LOG, L_MDNS, "Out of memory\n");
|
||||
goto out_free_resolver;
|
||||
}
|
||||
|
||||
rb_data->name = strdup(name);
|
||||
rb_data->domain = strdup(domain);
|
||||
rb_data->mb = (struct mdns_browser *)userdata;
|
||||
rb_data->port = port;
|
||||
|
||||
|
|
|
@ -430,7 +430,7 @@ keyval_sort(struct keyval *kv)
|
|||
struct onekeyval *okv;
|
||||
struct onekeyval *sokv;
|
||||
|
||||
if (!kv)
|
||||
if (!kv || !kv->head)
|
||||
return;
|
||||
|
||||
head = kv->head;
|
||||
|
|
|
@ -4268,6 +4268,7 @@ mpd_read_cb(struct bufferevent *bev, void *ctx)
|
|||
|
||||
listtype = COMMAND_LIST_NONE;
|
||||
ncmd = 0;
|
||||
ret = -1;
|
||||
|
||||
while ((line = evbuffer_readln(input, NULL, EVBUFFER_EOL_ANY)))
|
||||
{
|
||||
|
|
|
@ -170,10 +170,17 @@ alsa_session_make(struct output_device *device, output_status_cb cb)
|
|||
struct alsa_session *as;
|
||||
|
||||
os = calloc(1, sizeof(struct output_session));
|
||||
as = calloc(1, sizeof(struct alsa_session));
|
||||
if (!os || !as)
|
||||
if (!os)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for ALSA session\n");
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for ALSA session (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
as = calloc(1, sizeof(struct alsa_session));
|
||||
if (!as)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for ALSA session (as)\n");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1323,10 +1323,17 @@ cast_session_make(struct output_device *device, int family, output_status_cb cb)
|
|||
}
|
||||
|
||||
os = calloc(1, sizeof(struct output_session));
|
||||
cs = calloc(1, sizeof(struct cast_session));
|
||||
if (!os || !cs)
|
||||
if (!os)
|
||||
{
|
||||
DPRINTF(E_LOG, L_CAST, "Out of memory for TLS session\n");
|
||||
DPRINTF(E_LOG, L_CAST, "Out of memory (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cs = calloc(1, sizeof(struct cast_session));
|
||||
if (!cs)
|
||||
{
|
||||
DPRINTF(E_LOG, L_CAST, "Out of memory (cs)\n");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -91,10 +91,17 @@ dummy_session_make(struct output_device *device, output_status_cb cb)
|
|||
struct dummy_session *ds;
|
||||
|
||||
os = calloc(1, sizeof(struct output_session));
|
||||
ds = calloc(1, sizeof(struct dummy_session));
|
||||
if (!os || !ds)
|
||||
if (!os)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for dummy session\n");
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for dummy session (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ds = calloc(1, sizeof(struct dummy_session));
|
||||
if (!ds)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for dummy session (as)\n");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -221,10 +221,17 @@ fifo_session_make(struct output_device *device, output_status_cb cb)
|
|||
struct fifo_session *fifo_session;
|
||||
|
||||
output_session = calloc(1, sizeof(struct output_session));
|
||||
fifo_session = calloc(1, sizeof(struct fifo_session));
|
||||
if (!output_session || !fifo_session)
|
||||
if (!output_session)
|
||||
{
|
||||
DPRINTF(E_LOG, L_FIFO, "Out of memory for fifo session\n");
|
||||
DPRINTF(E_LOG, L_FIFO, "Out of memory (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fifo_session = calloc(1, sizeof(struct fifo_session));
|
||||
if (!fifo_session)
|
||||
{
|
||||
DPRINTF(E_LOG, L_FIFO, "Out of memory (fs)\n");
|
||||
free(output_session);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -146,10 +146,17 @@ pulse_session_make(struct output_device *device, output_status_cb cb)
|
|||
struct pulse_session *ps;
|
||||
|
||||
os = calloc(1, sizeof(struct output_session));
|
||||
ps = calloc(1, sizeof(struct pulse_session));
|
||||
if (!os || !ps)
|
||||
if (!os)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory for Pulseaudio session\n");
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ps = calloc(1, sizeof(struct pulse_session));
|
||||
if (!ps)
|
||||
{
|
||||
DPRINTF(E_LOG, L_LAUDIO, "Out of memory (ps)\n");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1885,10 +1885,17 @@ raop_session_make(struct output_device *rd, int family, output_status_cb cb)
|
|||
}
|
||||
|
||||
os = calloc(1, sizeof(struct output_session));
|
||||
rs = calloc(1, sizeof(struct raop_session));
|
||||
if (!os || !rs)
|
||||
if (!os)
|
||||
{
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory for RAOP session\n");
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory (os)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rs = calloc(1, sizeof(struct raop_session));
|
||||
if (!rs)
|
||||
{
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory (rs)\n");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -4034,10 +4041,18 @@ raop_device_cb(const char *name, const char *type, const char *domain, const cha
|
|||
DPRINTF(E_DBG, L_RAOP, "Event for AirPlay device %s (port %d, id %" PRIx64 ")\n", at_name, port, id);
|
||||
|
||||
rd = calloc(1, sizeof(struct output_device));
|
||||
re = calloc(1, sizeof(struct raop_extra));
|
||||
if (!rd || !re)
|
||||
if (!rd)
|
||||
{
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory for new AirPlay device\n");
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory (rd)\n");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
re = calloc(1, sizeof(struct raop_extra));
|
||||
if (!re)
|
||||
{
|
||||
DPRINTF(E_LOG, L_RAOP, "Out of memory (re)\n");
|
||||
free(rd);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
12
src/player.c
12
src/player.c
|
@ -967,7 +967,12 @@ source_new(struct queue_item *item)
|
|||
{
|
||||
struct player_source *ps;
|
||||
|
||||
ps = (struct player_source *)calloc(1, sizeof(struct player_source));
|
||||
ps = calloc(1, sizeof(struct player_source));
|
||||
if (!ps)
|
||||
{
|
||||
DPRINTF(E_LOG, L_PLAYER, "Out of memory (ps)\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ps->id = queueitem_id(item);
|
||||
ps->item_id = queueitem_item_id(item);
|
||||
|
@ -1027,6 +1032,8 @@ source_pause(uint64_t pos)
|
|||
int ret;
|
||||
|
||||
ps_playing = source_now_playing();
|
||||
if (!ps_playing)
|
||||
return -1;
|
||||
|
||||
if (cur_streaming)
|
||||
{
|
||||
|
@ -1187,11 +1194,14 @@ source_open(struct queue_item *qii, uint64_t start_pos, int seek)
|
|||
DPRINTF(E_INFO, L_PLAYER, "Opening '%s' (%s)\n", mfi->title, mfi->path);
|
||||
|
||||
ps = source_new(qii);
|
||||
if (!ps)
|
||||
return -1;
|
||||
|
||||
ret = stream_setup(ps, mfi);
|
||||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_LOG, L_PLAYER, "Failed to open '%s' (%s)\n", mfi->title, mfi->path);
|
||||
free(ps);
|
||||
free_mfi(mfi, 0);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -922,7 +922,6 @@ open_filter(struct filter_ctx *filter_ctx, AVCodecContext *dec_ctx, AVCodecConte
|
|||
if (!buffersrc || !buffersink)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Filtering source or sink element not found\n");
|
||||
ret = AVERROR_UNKNOWN;
|
||||
goto out_fail;
|
||||
}
|
||||
|
||||
|
@ -1339,6 +1338,7 @@ transcode_decode_setup_raw(void)
|
|||
if (!ctx->ifmt_ctx)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for decode format ctx\n");
|
||||
free(ctx);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1348,6 +1348,8 @@ transcode_decode_setup_raw(void)
|
|||
if (!ctx->audio_stream)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Could not create stream with PCM16 decoder\n");
|
||||
avformat_free_context(ctx->ifmt_ctx);
|
||||
free(ctx);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1524,7 +1526,6 @@ transcode_decode(struct decoded_frame **decoded, struct decode_ctx *ctx)
|
|||
// with empty input until no more frames are returned
|
||||
DPRINTF(E_DBG, L_XCODE, "Could not read packet, will flush decoders\n");
|
||||
|
||||
used = 1;
|
||||
got_frame = flush_decoder(frame, &in_stream, &stream_index, ctx);
|
||||
if (got_frame)
|
||||
break;
|
||||
|
@ -1573,19 +1574,22 @@ transcode_decode(struct decoded_frame **decoded, struct decode_ctx *ctx)
|
|||
}
|
||||
while (!got_frame);
|
||||
|
||||
// Return the decoded frame and stream index
|
||||
*decoded = malloc(sizeof(struct decoded_frame));
|
||||
if (!*decoded)
|
||||
if (got_frame > 0)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for decoded result\n");
|
||||
// Return the decoded frame and stream index
|
||||
*decoded = malloc(sizeof(struct decoded_frame));
|
||||
if (!(*decoded))
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for decoded result\n");
|
||||
|
||||
av_frame_free(&frame);
|
||||
return -1;
|
||||
av_frame_free(&frame);
|
||||
return -1;
|
||||
}
|
||||
|
||||
(*decoded)->frame = frame;
|
||||
(*decoded)->stream_index = stream_index;
|
||||
}
|
||||
|
||||
(*decoded)->frame = frame;
|
||||
(*decoded)->stream_index = stream_index;
|
||||
|
||||
return got_frame;
|
||||
}
|
||||
|
||||
|
@ -1659,10 +1663,17 @@ transcode_raw2frame(uint8_t *data, size_t size)
|
|||
int ret;
|
||||
|
||||
decoded = malloc(sizeof(struct decoded_frame));
|
||||
frame = av_frame_alloc();
|
||||
if (!decoded || !frame)
|
||||
if (!decoded)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for decoded struct or frame\n");
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for decoded struct\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
frame = av_frame_alloc();
|
||||
if (!frame)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Out of memory for frame\n");
|
||||
free(decoded);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1682,6 +1693,7 @@ transcode_raw2frame(uint8_t *data, size_t size)
|
|||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_LOG, L_XCODE, "Error filling frame with rawbuf: %s\n", err2str(ret));
|
||||
transcode_decoded_free(decoded);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -142,19 +142,18 @@ worker_execute(void (*cb)(void *), void *cb_arg, size_t arg_size, int delay)
|
|||
|
||||
DPRINTF(E_DBG, L_MAIN, "Got worker execute request\n");
|
||||
|
||||
cmdarg = (struct worker_arg *)malloc(sizeof(struct worker_arg));
|
||||
cmdarg = calloc(1, sizeof(struct worker_arg));
|
||||
if (!cmdarg)
|
||||
{
|
||||
DPRINTF(E_LOG, L_MAIN, "Could not allocate worker_arg\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(cmdarg, 0, sizeof(struct worker_arg));
|
||||
|
||||
argcpy = malloc(arg_size);
|
||||
if (!argcpy)
|
||||
{
|
||||
DPRINTF(E_LOG, L_MAIN, "Out of memory\n");
|
||||
free(cmdarg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue