Пример #1
0
int map_set(map_t map, void *key, void *data, void **olddata)
{
	bucket_t *b;

	if (!map || !key)
		return RETERROR(EINVAL, -1);

	b = map_bucket_find(map, key);
	if (b)
	{
		mem_init(olddata, b->data);
		b->data = data;
	}
	else
	{
		int hash;

		if (!map_resize(map, map->count + 1, 0))
			return -1;

		if (!(b = map_bucket_alloc(map, key, data)))
			return -1;

		hash = map->hashf(map->size, key);
		b->next = map->buckets[hash];
		map->buckets[hash] = b;
		++ map->count;
	}

	return map->count;
}
Пример #2
0
t_status	interface_map_resize(o_syscall*	message)
{
  t_status error;
  t_vaddr	result1;

  error = map_resize(message->u.request.u.map_resize.arg1,
			message->u.request.u.map_resize.arg2,
			message->u.request.u.map_resize.arg3,
			&result1);

  message->u.reply.error = error;
  message->u.reply.u.map_resize.result1 = result1;

  return (STATUS_OK);
}
Пример #3
0
st_map_t *
map_put (st_map_t *map, void *key, void *object)
{
  int n = 0;

  while (n < map->size && map->data[n].key != MAP_FREE_KEY &&
         map->cmp_key (map->data[n].key, key))
    n++;

  if (n == map->size)                           // current map is full
    map = map_resize (map, map->size + 20);

  map->data[n].key = key;
  map->data[n].object = object;

  return map;
}
Пример #4
0
int map_clear(map_t map, int newsize)
{
	int i;
	bucket_t *b;

	if (!map || !newsize)
		return RETERROR(EINVAL, -1);

	for (i = 0; i < map->size; ++i)
	{
		b = map->buckets[i];
		while (b)
			b = map_bucket_free(map, b);
		map->buckets[i] = 0;
	}
	DPRINT(("clear buckets table at %p\n", map->buckets));
	map->count = 0;

	return (map_resize(map, newsize, 1) > 0 ? 0 : -1);
}
Пример #5
0
int map_set_(map_base_t *m, const char *key, void *value, int vsize) {
  int n, err;
  map_node_t **next, *node;
  /* Find & replace existing node */
  next = map_getref(m, key);
  if (next) {
    memcpy((*next)->value, value, vsize);
    return 0;
  }
  /* Add new node */
  node = map_newnode(key, value, vsize);
  if (node == NULL) goto fail;
  if (m->nnodes >= m->nbuckets) {
    n = (m->nbuckets > 0) ? (m->nbuckets << 1) : 1;
    err = map_resize(m, n);
    if (err) goto fail;
  }
  map_addnode(m, node);
  m->nnodes++;
  return 0;
  fail:
  if (node) free(node);
  return -1;
}
Пример #6
0
static int
resize(gpt_t gpt, u_int entry, off_t alignment, off_t sectors, off_t size)
{
	map_t map;
	struct gpt_hdr *hdr;
	struct gpt_ent *ent;
	unsigned int i;
	off_t alignsecs, newsize;
	uint64_t end;
	

	if ((hdr = gpt_hdr(gpt)) == NULL)
		return -1;

	i = entry - 1;
	ent = gpt_ent_primary(gpt, i);
	if (gpt_uuid_is_nil(ent->ent_type)) {
		gpt_warnx(gpt, "Entry at index %u is unused", entry);
		return -1;
	}

	alignsecs = alignment / gpt->secsz;

	for (map = map_first(gpt); map != NULL; map = map->map_next) {
		if (entry == map->map_index)
			break;
	}
	if (map == NULL) {
		gpt_warnx(gpt, "Could not find map entry corresponding "
		    "to index");
		return -1;
	}

	if (sectors > 0 && sectors == map->map_size)
		if (alignment == 0 ||
		    (alignment > 0 && sectors % alignsecs == 0)) {
			/* nothing to do */
			gpt_warnx(gpt, "partition does not need resizing");
			return 0;
		}

	newsize = map_resize(gpt, map, sectors, alignsecs);
	if (newsize == -1)
		return -1;

	end = htole64((uint64_t)(map->map_start + newsize - 1LL));
	ent->ent_lba_end = end;

	if (gpt_write_primary(gpt) == -1)
		return -1;

	ent = gpt_ent(gpt->gpt, gpt->lbt, i);
	ent->ent_lba_end = end;

	if (gpt_write_backup(gpt) == -1)
		return -1;

	gpt_msg(gpt, "Partition %d resized: %" PRIu64 " %" PRIu64, entry,
	    map->map_start, newsize);

	return 0;
}
Пример #7
0
int main(int argc, char* args[]) {
  if (init() == FALSE) {
    return 1;
  }
  if (load_files() == FALSE) {
    return 1;
  }

  message = TTF_RenderText_Solid(font, window_footer_str, font_color);
  if (message == NULL) {
    return 1;
  }

  Uint32 frameStart = 0;
  int rightMouseButtonDown = FALSE;
  int quit = FALSE;
  while (quit == FALSE) {
    frameStart = SDL_GetTicks();

    while (SDL_PollEvent(&event)) {
      if (event.type == SDL_MOUSEBUTTONDOWN) {
        if (event.button.button == SDL_BUTTON_RIGHT)
          rightMouseButtonDown = TRUE;
        else if (event.button.button == SDL_BUTTON_LEFT)
          map_select_tile(event.button.x, event.button.y);
      }
      if (event.type == SDL_MOUSEBUTTONUP) {
        if (event.button.button == SDL_BUTTON_RIGHT) {
          rightMouseButtonDown = FALSE;
          map_move_reset();
        }
      }
      if (event.type == SDL_MOUSEMOTION) {
        if (rightMouseButtonDown == TRUE) {
          map_move(event.button.x, event.button.y);
        }
      }
      if (event.type == SDL_KEYDOWN) {
        switch (event.key.keysym.sym) {
          case SDLK_g: map_toggle_grid(); break;
          case SDLK_PLUS: map_resize(1); break;
          case SDLK_MINUS: map_resize(-1); break;
          case SDLK_l: map_load(); break;
          default: ;
        }
      }
      if (event.type == SDL_QUIT) {
        quit = TRUE;
      }
    }

    SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0));
    map_show();
    apply_surface(
      screen_width - message->w, screen_height - message->h, message, screen
    );

    if (SDL_Flip(screen) == -1) {
      return 1;
    }

    if ((SDL_GetTicks() - frameStart) < (1000 / FPS)) {
      SDL_Delay((1000 / FPS) - (SDL_GetTicks() - frameStart));
    }
  }

  clean_up();
  return 0;
}