Pārlūkot izejas kodu

Changed to actually work. (On modern Linux systems the old version just
crashes. On old Linux systems it apparently only worked by accident.)

dtrg 14 gadi atpakaļ
vecāks
revīzija
a0c67da261
1 mainītis faili ar 9 papildinājumiem un 5 dzēšanām
  1. 9 5
      plat/linux386/libsys/sbrk.c

+ 9 - 5
plat/linux386/libsys/sbrk.c

@@ -9,23 +9,27 @@
 
 #define	OUT_OF_MEMORY (void*)(-1)	/* sbrk returns this on failure */
 
-extern char _end[1];
-
-static char* current = _end;
+static char* current = NULL;
  
 void* sbrk(intptr_t increment)
 {
 	char* old;
 	char* new;
+	char* actual;
 	
+	if (!current)
+		current = (char*) _syscall(__NR_brk, 0, 0, 0);
+
 	if (increment == 0)
 		return current;
 		
 	old = current;
 	new = old + increment;
-	if (brk(new) < 0)
+
+	actual = (char*) _syscall(__NR_brk, (quad) new, 0, 0);
+	if (actual < new)
 		return OUT_OF_MEMORY;
 		
-	current = new;
+	current = actual;
 	return old;
 }