Exemple #1
0
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;
}
Exemple #3
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;
}
Exemple #6
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);
}