diff --git a/src/fov/fov.c b/src/fov/fov.c index d0010f952b7e8691d36ecf2b527673eef5bef7fa..833ef528b9d515ff9cdcff38803fb6044763690b 100644 --- a/src/fov/fov.c +++ b/src/fov/fov.c @@ -577,9 +577,14 @@ FOV_DEFINE_OCTANT(-,-,y,x,m,m,y) */ #define GET_BUFFER(target, buffer_data, len) \ /* hurray, no branching, modulus, or malloc! */ \ + { \ + int overrun = (buffer_data->index + buffer_data->prev_len + len) & (FOV_BUFFER_SIZE - 1); \ buffer_data->index = (buffer_data->index + buffer_data->prev_len) & (FOV_BUFFER_SIZE - 1); \ + if (overrun < buffer_data->index) \ + buffer_data->index = 0; \ buffer_data->prev_len = len; \ - target = buffer_data->buffer + buffer_data->index; + target = buffer_data->buffer + buffer_data->index; \ + } /* Conveniences for code clarity */ #define X 0