add user hints to use --keep-foreign-metadata when skipping chunks, fix bug skipping ahead in stdin on windows (SF#1776803: http://sourceforge.net/tracker/index.php?func=detail&aid=1776803&group_id=13478&atid=113478)
diff --git a/src/flac/encode.c b/src/flac/encode.c
index e14d99b..f939d45 100644
--- a/src/flac/encode.c
+++ b/src/flac/encode.c
@@ -336,7 +336,7 @@
 
 			/* skip any extra data in the COMM chunk */
 			if(!fskip_ahead(infile, skip)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping extra COMM data\n", encoder_session.inbasefilename);
+				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over extra COMM data\n", encoder_session.inbasefilename);
 				return EncoderSession_finish_error(&encoder_session);
 			}
 
@@ -572,18 +572,13 @@
 			got_ssnd_chunk= true;
 		}
 		else { /* other chunk */
-			if(!memcmp(chunk_id, "COMM", 4)) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'COMM' chunk\n", encoder_session.inbasefilename);
-				if(encoder_session.treat_warnings_as_errors)
-					return EncoderSession_finish_error(&encoder_session);
-			}
-			else if(!memcmp(chunk_id, "SSND", 4)) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'SSND' chunk\n", encoder_session.inbasefilename);
-				if(encoder_session.treat_warnings_as_errors)
-					return EncoderSession_finish_error(&encoder_session);
-			}
-			else if(!options.foreign_metadata) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown chunk '%s'\n", encoder_session.inbasefilename, chunk_id);
+			if(!options.foreign_metadata) {
+				if(!memcmp(chunk_id, "COMM", 4))
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'COMM' chunk (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename);
+				else if(!memcmp(chunk_id, "SSND", 4))
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'SSND' chunk (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename);
+				else if(!options.foreign_metadata)
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown chunk '%s' (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename, chunk_id);
 				if(encoder_session.treat_warnings_as_errors)
 					return EncoderSession_finish_error(&encoder_session);
 			}
@@ -596,7 +591,7 @@
 
 				FLAC__ASSERT(skip<=LONG_MAX);
 				if(!fskip_ahead(infile, skip)) {
-					fprintf(stderr, "%s: ERROR during read while skipping unknown chunk\n", encoder_session.inbasefilename);
+					fprintf(stderr, "%s: ERROR during read while skipping over unknown chunk\n", encoder_session.inbasefilename);
 					return EncoderSession_finish_error(&encoder_session);
 				}
 			}
@@ -920,7 +915,7 @@
 
 			/* skip any extra data in the fmt sub-chunk */
 			if(!fskip_ahead(infile, data_bytes)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping extra 'fmt' data\n", encoder_session.inbasefilename);
+				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over extra 'fmt' data\n", encoder_session.inbasefilename);
 				return EncoderSession_finish_error(&encoder_session);
 			}
 
@@ -1132,30 +1127,22 @@
 			got_data_chunk = true;
 		}
 		else {
-			if(xx == 0x20746d66 && got_fmt_chunk) { /* "fmt " */
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'fmt ' sub-chunk\n", encoder_session.inbasefilename);
+			if(xx == 0x61746164 && !got_fmt_chunk) { /* "data" */
+				flac__utils_printf(stderr, 1, "%s: ERROR: got 'data' sub-chunk before 'fmt' sub-chunk\n", encoder_session.inbasefilename);
+				return EncoderSession_finish_error(&encoder_session);
+			}
+
+			if(!options.foreign_metadata) {
+				if(xx == 0x20746d66 && got_fmt_chunk) /* "fmt " */
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'fmt ' sub-chunk (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename);
+				else if(xx == 0x61746164) /* "data" */
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'data' sub-chunk (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename);
+				else
+					flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown sub-chunk '%c%c%c%c' (use --keep-foreign-metadata to keep)\n", encoder_session.inbasefilename, (char)(xx&255), (char)((xx>>8)&255), (char)((xx>>16)&255), (char)(xx>>24));
 				if(encoder_session.treat_warnings_as_errors)
 					return EncoderSession_finish_error(&encoder_session);
 			}
-			else if(xx == 0x61746164) { /* "data" */
-				if(got_data_chunk) {
-					flac__utils_printf(stderr, 1, "%s: WARNING: skipping extra 'data' sub-chunk\n", encoder_session.inbasefilename);
-					if(encoder_session.treat_warnings_as_errors)
-						return EncoderSession_finish_error(&encoder_session);
-				}
-				else if(!got_fmt_chunk) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: got 'data' sub-chunk before 'fmt' sub-chunk\n", encoder_session.inbasefilename);
-					return EncoderSession_finish_error(&encoder_session);
-				}
-				else {
-					FLAC__ASSERT(0);
-				}
-			}
-			else if(!options.foreign_metadata) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown sub-chunk '%c%c%c%c'\n", encoder_session.inbasefilename, (char)(xx&255), (char)((xx>>8)&255), (char)((xx>>16)&255), (char)(xx>>24));
-				if(encoder_session.treat_warnings_as_errors)
-					return EncoderSession_finish_error(&encoder_session);
-			}
+
 			/* sub-chunk size */
 			if(!read_little_endian_uint32(infile, &xx, false, encoder_session.inbasefilename))
 				return EncoderSession_finish_error(&encoder_session);
@@ -1164,7 +1151,7 @@
 
 				FLAC__ASSERT(skip<=LONG_MAX);
 				if(!fskip_ahead(infile, skip)) {
-					flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping unsupported sub-chunk\n", encoder_session.inbasefilename);
+					flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over unsupported sub-chunk\n", encoder_session.inbasefilename);
 					return EncoderSession_finish_error(&encoder_session);
 				}
 			}
@@ -2894,23 +2881,29 @@
 {
 	static unsigned char dump[8192];
 
-	while(offset > 0) {
-		long need = (long)min(offset, LONG_MAX);
-	   	if(fseeko(f, need, SEEK_CUR) < 0) {
-			need = (long)min(offset, sizeof(dump));
-			if((long)fread(dump, 1, need, f) < need)
+#ifdef _MSC_VER
+	if(f == stdin) {
+		/* MS' stdio impl can't even seek forward on stdin, have to use pure non-fseek() version: */
+		while(offset > 0) {
+			const long need = (long)min(offset, sizeof(dump));
+			if(fread(dump, 1, need, f) < need)
 				return false;
+			offset -= need;
 		}
-		offset -= need;
 	}
-#if 0 /* pure non-fseek() version */
-	while(offset > 0) {
-		const long need = (long)min(offset, sizeof(dump));
-		if(fread(dump, 1, need, f) < need)
-			return false;
-		offset -= need;
-	}
+	else
 #endif
+	{
+		while(offset > 0) {
+			long need = (long)min(offset, LONG_MAX);
+			if(fseeko(f, need, SEEK_CUR) < 0) {
+				need = (long)min(offset, sizeof(dump));
+				if((long)fread(dump, 1, need, f) < need)
+					return false;
+			}
+			offset -= need;
+		}
+	}
 	return true;
 }