void map_init(off_t size) { char buf[32]; mediamap = mkmap(0LL, size, MAP_TYPE_UNUSED); lbawidth = sprintf(buf, "%llu", (long long)size); if (lbawidth < 5) lbawidth = 5; }
int main() { void *np, *p; p = mkmap(1024*1024); np = mremap(p, 1024*1024, 2048*1024, MREMAP_MAYMOVE); /* grow, maymove */ assert(np != (void *)-1); return 0; }
int main(int argc, char** argv) { //do some initialisations random_init(); ui_init(); map_current = mkmap(80, 35); create_testmap(map_current); ui_isrunning = 1; ui_loop(); ui_suspend(); printf(":)\n"); return 0; }
int mkmap(state_t *state) { static int count = 1; transition_t *transitions; transitions = state->transitions; while (transitions) { if (map[tolower(transitions->value)] == 0) { map[tolower(transitions->value)] = count; map[toupper(transitions->value)] = count; count += 1; } mkmap(transitions->state); transitions = transitions->next; } return count; }
int main() { char *np; char *p; p = mkmap(1024*1024); np = mremap(p, 1024*1024, 256*1024, 0); /* shrink, fixed */ if (np == (char *)-1) perror("mremap(shrink, fixed)"); if (np != p) fprintf(stderr, "shrink, nomove: p=%p np=%p: shrink moved?!\n", p, np); if (np != (char *)-1) munmap(np, 256*1024); p = mkmap(1024*1024); np = mremap(p, 1024*1024, 256*1024, MREMAP_MAYMOVE); /* shrink, maymove */ if (np == (char *)-1) perror("mremap(shrink, maymove)"); if (np != p) fprintf(stderr, "shrink, maymove: p=%p np=%p: shrink moved?!\n", p, np); if (np != (char *)-1) munmap(np, 256*1024); p = mkmap(1024*1024); np = mremap(p, 1024*1024, 2048*1024, 0); /* grow, fixed */ if (np == (char *)-1) perror("mremap(grow, fixed)"); if (np != p) fprintf(stderr, "grow, nomove: p=%p np=%p: shrink moved?!\n", p, np); if (np != (char *)-1) munmap(np, 2048*1024); p = mkmap(1024*1024); np = mremap(p, 1024*1024, 2048*1024, MREMAP_MAYMOVE); /* grow, maymove */ if (np == (char *)-1) perror("mremap(grow, maymove)"); if (np != p) fprintf(stderr, "grow, maymove: p=%p np=%p: shrink moved?!\n", p, np); if (np != (char *)-1) munmap(np, 2048*1024); p = mkmap(1024*1024); munmap(p+512*1024, 4096); np = mremap(p, 512*1024, 1024*1024, 0); /* grow, nomove, constrained */ if (np == (char *)-1) perror("mremap(grow, nomove, constrained)"); else if (np == p) fprintf(stderr, "grow, maymove, constrained: p=%p np=%p (managed to grow without moving?!)\n", p, np); if (np != (char *)-1) munmap(np, 1024*1024); p = mkmap(1024*1024); munmap(p+512*1024, 4096); np = mremap(p, 512*1024, 1024*1024, MREMAP_MAYMOVE); /* grow, maymove, constrained */ if (np == (char *)-1) perror("mremap(grow, maymove, constrained)"); if (np == p) fprintf(stderr, "grow, maymove, constrained: p=%p np=%p (managed to grow without moving?!)\n", p, np); if (np != (char *)-1) munmap(np, 1024*1024); return 0; }
map_t * map_add(off_t start, off_t size, int type, void *data) { map_t *m, *n, *p; n = mediamap; while (n != NULL && n->map_start + n->map_size <= start) n = n->map_next; if (n == NULL) return (NULL); if (n->map_start + n->map_size < start + size) { warnx("error: bogus map"); return (0); } if (n->map_start == start && n->map_size == size) { if (n->map_type != MAP_TYPE_UNUSED) { if (n->map_type != MAP_TYPE_MBR_PART || type != MAP_TYPE_GPT_PART) { warnx("warning: partition(%llu,%llu) mirrored", (long long)start, (long long)size); } } n->map_type = type; n->map_data = data; return (n); } if (n->map_type != MAP_TYPE_UNUSED) { if (n->map_type != MAP_TYPE_MBR_PART || type != MAP_TYPE_GPT_PART) { warnx("error: bogus map"); return (0); } n->map_type = MAP_TYPE_UNUSED; } m = mkmap(start, size, type); if (m == NULL) return (NULL); m->map_data = data; if (start == n->map_start) { m->map_prev = n->map_prev; m->map_next = n; if (m->map_prev != NULL) m->map_prev->map_next = m; else mediamap = m; n->map_prev = m; n->map_start += size; n->map_size -= size; } else if (start + size == n->map_start + n->map_size) { p = n; m->map_next = p->map_next; m->map_prev = p; if (m->map_next != NULL) m->map_next->map_prev = m; p->map_next = m; p->map_size -= size; } else { p = mkmap(n->map_start, start - n->map_start, n->map_type); n->map_start += p->map_size + m->map_size; n->map_size -= (p->map_size + m->map_size); p->map_prev = n->map_prev; m->map_prev = p; n->map_prev = m; m->map_next = n; p->map_next = m; if (p->map_prev != NULL) p->map_prev->map_next = p; else mediamap = p; } return (m); }
void mktables(state_t *state, const char *defvalue, int useprefix) { char prefix[1024]; int char_count; int i; /* make the character map */ map = (int *)malloc(sizeof(int) * 256); for (i = 0; i < 256; i++) map[i] = 0; char_count = mkmap(state); prtable("int", "map", map, 256); printf("\n"); /* make the accept state table */ accepttbl = (const char **)malloc(sizeof(const char *) * state_count); for (i = 0; i < state_count; i++) accepttbl[i] = NULL; mkaccept(state, defvalue); /* print the accept state table */ printf(" static int accepttbl[%d] =\n", state_count); printf(" {\n"); for (i = 0; i < state_count; i++) printf(" %s,\n", accepttbl[i]); printf(" };\n\n"); /* make the prefix table */ if (useprefix) { prefixtbl = (char **)malloc(sizeof(char *) * state_count); for (i = 0; i < state_count; i++) prefixtbl[i] = NULL; mkprefix(state, prefix, 0); /* print the prefix table */ printf(" static const char *prefixtbl[%d] =\n", state_count); printf(" {\n"); for (i = 0; i < state_count; i++) printf(" \"%s\",\n", prefixtbl[i]); printf(" };\n\n"); } /* make the state transition tables */ basetbl = (int *)malloc(sizeof(int) * state_count); nexttbl = (int *)malloc(sizeof(int) * (state_count + char_count)); checktbl = (int *)malloc(sizeof(int) * (state_count + char_count)); for (i = 0; i < state_count; i++) { basetbl[i] = -1; } for (i = 0; i < (state_count + char_count); i++) { nexttbl[i] = 0; checktbl[i] = -1; } mktranstables(state); prtable("int", "basetbl", basetbl, state_count); printf("\n"); prtable("int", "nexttbl", nexttbl, state_count + char_count); printf("\n"); prtable("int", "checktbl", checktbl, state_count + char_count); }