diff --git a/src/xpdev/xpbeep.c b/src/xpdev/xpbeep.c
index c7a74101b995b04596b391b19c27dc365ce8db91..ddd3b6e022daa627a92f16060d36bbfb6806e3b3 100644
--- a/src/xpdev/xpbeep.c
+++ b/src/xpdev/xpbeep.c
@@ -834,7 +834,7 @@ do_xp_play_sample(unsigned char *sampo, size_t sz, int *freed)
 	int need_copy = 0;
 #endif
 #ifdef AFMT_U8
-	int wr;
+	size_t wr;
 	int	i;
 #endif
 
@@ -976,12 +976,15 @@ do_xp_play_sample(unsigned char *sampo, size_t sz, int *freed)
 #endif
 
 #ifdef AFMT_U8
-	if(handle_type==SOUND_DEVICE_OSS) {
-		wr=0;
-		while(wr<sz) {
-			i=write(dsp, samp+wr, sz-wr);
-			if(i>=0)
-				wr+=i;
+	if (handle_type == SOUND_DEVICE_OSS) {
+		wr = 0;
+		while (wr < sz) {
+			i = write(dsp, samp + wr, sz - wr);
+			if (i >= 0) {
+				if ((SIZE_MAX - i) < wr)
+					wr = SIZE_MAX;
+				wr += i;
+			}
 		}
 		return true;
 	}