static struct input_stream * bz2_open_stream(struct archive_file *file, const char *path, GMutex *mutex, GCond *cond, GError **error_r) { struct bz2_archive_file *context = (struct bz2_archive_file *) file; struct bz2_input_stream *bis = g_new(struct bz2_input_stream, 1); input_stream_init(&bis->base, &bz2_inputplugin, path, mutex, cond); bis->archive = context; bis->base.ready = true; bis->base.seekable = false; if (!bz2_alloc(bis, error_r)) { input_stream_deinit(&bis->base); g_free(bis); return NULL; } bis->eof = false; refcount_inc(&context->ref); return &bis->base; }
static void input_file_close(struct input_stream *is) { struct file_input_stream *fis = (struct file_input_stream *)is; close(fis->fd); input_stream_deinit(&fis->base); g_free(fis); }
static void bz2_is_close(struct input_stream *is) { struct bz2_input_stream *bis = (struct bz2_input_stream *)is; bz2_destroy(bis); bz2_close(&bis->archive->base); input_stream_deinit(&bis->base); g_free(bis); }
static void input_ffmpeg_close(struct input_stream *is) { struct input_ffmpeg *i = (struct input_ffmpeg *)is; #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53,0,0) avio_close(i->h); #else url_close(i->h); #endif input_stream_deinit(&i->base); g_free(i); }
static void input_despotify_close(struct input_stream *is) { struct input_despotify *ctx = (struct input_despotify *)is; if (ctx->tag != NULL) tag_free(ctx->tag); mpd_despotify_unregister_callback(callback); despotify_free_track(ctx->track); input_stream_deinit(&ctx->base); g_free(ctx); }
static void input_cdio_close(struct input_stream *is) { struct input_cdio_paranoia *i = (struct input_cdio_paranoia *)is; pcm_buffer_deinit(&i->conv_buffer); if (i->para) cdio_paranoia_free(i->para); if (i->drv) cdio_cddap_close_no_free_cdio( i->drv); if (i->cdio) cdio_destroy( i->cdio ); input_stream_deinit(&i->base); g_free(i); }
/** * Frees this stream (but not the input_stream struct itself). */ static void input_curl_free(struct input_curl *c) { if (c->tag != NULL) tag_free(c->tag); g_free(c->meta_name); input_curl_easy_free(c); if (c->multi != NULL) curl_multi_cleanup(c->multi); g_queue_free(c->buffers); g_free(c->url); input_stream_deinit(&c->base); g_free(c); }