Commit Diff


commit - 33e8ddf3b1df91d66664dcf0dc7011d089a74611
commit + 986b215cdb6f7ee801a41ed35e5fef08aeb33d29
blob - 7df1d378d1b826a3bab7a241cf6c9d7f257c9b0f
blob + 6e913d31c9da3e22f3d7a4b78ed61aab96a41fd5
--- player_flac.c
+++ player_flac.c
@@ -142,12 +142,18 @@ play_flac(int fd, const char **errstr)
 	FLAC__StreamDecoder *decoder = NULL;
 	FLAC__StreamDecoderInitStatus init_status;
 
-	if ((f = fdopen(fd, "r")) == NULL)
-		err(1, "fdopen");
+	if ((f = fdopen(fd, "r")) == NULL) {
+		*errstr = "fdopen failed";
+		close(fd);
+		return -1;
+	}
 
 	decoder = FLAC__stream_decoder_new();
-	if (decoder == NULL)
-		err(1, "flac stream decoder");
+	if (decoder == NULL) {
+		*errstr = "FLAC__stream_decoder_new() failed";
+		fclose(f);
+		return -1;
+	}
 
 	FLAC__stream_decoder_set_md5_checking(decoder, 1);
 
blob - 1dfcd33df7e7825abdeae89a9a4711ecde1fcbe3
blob + 3f7581bb2de0a8daec69af42b873a2d4a2b29cac
--- player_oggvorbis.c
+++ player_oggvorbis.c
@@ -44,8 +44,11 @@ play_oggvorbis(int fd, const char **errstr)
 	int64_t seek = -1;
 	int current_section, eof = 0, ret = 0;
 
-	if ((f = fdopen(fd, "r")) == NULL)
-		err(1, "fdopen");
+	if ((f = fdopen(fd, "r")) == NULL) {
+		*errstr = "fdopen failed";
+		close(fd);
+		return -1;
+	}
 
 	if (ov_open_callbacks(f, &vf, NULL, 0, OV_CALLBACKS_NOCLOSE) < 0) {
 		*errstr = "input is not an Ogg bitstream";
blob - 0bf3329cc72a047d61b5f62504afd5445d2b5b2d
blob + 7c54607a6066686461bb5a61e212e5a379d7f4d0
--- player_opus.c
+++ player_opus.c
@@ -45,8 +45,11 @@ play_opus(int fd, const char **errstr)
 	OpusFileCallbacks cb = {NULL, NULL, NULL, NULL};
 	int i, li, prev_li = -1, duration_set = 0;
 
-	if ((f = op_fdopen(&cb, fd, "r")) == NULL)
-		err(1, "fdopen");
+	if ((f = op_fdopen(&cb, fd, "r")) == NULL) {
+		*errstr = "fdopen failed";
+		close(fd);
+		return -1;
+	}
 
 	of = op_open_callbacks(f, &cb, NULL, 0, &r);
 	if (of == NULL) {