From b9cec43e2c922c2d7c4d975265be580703ea3711 Mon Sep 17 00:00:00 2001 From: Valery Klachkov Date: Sun, 16 Jan 2022 04:57:12 +0300 Subject: [PATCH] ref_soft: Fix crashes on 64bit Just replace all long for unsigned long long :) --- ref_soft/r_edge.c | 2 +- ref_soft/r_main.c | 18 +++++++++--------- ref_soft/r_rast.c | 10 +++++----- ref_soft/r_scan.c | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ref_soft/r_edge.c b/ref_soft/r_edge.c index 2a09ffb8..e65797d5 100644 --- a/ref_soft/r_edge.c +++ b/ref_soft/r_edge.c @@ -651,7 +651,7 @@ void R_ScanEdges (void) surf_t *s; basespan_p = (espan_t *) - ((long)(basespans + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); + ((unsigned long long)(basespans + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); max_span_p = &basespan_p[MAXSPANS - RI.vrect.width]; span_p = basespan_p; diff --git a/ref_soft/r_main.c b/ref_soft/r_main.c index 96a1d160..77b4e792 100644 --- a/ref_soft/r_main.c +++ b/ref_soft/r_main.c @@ -1260,13 +1260,12 @@ void R_DrawBrushModel(cl_entity_t *pent) else { r_edges = (edge_t *) - (((long)&ledges[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); + (((unsigned long long)&ledges[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); } if (r_surfsonstack) { - surfaces = (surf_t *) - (((long)&lsurfs[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); + surfaces = (surf_t *)(((unsigned long long)&lsurfs[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); surf_max = &surfaces[r_cnumsurfs]; // surface 0 doesn't really exist; it's just a dummy because index 0 // is used to indicate no edge attached to surface @@ -1414,17 +1413,18 @@ void R_EdgeDrawing (void) else { r_edges = (edge_t *) - (((long)&ledges[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); + (((unsigned long long)&ledges[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); } if (r_surfsonstack) { - surfaces = (surf_t *) - (((long)&lsurfs[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); + surfaces = (surf_t *)(((unsigned long long)&lsurfs + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); surf_max = &surfaces[r_cnumsurfs]; - // surface 0 doesn't really exist; it's just a dummy because index 0 - // is used to indicate no edge attached to surface - memset(&surfaces[0], 0, sizeof(surf_t)); + + // surface 0 doesn't really exist; it's just a dummy because index 0 + // is used to indicate no edge attached to surface + + memset(surfaces, 0, sizeof(surf_t)); surfaces--; R_SurfacePatch (); } diff --git a/ref_soft/r_rast.c b/ref_soft/r_rast.c index 70993daa..193ccb41 100644 --- a/ref_soft/r_rast.c +++ b/ref_soft/r_rast.c @@ -521,7 +521,7 @@ void R_EmitCachedEdge (void) { edge_t *pedge_t; - pedge_t = (edge_t *)((unsigned long)r_edges + r_pedge->cachededgeoffset); + pedge_t = (edge_t *)((unsigned long long)r_edges + r_pedge->cachededgeoffset); if (!pedge_t->surfs[0]) pedge_t->surfs[0] = surface_p - surfaces; @@ -624,9 +624,9 @@ void R_RenderFace (msurface_t *fa, int clipflags) } else { - if ((((unsigned long)edge_p - (unsigned long)r_edges) > + if ((((unsigned long long)edge_p - (unsigned long long)r_edges) > r_pedge->cachededgeoffset) && - (((edge_t *)((unsigned long)r_edges + + (((edge_t *)((unsigned long long)r_edges + r_pedge->cachededgeoffset))->owner == r_pedge)) { R_EmitCachedEdge (); @@ -670,9 +670,9 @@ void R_RenderFace (msurface_t *fa, int clipflags) { // it's cached if the cached edge is valid and is owned // by this medge_t - if ((((unsigned long)edge_p - (unsigned long)r_edges) > + if ((((unsigned long long)edge_p - (unsigned long long)r_edges) > r_pedge->cachededgeoffset) && - (((edge_t *)((unsigned long)r_edges + + (((edge_t *)((unsigned long long)r_edges + r_pedge->cachededgeoffset))->owner == r_pedge)) { R_EmitCachedEdge (); diff --git a/ref_soft/r_scan.c b/ref_soft/r_scan.c index d096e4b7..2e3c9176 100644 --- a/ref_soft/r_scan.c +++ b/ref_soft/r_scan.c @@ -1390,7 +1390,7 @@ void D_DrawZSpans (espan_t *pspan) // we count on FP exceptions being turned off to avoid range problems izi = (int)(zi * 0x8000 * 0x10000); - if ((long)pdest & 0x02) + if ((unsigned long long)pdest & 0x02) { *pdest++ = (short)(izi >> 16); izi += izistep;