| 91 | int alloced = 0; |
| 92 | |
| 93 | void * myalloc(size_t size){ |
| 94 | struct mempage *newpage, *page; |
| 95 | unsigned pagesize; |
| 96 | unsigned i=0, j, k=0; |
| 97 | int p; |
| 98 | |
| 99 | |
| 100 | alloced++; |
| 101 | if(!mem_init)init_mem(); |
| 102 | for(p = nomem; ; ) { |
| 103 | if(!p){ |
| 104 | #if DEBUGLEVEL > 2 |
| 105 | fprintf(stderr, "Page is too large (%u), requesting malloc instead\n", size); |
| 106 | fflush(stderr); |
| 107 | #endif |
| 108 | return malloc(size); |
| 109 | } |
| 110 | p--; |
| 111 | if(size<memsizes[p]){ |
| 112 | break; |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | if(p == p64k){ |
| 117 | #if DEBUGLEVEL > 2 |
| 118 | fprintf(stderr, "Page will p64k\n"); |
| 119 | fflush(stderr); |
| 120 | #endif |
| 121 | return myalloc64k(); |
| 122 | } |
| 123 | |
| 124 | pagesize = memsizes[p]; |
| 125 | #if DEBUGLEVEL > 2 |
| 126 | fprintf(stderr, "Calculated pagesize: %u\n", pagesize); |
| 127 | fflush(stderr); |
| 128 | #endif |
| 129 | pthread_mutex_lock(&mem_mutex); |
| 130 | newpage = pages[p]; |
| 131 | if(newpage && newpage->usable){ |
| 132 | #if DEBUGLEVEL > 2 |
| 133 | fprintf(stderr, "Useful page found: %X,", newpage); |
| 134 | fflush(stderr); |
| 135 | #endif |
| 136 | for(j=0; j<32; j++){ |
| 137 | register unsigned c = newpage->bitmap[j]; |
| 138 | if(c){ |
| 139 | for(k=0; ;k++)if(c & (1<<k))break; |
| 140 | i = (j<<11) + (k<<8); |
| 141 | #if DEBUGLEVEL > 2 |
| 142 | fprintf(stderr, "region: %X, offset %u, byte %u, %u, %u\n", newpage->data + i, i, j, k, newpage->bitmap[j]); |
| 143 | fflush(stderr); |
| 144 | #endif |
| 145 | break; |
| 146 | } |
| 147 | } |
| 148 | } |
| 149 | else{ |
| 150 | if(!(newpage = (struct mempage *)malloc(sizeof(struct mempage)))){ |
no test coverage detected