better handling for OSs with small RAND_MAX (SF#1783630: https://sourceforge.net/tracker/index.php?func=detail&aid=1783630&group_id=13478&atid=113478)
diff --git a/doc/html/changelog.html b/doc/html/changelog.html
index 6266160..bf7d739 100644
--- a/doc/html/changelog.html
+++ b/doc/html/changelog.html
@@ -108,7 +108,7 @@
 					<li>Fixed bug where sometimes an existing installation of flac could interfere with the build process (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1763690&amp;group_id=13478&amp;atid=113478">SF #1763690</a>).</li>
 					<li>OS X fixes (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1786225&amp;group_id=13478&amp;atid=313478">SF #1786225</a>).</li>
 					<li>MinGW fixes (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1684879&amp;group_id=13478&amp;atid=113478">SF #1684879</a>).</li>
-					<li>Solaris 10 fixes (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1783225&amp;group_id=13478&amp;atid=113478">SF #1783225</a>).</li>
+					<li>Solaris 10 fixes (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1783225&amp;group_id=13478&amp;atid=113478">SF #1783225</a> <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1783630&amp;group_id=13478&amp;atid=113478">SF #1783630</a>).</li>
 					<li>OS/2 fixes (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1771378&amp;group_id=13478&amp;atid=113478">SF #1771378</a> <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229495&amp;group_id=13478&amp;atid=113478">SF #1229495</a>).</li>
 				</ul>
 			</li>
diff --git a/src/test_seeking/main.c b/src/test_seeking/main.c
index 7c3a87f..d5b5487 100644
--- a/src/test_seeking/main.c
+++ b/src/test_seeking/main.c
@@ -75,6 +75,21 @@
 	return false;
 }
 
+static unsigned local_rand_(void)
+{
+#if !defined _MSC_VER && !defined __MINGW32__
+#define RNDFUNC random
+#else
+#define RNDFUNC rand
+#endif
+	/* every RAND_MAX I've ever seen is 2^15-1 or 2^31-1, so a little hackery here: */
+	if (RAND_MAX > 32767)
+		return RNDFUNC();
+	else /* usually MSVC, some solaris */
+		return (RNDFUNC()<<15) | RNDFUNC();
+#undef RNDFUNC
+}
+
 static off_t get_filesize_(const char *srcpath)
 {
 	struct stat srcstat;
@@ -299,12 +314,6 @@
 #else
 	printf("file's total_samples is %llu\n", (unsigned long long)decoder_client_data.total_samples);
 #endif
-#if !defined _MSC_VER && !defined __MINGW32__ && !defined __EMX__
-	if (decoder_client_data.total_samples > (FLAC__uint64)RAND_MAX) {
-		printf("ERROR: must be total_samples < %u\n", (unsigned)RAND_MAX);
-		return false;
-	}
-#endif
 	n = (long int)decoder_client_data.total_samples;
 
 	if(n == 0 && total_samples >= 0)
@@ -315,10 +324,6 @@
 	if(n == 0) {
 		/* 8 would imply no compression, 9 guarantees that we will get some samples off the end of the stream to test that case */
 		n = 9 * filesize / (decoder_client_data.channels * decoder_client_data.bits_per_sample);
-#if !defined _MSC_VER && !defined __MINGW32__
-		if(n > RAND_MAX)
-			n = RAND_MAX;
-#endif
 	}
 
 	printf("Begin seek barrage, count=%u\n", count);
@@ -339,12 +344,7 @@
 			pos = n + (i-20);
 		}
 		else {
-#if !defined _MSC_VER && !defined __MINGW32__
-			pos = (FLAC__uint64)(random() % n);
-#else
-			/* RAND_MAX is only 32767 in my MSVC */
-			pos = (FLAC__uint64)((rand()<<15|rand()) % n);
-#endif
+			pos = (FLAC__uint64)(local_rand_() % n);
 		}
 
 #ifdef _MSC_VER