Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6e1ace9 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86 setup: sizeof() is unsigned, unbreak comparisons



We use signed values for limit checking since the values can go
negative under certain circumstances.  However, sizeof() is unsigned
and forces the comparison to be unsigned, so move the comparison into
the heap_free() macros so we can ensure it is a signed comparison.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 6b6815c6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -216,9 +216,9 @@ static inline char *__get_heap(size_t s, size_t a, size_t n)
#define GET_HEAP(type, n) \
	((type *)__get_heap(sizeof(type),__alignof__(type),(n)))

static inline int heap_free(void)
static inline bool heap_free(size_t n)
{
	return heap_end-HEAP;
	return (int)(heap_end-HEAP) >= (int)n;
}

/* copy.S */
+1 −1
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ static int bios_probe(void)
	video_bios.modes = GET_HEAP(struct mode_info, 0);

	for (mode = 0x14; mode <= 0x7f; mode++) {
		if (heap_free() < sizeof(struct mode_info))
		if (!heap_free(sizeof(struct mode_info)))
			break;

		if (mode_defined(VIDEO_FIRST_BIOS+mode))
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ static int vesa_probe(void)
	while ((mode = rdfs16(mode_ptr)) != 0xffff) {
		mode_ptr += 2;

		if (heap_free() < sizeof(struct mode_info))
		if (!heap_free(sizeof(struct mode_info)))
			break;	/* Heap full, can't save mode info */

		if (mode & ~0x1ff)
+1 −1
Original line number Diff line number Diff line
@@ -371,7 +371,7 @@ static void save_screen(void)
	saved.curx = boot_params.screen_info.orig_x;
	saved.cury = boot_params.screen_info.orig_y;

	if (heap_free() < saved.x*saved.y*sizeof(u16)+512)
	if (!heap_free(saved.x*saved.y*sizeof(u16)+512))
		return;		/* Not enough heap to save the screen */

	saved.data = GET_HEAP(u16, saved.x*saved.y);