add explicit casts for some implicit conversions
diff --git a/src/flac/decode.c b/src/flac/decode.c
index 7bee2e1..79f738f 100644
--- a/src/flac/decode.c
+++ b/src/flac/decode.c
@@ -365,12 +365,12 @@
 			if(is_unsigned_samples) {
 				for(sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
 					for(channel = 0; channel < channels; channel++, sample++)
-						u8buffer[sample] = buffer[channel][wide_sample] + 0x80;
+						u8buffer[sample] = (FLAC__uint8)(buffer[channel][wide_sample] + 0x80);
 			}
 			else {
 				for(sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
 					for(channel = 0; channel < channels; channel++, sample++)
-						s8buffer[sample] = buffer[channel][wide_sample];
+						s8buffer[sample] = (FLAC__int8)(buffer[channel][wide_sample]);
 			}
 			if(fwrite(u8buffer, 1, sample, fout) != sample)
 				return FLAC__STREAM_DECODER_WRITE_ABORT;
@@ -379,12 +379,12 @@
 			if(is_unsigned_samples) {
 				for(sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
 					for(channel = 0; channel < channels; channel++, sample++)
-						u16buffer[sample] = buffer[channel][wide_sample] + 0x8000;
+						u16buffer[sample] = (FLAC__uint16)(buffer[channel][wide_sample] + 0x8000);
 			}
 			else {
 				for(sample = wide_sample = 0; wide_sample < wide_samples; wide_sample++)
 					for(channel = 0; channel < channels; channel++, sample++)
-						s16buffer[sample] = buffer[channel][wide_sample];
+						s16buffer[sample] = (FLAC__int16)(buffer[channel][wide_sample]);
 			}
 			if(is_big_endian != is_big_endian_host) {
 				unsigned char tmp;
diff --git a/src/flac/encode.c b/src/flac/encode.c
index cacfbbd..031ec8b 100644
--- a/src/flac/encode.c
+++ b/src/flac/encode.c
@@ -247,7 +247,7 @@
 					}
 					else {
 						unsigned left, need;
-						for(left = skip; left > 0; ) {
+						for(left = (unsigned)skip; left > 0; ) { /*@@@ WATCHOUT: 4GB limit */
 							need = min(left, CHUNK_OF_SAMPLES);
 							if(fread(ucbuffer, 1, bytes_per_wide_sample * need, infile) < need) {
 								fprintf(stderr, "%s: ERROR during read while skipping samples\n", encoder_wrapper.inbasefilename);
@@ -258,10 +258,10 @@
 					}
 				}
 
-				data_bytes -= skip * bytes_per_wide_sample;
+				data_bytes -= (unsigned)skip * bytes_per_wide_sample; /*@@@ WATCHOUT: 4GB limit */
 				encoder_wrapper.total_samples_to_encode = data_bytes / bytes_per_wide_sample + *align_reservoir_samples;
 				if(sector_align) {
-					align_remainder = encoder_wrapper.total_samples_to_encode % 588;
+					align_remainder = (unsigned)(encoder_wrapper.total_samples_to_encode % 588);
 					if(is_last_file)
 						encoder_wrapper.total_samples_to_encode += (588-align_remainder); /* will pad with zeroes */
 					else
@@ -1058,7 +1058,7 @@
 		for(i = 0; i < encoder_wrapper->seek_table.num_points; i++) {
 			if(!write_big_endian_uint64(f, encoder_wrapper->seek_table.points[i].sample_number)) goto end_;
 			if(!write_big_endian_uint64(f, encoder_wrapper->seek_table.points[i].stream_offset)) goto end_;
-			if(!write_big_endian_uint16(f, encoder_wrapper->seek_table.points[i].frame_samples)) goto end_;
+			if(!write_big_endian_uint16(f, (FLAC__uint16)encoder_wrapper->seek_table.points[i].frame_samples)) goto end_;
 		}
 	}
 
diff --git a/src/libFLAC/bitbuffer.c b/src/libFLAC/bitbuffer.c
index f786843..a93cfd8 100644
--- a/src/libFLAC/bitbuffer.c
+++ b/src/libFLAC/bitbuffer.c
@@ -290,17 +290,17 @@
 		n = 8 - bb->bits;
 		if(n == 8) { /* i.e. bb->bits == 0 */
 			if(bits < 8) {
-				bb->buffer[bb->bytes] = val;
+				bb->buffer[bb->bytes] = (FLAC__byte)val;
 				bb->bits = bits;
 				break;
 			}
 			else if(bits == 8) {
-				bb->buffer[bb->bytes++] = val;
+				bb->buffer[bb->bytes++] = (FLAC__byte)val;
 				break;
 			}
 			else {
 				k = bits - 8;
-				bb->buffer[bb->bytes++] = val >> k;
+				bb->buffer[bb->bytes++] = (FLAC__byte)(val >> k);
 				val &= (~(0xffffffff << k));
 				bits -= 8;
 			}
@@ -371,17 +371,17 @@
 	while(bits > 0) {
 		if(bb->bits == 0) {
 			if(bits < 8) {
-				bb->buffer[bb->bytes] = val;
+				bb->buffer[bb->bytes] = (FLAC__byte)val;
 				bb->bits = bits;
 				break;
 			}
 			else if(bits == 8) {
-				bb->buffer[bb->bytes++] = val;
+				bb->buffer[bb->bytes++] = (FLAC__byte)val;
 				break;
 			}
 			else {
 				k = bits - 8;
-				bb->buffer[bb->bytes++] = val >> k;
+				bb->buffer[bb->bytes++] = (FLAC__byte)(val >> k);
 				val &= (~(0xffffffffffffffff << k));
 				bits -= 8;
 			}
diff --git a/src/libFLAC/file_decoder.c b/src/libFLAC/file_decoder.c
index 0bb50a8..4947065 100644
--- a/src/libFLAC/file_decoder.c
+++ b/src/libFLAC/file_decoder.c
@@ -506,6 +506,7 @@
 
 FLAC__bool seek_to_absolute_sample_(FLAC__FileDecoder *decoder, long filesize, FLAC__uint64 target_sample)
 {
+	/* @@@ we should really change long to off_t and start using lseek(); with fseek() we have the 2GB file limit. */
 	long first_frame_offset, lower_bound, upper_bound, pos = -1, last_pos = -1;
 	int i, lower_seek_point = -1, upper_seek_point = -1;
 	unsigned approx_bytes_per_frame;
@@ -563,7 +564,7 @@
 				break;
 		}
 		if(i >= 0) { /* i.e. we found a suitable seek point... */
-			lower_bound = first_frame_offset + decoder->private->seek_table->points[i].stream_offset;
+			lower_bound = first_frame_offset + (long)decoder->private->seek_table->points[i].stream_offset;
 			lower_seek_point = i;
 		}
 
@@ -573,7 +574,7 @@
 				break;
 		}
 		if(i < (int)decoder->private->seek_table->num_points) { /* i.e. we found a suitable seek point... */
-			upper_bound = first_frame_offset + decoder->private->seek_table->points[i].stream_offset;
+			upper_bound = first_frame_offset + (long)decoder->private->seek_table->points[i].stream_offset;
 			upper_seek_point = i;
 		}
 	}