Ver código fonte

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

dtrg 13 anos atrás
pai
commit
5e831ec966
1 arquivos alterados com 9 adições e 5 exclusões
  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;
 }