diff --git a/src/flac/encode.c b/src/flac/encode.c
index a11f632..e46d8b5 100644
--- a/src/flac/encode.c
+++ b/src/flac/encode.c
@@ -64,7 +64,7 @@
 
 typedef struct {
 	FILE *fout;
-	const char *outfile;
+	const char *outfilename;
 	FLAC__Encoder *encoder;
 	bool verify;
 	bool verbose;
@@ -108,10 +108,9 @@
 static bool write_big_endian_uint16(FILE *f, uint16 val);
 static bool write_big_endian_uint64(FILE *f, uint64 val);
 
-int encode_wav(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points)
+int encode_wav(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points)
 {
 	encoder_wrapper_struct encoder_wrapper;
-	FILE *fin;
 	bool is_unsigned_samples;
 	unsigned channels, bps, sample_rate, data_bytes;
 	size_t bytes_per_wide_sample, bytes_read;
@@ -123,26 +122,17 @@
 	encoder_wrapper.verbose = verbose;
 	encoder_wrapper.bytes_written = 0;
 	encoder_wrapper.samples_written = 0;
-	encoder_wrapper.outfile = outfile;
+	encoder_wrapper.outfilename = outfilename;
 	encoder_wrapper.seek_table.points = 0;
 	encoder_wrapper.first_seek_point_to_check = 0;
 
-	if(0 == strcmp(infile, "-")) {
-		fin = stdin;
-	}
-	else {
-		if(0 == (fin = fopen(infile, "rb"))) {
-			fprintf(stderr, "ERROR: can't open input file %s\n", infile);
-			return false;
-		}
-	}
-	if(0 == strcmp(outfile, "-")) {
+	if(0 == strcmp(outfilename, "-")) {
 		encoder_wrapper.fout = stdout;
 	}
 	else {
-		if(0 == (encoder_wrapper.fout = fopen(outfile, "wb"))) {
-			fprintf(stderr, "ERROR: can't open output file %s\n", outfile);
-			fclose(fin);
+		if(0 == (encoder_wrapper.fout = fopen(outfilename, "wb"))) {
+			fprintf(stderr, "ERROR: can't open output file %s\n", outfilename);
+			fclose(infile);
 			return false;
 		}
 	}
@@ -153,19 +143,19 @@
 	/*
 	 * check the RIFF chunk
 	 */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x46464952) { /* "RIFF" */
 		fprintf(stderr, "ERROR: no RIFF header\n");
 		goto wav_abort_;
 	}
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 
 	/*
 	 * now process the WAVE chunk
 	 */
-	if(!read_little_endian_uint32(fin, &xx, true))
+	if(!read_little_endian_uint32(infile, &xx, true))
 		goto wav_end_;
 	if(xx != 0x45564157) { /* "WAVE" */
 		fprintf(stderr, "ERROR: no WAVE header\n");
@@ -173,28 +163,28 @@
 	}
 
 	/* do the format sub-chunk */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x20746d66) { /* "fmt " */
 		fprintf(stderr, "ERROR: no format sub-chunk\n");
 		goto wav_abort_;
 	}
 	/* fmt chunk size */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 16) {
 		fprintf(stderr, "ERROR: unsupported chunk\n");
 		goto wav_abort_;
 	}
 	/* compression code */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x != 1) {
 		fprintf(stderr, "ERROR: unsupported compression type %u\n", (unsigned)x);
 		goto wav_abort_;
 	}
 	/* number of channels */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x == 0 || x > FLAC__MAX_CHANNELS) {
 		fprintf(stderr, "ERROR: unsupported number channels %u\n", (unsigned)x);
@@ -202,7 +192,7 @@
 	}
 	channels = x;
 	/* sample rate */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx == 0 || xx > FLAC__MAX_SAMPLE_RATE) {
 		fprintf(stderr, "ERROR: unsupported sample rate %u\n", (unsigned)xx);
@@ -210,13 +200,13 @@
 	}
 	sample_rate = xx;
 	/* avg bytes per second (ignored) */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	/* block align (ignored) */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	/* bits per sample */
