Mercurial > emacs
comparison src/ralloc.c @ 10747:c6a68e4ee53a
(r_alloc_free): Call refill_memory_reserve only if emacs.
Include getpagesize.h unconditionally.
(free_bloc): Don't die if bloc->next or bloc->prev is null.
[!emacs] (bzero): New macro definition.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Tue, 14 Feb 1995 14:27:18 +0000 |
| parents | 5659c0885145 |
| children | 07eea2d610d3 |
comparison
equal
deleted
inserted
replaced
| 10746:ea87e4d9c8ea | 10747:c6a68e4ee53a |
|---|---|
| 54 | 54 |
| 55 /* Declared in dispnew.c, this version doesn't screw up if regions | 55 /* Declared in dispnew.c, this version doesn't screw up if regions |
| 56 overlap. */ | 56 overlap. */ |
| 57 extern void safe_bcopy (); | 57 extern void safe_bcopy (); |
| 58 | 58 |
| 59 #include "getpagesize.h" | 59 #else /* not emacs */ |
| 60 | |
| 61 #else /* Not emacs. */ | |
| 62 | 60 |
| 63 #include <stddef.h> | 61 #include <stddef.h> |
| 64 | 62 |
| 65 typedef size_t SIZE; | 63 typedef size_t SIZE; |
| 66 typedef void *POINTER; | 64 typedef void *POINTER; |
| 68 #include <unistd.h> | 66 #include <unistd.h> |
| 69 #include <malloc.h> | 67 #include <malloc.h> |
| 70 #include <string.h> | 68 #include <string.h> |
| 71 | 69 |
| 72 #define safe_bcopy(x, y, z) memmove (y, x, z) | 70 #define safe_bcopy(x, y, z) memmove (y, x, z) |
| 73 | 71 #define bzero(x, len) memset (x, 0, len) |
| 74 #endif /* emacs. */ | 72 |
| 73 #endif /* not emacs */ | |
| 74 | |
| 75 #include "getpagesize.h" | |
| 75 | 76 |
| 76 #define NIL ((POINTER) 0) | 77 #define NIL ((POINTER) 0) |
| 77 | 78 |
| 78 /* A flag to indicate whether we have initialized ralloc yet. For | 79 /* A flag to indicate whether we have initialized ralloc yet. For |
| 79 Emacs's sake, please do not make this local to malloc_init; on some | 80 Emacs's sake, please do not make this local to malloc_init; on some |
| 689 } | 690 } |
| 690 | 691 |
| 691 /* Update the records of which blocs are in HEAP. */ | 692 /* Update the records of which blocs are in HEAP. */ |
| 692 if (heap->first_bloc == bloc) | 693 if (heap->first_bloc == bloc) |
| 693 { | 694 { |
| 694 if (bloc->next->heap == heap) | 695 if (bloc->next != 0 && bloc->next->heap == heap) |
| 695 heap->first_bloc = bloc->next; | 696 heap->first_bloc = bloc->next; |
| 696 else | 697 else |
| 697 heap->first_bloc = heap->last_bloc = NIL_BLOC; | 698 heap->first_bloc = heap->last_bloc = NIL_BLOC; |
| 698 } | 699 } |
| 699 if (heap->last_bloc == bloc) | 700 if (heap->last_bloc == bloc) |
| 700 { | 701 { |
| 701 if (bloc->prev->heap == heap) | 702 if (bloc->prev != 0 && bloc->prev->heap == heap) |
| 702 heap->last_bloc = bloc->prev; | 703 heap->last_bloc = bloc->prev; |
| 703 else | 704 else |
| 704 heap->first_bloc = heap->last_bloc = NIL_BLOC; | 705 heap->first_bloc = heap->last_bloc = NIL_BLOC; |
| 705 } | 706 } |
| 706 | 707 |
| 898 abort (); | 899 abort (); |
| 899 | 900 |
| 900 free_bloc (dead_bloc); | 901 free_bloc (dead_bloc); |
| 901 *ptr = 0; | 902 *ptr = 0; |
| 902 | 903 |
| 904 #ifdef emacs | |
| 903 refill_memory_reserve (); | 905 refill_memory_reserve (); |
| 906 #endif | |
| 904 } | 907 } |
| 905 | 908 |
| 906 /* Given a pointer at address PTR to relocatable data, resize it to SIZE. | 909 /* Given a pointer at address PTR to relocatable data, resize it to SIZE. |
| 907 Do this by shifting all blocks above this one up in memory, unless | 910 Do this by shifting all blocks above this one up in memory, unless |
| 908 SIZE is less than or equal to the current bloc size, in which case | 911 SIZE is less than or equal to the current bloc size, in which case |