-	if(!read_little_endian_uint16(fin, &x, false))
+	if(!read_little_endian_uint16(infile, &x, false))
 		goto wav_abort_;
 	if(x != 8 && x != 16) {
 		fprintf(stderr, "ERROR: unsupported bits per sample %u\n", (unsigned)x);
@@ -226,23 +216,23 @@
 	is_unsigned_samples = (x == 8);
 
 	/* do the data sub-chunk */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	if(xx != 0x61746164) { /* "data" */
 		fprintf(stderr, "ERROR: no data sub-chunk\n");
 		goto wav_abort_;
 	}
 	/* data size */
-	if(!read_little_endian_uint32(fin, &xx, false))
+	if(!read_little_endian_uint32(infile, &xx, false))
 		goto wav_abort_;
 	data_bytes = xx;
 
 	bytes_per_wide_sample = channels * (bps >> 3);
 
 	if(skip > 0) {
-		if(fin != stdin) {
-			if(-1 == fseek(fin, bytes_per_wide_sample * (unsigned)skip, SEEK_CUR)) {
-				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+		if(infile != stdin) {
+			if(-1 == fseek(infile, bytes_per_wide_sample * (unsigned)skip, SEEK_CUR)) {
+				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 				goto wav_abort_;
 			}
 		}
@@ -251,8 +241,8 @@
 			unsigned need;
 			for(left = (int64)skip; left > 0; left -= CHUNK_OF_SAMPLES) {
 				need = min(left, CHUNK_OF_SAMPLES);
-				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, fin) < need) {
-					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, infile) < need) {
+					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 					goto wav_abort_;
 				}
 			}
@@ -268,20 +258,20 @@
 	encoder_wrapper.verify_fifo.into_frames = true;
 
 	while(data_bytes > 0) {
-		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, fin);
+		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, infile);
 		if(bytes_read == 0) {
-			if(ferror(fin)) {
-				fprintf(stderr, "ERROR reading from %s\n", infile);
+			if(ferror(infile)) {
+				fprintf(stderr, "ERROR reading from %s\n", infilename);
 				goto wav_abort_;
 			}
-			else if(feof(fin))
+			else if(feof(infile))
 				break;
 		}
 		else {
 			if(bytes_read > data_bytes)
 				bytes_read = data_bytes; /* chop off anything after the end of the data chunk */
 			if(bytes_read % bytes_per_wide_sample != 0) {
-				fprintf(stderr, "ERROR, got partial sample from input file %s\n", infile);
+				fprintf(stderr, "ERROR, got partial sample from input file %s\n", infilename);
 				goto wav_abort_;
 			}
 			else {
@@ -312,14 +302,15 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
+	if(infile != stdin)
+		fclose(infile);
 	return 0;
 wav_abort_:
 	if(encoder_wrapper.verbose && encoder_wrapper.total_samples_to_encode > 0)
@@ -333,22 +324,22 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
-	unlink(outfile);
+	if(infile != stdin)
+		fclose(infile);
+	unlink(outfilename);
 	return 1;
 }
 
-int encode_raw(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate)
+int encode_raw(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate)
 {
 	encoder_wrapper_struct encoder_wrapper;
-	FILE *fin;
 	size_t bytes_read;
 	const size_t bytes_per_wide_sample = channels * (bps >> 3);
 
@@ -357,26 +348,17 @@
 	encoder_wrapper.verbose = verbose;
 	encoder_wrapper.bytes_written = 0;
 	encoder_wrapper.samples_written = 0;
-	encoder_wrapper.outfile = outfile;
+	encoder_wrapper.outfilename = outfilename;
 	encoder_wrapper.seek_table.points = 0;
 	encoder_wrapper.first_seek_point_to_check = 0;
 
-	if(0 == strcmp(infile, "-")) {
-		fin = stdin;
-	}
-	else {
-		if(0 == (fin = fopen(infile, "rb"))) {
-			fprintf(stderr, "ERROR: can't open input file %s\n", infile);
-			return false;
-		}
-	}
-	if(0 == strcmp(outfile, "-")) {
+	if(0 == strcmp(outfilename, "-")) {
 		encoder_wrapper.fout = stdout;
 	}
 	else {
-		if(0 == (encoder_wrapper.fout = fopen(outfile, "wb"))) {
-			fprintf(stderr, "ERROR: can't open output file %s\n", outfile);
-			fclose(fin);
+		if(0 == (encoder_wrapper.fout = fopen(outfilename, "wb"))) {
+			fprintf(stderr, "ERROR: can't open output file %s\n", outfilename);
+			fclose(infile);
 			return false;
 		}
 	}
@@ -385,13 +367,13 @@
 		goto raw_abort_;
 
 	/* get the file length */
-	if(0 != fseek(fin, 0, SEEK_END)) {
+	if(0 != fseek(infile, 0, SEEK_END)) {
 		encoder_wrapper.total_samples_to_encode = encoder_wrapper.unencoded_size = 0;
 	}
 	else {
 		long filesize;
-		fflush(fin);
-		if(-1 == (filesize = ftell(fin))) {
+		fflush(infile);
+		if(-1 == (filesize = ftell(infile))) {
 			encoder_wrapper.total_samples_to_encode = encoder_wrapper.unencoded_size = 0;
 		}
 		else {
@@ -401,9 +383,9 @@
 	}
 
 	if(skip > 0) {
-		if(fin != stdin) {
-			if(-1 == fseek(fin, bytes_per_wide_sample * (unsigned)skip, SEEK_SET)) {
-				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+		if(infile != stdin) {
+			if(-1 == fseek(infile, bytes_per_wide_sample * (unsigned)skip, SEEK_SET)) {
+				fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 				goto raw_abort_;
 			}
 		}
@@ -412,15 +394,15 @@
 			unsigned need;
 			for(left = (int64)skip; left > 0; left -= CHUNK_OF_SAMPLES) {
 				need = min(left, CHUNK_OF_SAMPLES);
-				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, fin) < need) {
-					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infile);
+				if(fread(ucbuffer, 1, bytes_per_wide_sample * need, infile) < need) {
+					fprintf(stderr, "ERROR seeking while skipping samples in input file %s\n", infilename);
 					goto raw_abort_;
 				}
 			}
 		}
 	}
 	else {
-		fseek(fin, 0, SEEK_SET);
+		fseek(infile, 0, SEEK_SET);
 	}
 
 	if(!init_encoder(lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, blocksize, qlp_coeff_precision, channels, bps, sample_rate, padding, requested_seek_points, num_requested_seek_points, &encoder_wrapper))
@@ -428,16 +410,16 @@
 
 	encoder_wrapper.verify_fifo.into_frames = true;
 
-	while(!feof(fin)) {
-		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, fin);
+	while(!feof(infile)) {
+		bytes_read = fread(ucbuffer, sizeof(unsigned char), CHUNK_OF_SAMPLES * bytes_per_wide_sample, infile);
 		if(bytes_read == 0) {
-			if(ferror(fin)) {
-				fprintf(stderr, "ERROR reading from %s\n", infile);
+			if(ferror(infile)) {
+				fprintf(stderr, "ERROR reading from %s\n", infilename);
 				goto raw_abort_;
 			}
 		}
 		else if(bytes_read % bytes_per_wide_sample != 0) {
-			fprintf(stderr, "ERROR, got partial sample from input file %s\n", infile);
+			fprintf(stderr, "ERROR, got partial sample from input file %s\n", infilename);
 			goto raw_abort_;
 		}
 		else {
@@ -465,14 +447,15 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
+	if(infile != stdin)
+		fclose(infile);
 	return 0;
 raw_abort_:
 	if(encoder_wrapper.verbose && encoder_wrapper.total_samples_to_encode > 0)
@@ -486,15 +469,16 @@
 		free(encoder_wrapper.seek_table.points);
 	if(verify) {
 		if(encoder_wrapper.verify_fifo.result != FLAC__VERIFY_OK) {
-			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfile);
+			printf("Verify FAILED! (%s)  Do not use %s\n", verify_code_string[encoder_wrapper.verify_fifo.result], outfilename);
 			return 1;
 		}
 		else {
 			printf("Verify succeeded\n");
 		}
 	}
-	fclose(fin);
-	unlink(outfile);
+	if(infile != stdin)
+		fclose(infile);
+	unlink(outfilename);
 	return 1;
 }
 
@@ -854,7 +838,7 @@
 		return;
 
 	fclose(encoder_wrapper->fout);
-	if(0 == (f = fopen(encoder_wrapper->outfile, "r+b")))
+	if(0 == (f = fopen(encoder_wrapper->outfilename, "r+b")))
 		return;
 
 	/* all this is based on intimate knowledge of the stream header
diff --git a/src/flac/encode.h b/src/flac/encode.h
index 3b581ce..db4366d 100644
--- a/src/flac/encode.h
+++ b/src/flac/encode.h
@@ -21,7 +21,7 @@
 
 #include "FLAC/ordinals.h"
 
-int encode_wav(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
-int encode_raw(const char *infile, const char *outfile, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
+int encode_wav(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
+int encode_raw(FILE *infile, const char *infilename, const char *outfilename, bool verbose, uint64 skip, bool verify, bool lax, bool do_mid_side, bool loose_mid_side, bool do_exhaustive_model_search, bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, bool is_big_endian, bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
 
 #endif
