Exemple #1
0
static void hbhmat_finalizer(SEXP ptr) {
  ext_matrix *e;
  hbhankel_matrix *h;

  if (TYPEOF(ptr) != EXTPTRSXP)
    return;

  e = R_ExternalPtrAddr(ptr);
  if (!e)
    return;

  if (strcmp(e->type, "hbhankel matrix"))
    return;

  h = e->matrix;

  free_area(h->col_ind);
  free_area(h->row_ind);
  Free(h->weights);

  free_circulant(h);
  Free(h);

  Free(e);
  R_ClearExternalPtr(ptr);
}
Exemple #2
0
void cleanup_taskbar()
{
	Panel *panel;
	Taskbar *tskbar;
	int i, j, k;

	cleanup_taskbarname();
	if (win_to_task_table) g_hash_table_foreach(win_to_task_table, taskbar_remove_task, 0);
	for (i=0 ; i < nb_panel ; i++) {
		panel = &panel1[i];
		for (j=0 ; j < panel->nb_desktop ; j++) {
			tskbar = &panel->taskbar[j];
			for (k=0; k<TASKBAR_STATE_COUNT; ++k) {
				if (tskbar->state_pix[k]) XFreePixmap(server.dsp, tskbar->state_pix[k]);
			}
			free_area (&tskbar->area);
			// remove taskbar from the panel
			panel->area.list = g_slist_remove(panel->area.list, tskbar);
		}
		if (panel->taskbar) {
			free(panel->taskbar);
			panel->taskbar = 0;
		}
	}

	if (win_to_task_table) {
		g_hash_table_destroy(win_to_task_table);
		win_to_task_table = 0;
	}
}
Exemple #3
0
static void elemstyle_free(elemstyle_t *elemstyle) {
  elemstyle_condition_t *cond;
  for (cond = elemstyle->condition; cond;) {
    if(cond->key)   xmlFree(cond->key);
    if(cond->value) xmlFree(cond->value);
    elemstyle_condition_t *prevcond = cond;
    cond = cond->next;
    g_free(prevcond);
  }

  switch(elemstyle->type) {
  case ES_TYPE_NONE:
    break;
  case ES_TYPE_LINE:
    free_line(elemstyle->line);
    break;
  case ES_TYPE_AREA:
    free_area(elemstyle->area);
    break;
  case ES_TYPE_LINE_MOD:
    free_line_mod(elemstyle->line_mod);
    break;
  }
  if(elemstyle->icon) free_icon(elemstyle->icon);
  g_free(elemstyle);
}
Exemple #4
0
void free_area(Area *a)
{
	if (!a)
		return;

	for (GList *l = a->children; l; l = l->next)
		free_area(l->data);

	if (a->children) {
		g_list_free(a->children);
		a->children = NULL;
	}
	for (int i = 0; i < MOUSE_STATE_COUNT; i++) {
		XFreePixmap(server.display, a->pix_by_state[i]);
		if (a->pix == a->pix_by_state[i]) {
			a->pix = None;
		}
		a->pix_by_state[i] = None;
	}
	if (a->pix) {
		XFreePixmap(server.display, a->pix);
		a->pix = None;
	}
	if (mouse_over_area == a) {
		mouse_over_area = NULL;
	}
}
Exemple #5
0
void destroy_separator(void *obj)
{
	Separator *separator = (Separator *)obj;
	remove_area(&separator->area);
	free_area(&separator->area);
	free_and_null(separator);
}
Exemple #6
0
void cleanup_panel()
{
	if (!panels)
		return;

	cleanup_taskbar();

	for (int i = 0; i < num_panels; i++) {
		Panel *p = &panels[i];

		free_area(&p->area);
		if (p->temp_pmap)
			XFreePixmap(server.display, p->temp_pmap);
		p->temp_pmap = 0;
		if (p->hidden_pixmap)
			XFreePixmap(server.display, p->hidden_pixmap);
		p->hidden_pixmap = 0;
		if (p->main_win)
			XDestroyWindow(server.display, p->main_win);
		p->main_win = 0;
		stop_timeout(p->autohide_timeout);
		cleanup_freespace(p);
	}

	free(panel_items_order);
	panel_items_order = NULL;
	free(panel_window_name);
	panel_window_name = NULL;
	free(panels);
	panels = NULL;

	free_area(&panel_config.area);

	if (backgrounds)
		g_array_free(backgrounds, TRUE);
	backgrounds = NULL;
	if (gradients) {
		for (guint i = 0; i < gradients->len; i++)
			cleanup_gradient(&g_array_index(gradients, GradientClass, i));
		g_array_free(gradients, TRUE);
	}
	gradients = NULL;
	pango_font_description_free(panel_config.g_task.font_desc);
	panel_config.g_task.font_desc = NULL;
	pango_font_description_free(panel_config.taskbarname_font_desc);
	panel_config.taskbarname_font_desc = NULL;
}
Exemple #7
0
static void free_area (area_t * area)
{
    if (!area)
        return;

    switch (area->ty)
    {
        case AREA_UNION:
            free_area (area->a.a_union[0]);
            free_area (area->a.a_union[1]);
            break;
        default:
            break;
    }

    free (area);
}
Exemple #8
0
static
void free_area(dumb_ptr<area_t> area)
{
    if (!area)
        return;

    switch (area->ty)
    {
        case AREA::UNION:
            free_area(area->a.a_union[0]);
            free_area(area->a.a_union[1]);
            break;
        default:
            break;
    }

    area.delete_();
}
Exemple #9
0
static void persistent_destroy(struct exception_store *store)
{
	struct pstore *ps = get_info(store);

	dm_io_put(sectors_to_pages(ps->chunk_size));
	vfree(ps->callbacks);
	free_area(ps);
	kfree(ps);
}
Exemple #10
0
void *gw_check_realloc(void *p, size_t size, const char *filename,
                       long lineno, const char *function)
{
    struct area *area;

    if (p == NULL)
        return gw_check_malloc(size, filename, lineno, function);

    gw_assert(initialized);
    gw_assert(size > 0);

    lock();
    area = find_area(p);
    if (!area) {
        unlock();
        panic(0, "Realloc called on non-allocated area");
    }

    if (size == area->area_size) {
        /* No changes */
    } else if (size <= area->max_size) {
        change_total_size(size - area->area_size);
        area->area_size = size;
        endmark(p, size);
    } else if (size > area->max_size) {
        /* The current block is not large enough for the reallocation.
         * We will allocate a new block, copy the data over, and free
         * the old block.  We round the size up to a power of two,
         * to prevent frequent reallocations. */
        struct area *new_area;
        size_t new_size;
        unsigned char *new_p;

        new_size = round_pow2(size + 2 * MARKER_SIZE);
        new_p = malloc(new_size);
        new_size -= 2 * MARKER_SIZE;
        new_p += MARKER_SIZE;
        memcpy(new_p, p, area->area_size);
        fill(new_p + area->area_size, size - area->area_size,
             NEW_AREA_PATTERN);
        new_area = record_allocation(new_p, size,
                                     area->allocator.filename,
                                     area->allocator.lineno,
                                     area->allocator.function);
        new_area->max_size = new_size;
        free_area(area);

        p = new_p;
        area = new_area;
    }

    area->reallocator.filename = filename;
    area->reallocator.lineno = lineno;
    area->reallocator.function = function;
    unlock();
    return p;
}
Exemple #11
0
static void make_location (val_t * v)
{
    if (v->ty == TY_AREA && v->v.v_area->ty == AREA_LOCATION)
    {
        location_t location = v->v.v_area->a.a_loc;
        free_area (v->v.v_area);
        v->ty = TY_LOCATION;
        v->v.v_location = location;
    }
}
Exemple #12
0
void destroy_execp(void *obj)
{
	Execp *execp = (Execp *)obj;
	if (execp->frontend) {
		// This is a frontend element
		execp->backend->instances = g_list_remove_all(execp->backend->instances, execp);
		free_and_null(execp->frontend);
		remove_area(&execp->area);
		free_area(&execp->area);
		free_and_null(execp);
	} else {
		// This is a backend element
		stop_timeout(execp->backend->timer);
		execp->backend->timer = NULL;

		if (execp->backend->icon) {
			imlib_context_set_image(execp->backend->icon);
			imlib_free_image();
			execp->backend->icon = NULL;
		}
		free_and_null(execp->backend->buf_output);
		free_and_null(execp->backend->text);
		free_and_null(execp->backend->icon_path);
		if (execp->backend->child) {
			kill(-execp->backend->child, SIGHUP);
			execp->backend->child = 0;
		}
		if (execp->backend->child_pipe >= 0) {
			close(execp->backend->child_pipe);
			execp->backend->child_pipe = -1;
		}
		if (execp->backend->cmd_pids) {
			g_tree_destroy(execp->backend->cmd_pids);
			execp->backend->cmd_pids = NULL;
		}

		execp->backend->bg = NULL;
		pango_font_description_free(execp->backend->font_desc);
		execp->backend->font_desc = NULL;
		free_and_null(execp->backend->command);
		free_and_null(execp->backend->tooltip);
		free_and_null(execp->backend->lclick_command);
		free_and_null(execp->backend->mclick_command);
		free_and_null(execp->backend->rclick_command);
		free_and_null(execp->backend->dwheel_command);
		free_and_null(execp->backend->uwheel_command);

		if (execp->backend->instances) {
			fprintf(stderr, "Error: Attempt to destroy backend while there are still frontend instances!\n");
			exit(-1);
		}
		free(execp->backend);
		free(execp);
	}
}
Exemple #13
0
void cleanup_systray()
{
	stop_net();
	systray_enabled = 0;
	systray_max_icon_size = 0;
	systray_monitor = 0;
	systray.area.on_screen = FALSE;
	free_area(&systray.area);
	if (render_background) {
		XFreePixmap(server.display, render_background);
		render_background = 0;
	}
}
Exemple #14
0
void magic_clear_var(val_t *v)
{
    switch (v->ty)
    {
        case TYPE::STRING:
            v->v.v_string.delete_();
            break;
        case TYPE::AREA:
            free_area(v->v.v_area);
            break;
        default:
            break;
    }
}
Exemple #15
0
void magic_clear_var (val_t * v)
{
    switch (v->ty)
    {
        case TY_STRING:
            free (v->v.v_string);
            break;
        case TY_AREA:
            free_area (v->v.v_area);
            break;
        default:
            break;
    }
}
Exemple #16
0
void free_area (Area *a)
{
	GSList *l0;
	for (l0 = a->list; l0 ; l0 = l0->next)
		free_area (l0->data);

	if (a->list) {
		g_slist_free(a->list);
		a->list = 0;
	}
	if (a->pix) {
		XFreePixmap (server.dsp, a->pix);
		a->pix = 0;
	}
}
Exemple #17
0
void cleanup_taskbarname() {
  int i, k;
  Panel* panel;
  Taskbar* tskbar;

  for (i = 0; i < nb_panel; i++) {
    panel = &panel1[i];
    for (uint8_t j = 0; j < panel->desktop_count; ++j) {
      tskbar = &panel->taskbar[j];
      if (tskbar->bar_name.name) g_free(tskbar->bar_name.name);
      free_area(&tskbar->bar_name.area);
      for (k = 0; k < TASKBAR_STATE_COUNT; ++k) {
        if (tskbar->bar_name.state_pix[k])
          XFreePixmap(server.dsp, tskbar->bar_name.state_pix[k]);
      }
      tskbar->area.list = g_slist_remove(tskbar->area.list, &tskbar->bar_name);
    }
  }
}
Exemple #18
0
void gw_check_free(void *p, const char *filename, long lineno,
                   const char *function)
{
    struct area *area;
    gw_assert(initialized);

    if (p == NULL)
        return;

    lock();
    area = find_area(p);
    if (!area) {
        unlock();
        panic(0, "Free called on non-allocated area");
    }

    free_area(area);
    unlock();
}
Exemple #19
0
void s48_free_area(Area* area) {
  unsigned long size = BYTES_TO_PAGES(area->end - area->start);
  s48_address start = area->start;
  unsigned long i;
  
  s48_free_pagesB(start, size);

  /* This is not really needed, I think. It's only a waste of time */
  for (i = 0; i < size; i++) {
    /* Safe because I is less than SIZE, which cannot cause an
       overflow here. */
    s48_memory_map_setB(ADD_PAGES_I_KNOW_THIS_CAN_OVERFLOW(start, i), NULL);
  }

#ifndef NDEBUG
  /* Blank it out, to find errors more easily */
  memset(area->start, 0, area->end - area->start);
#endif

  free_area(area);
}
Exemple #20
0
void cleanup_taskbar()
{
	Panel *panel;
	Taskbar *tskbar;
	int i, j, k;

	cleanup_taskbarname();
	if (win_to_task_table) {
		while (g_hash_table_size(win_to_task_table)) {
			GHashTableIter iter;
			gpointer key, value;

			g_hash_table_iter_init (&iter, win_to_task_table);
			if (g_hash_table_iter_next (&iter, &key, &value)) {
				taskbar_remove_task(key, 0, 0);
			}
		}
	}
	for (i=0 ; i < nb_panel ; i++) {
		panel = &panel1[i];
		for (j=0 ; j < panel->nb_desktop ; j++) {
			tskbar = &panel->taskbar[j];
			for (k=0; k<TASKBAR_STATE_COUNT; ++k) {
				if (tskbar->state_pix[k]) XFreePixmap(server.dsp, tskbar->state_pix[k]);
			}
			free_area (&tskbar->area);
			// remove taskbar from the panel
			panel->area.list = g_slist_remove(panel->area.list, tskbar);
		}
		if (panel->taskbar) {
			free(panel->taskbar);
			panel->taskbar = 0;
		}
	}

	if (win_to_task_table) {
		g_hash_table_destroy(win_to_task_table);
		win_to_task_table = 0;
	}
}
Exemple #21
0
void cleanup_launcher_theme(Launcher *launcher)
{
	free_area(&launcher->area);
	GSList *l;
	for (l = launcher->list_icons; l ; l = l->next) {
		LauncherIcon *launcherIcon = (LauncherIcon*)l->data;
		if (launcherIcon) {
			free_icon(launcherIcon->icon_scaled);
			free_icon(launcherIcon->icon_original);
			free(launcherIcon->icon_name);
			free(launcherIcon->icon_path);
			free(launcherIcon->cmd);
			free(launcherIcon->icon_tooltip);
		}
		free(launcherIcon);
	}
	g_slist_free(launcher->list_icons);
	launcher->list_icons = NULL;

	free_themes(launcher->list_themes);
	launcher->list_themes = NULL;
}
Exemple #22
0
void cleanup_panel()
{
	if (!panel1) return;

	cleanup_taskbar();

	int i;
	Panel *p;
	for (i=0 ; i < nb_panel ; i++) {
		p = &panel1[i];

		free_area(&p->area);
		if (p->temp_pmap) XFreePixmap(server.dsp, p->temp_pmap);
		if (p->hidden_pixmap) XFreePixmap(server.dsp, p->hidden_pixmap);
		if (p->main_win) XDestroyWindow(server.dsp, p->main_win);
	}

	if (panel1) free(panel1);
	if (backgrounds)
		g_array_free(backgrounds, 1);
	if (panel_config.g_task.font_desc) pango_font_description_free(panel_config.g_task.font_desc);
}
Exemple #23
0
void cleanup_panel()
{
	if (!panel1)
		return;

	cleanup_taskbar();

	int i;
	Panel *p;
	for (i = 0; i < nb_panel; i++) {
		p = &panel1[i];

		free_area(&p->area);
		if (p->temp_pmap)
			XFreePixmap(server.dsp, p->temp_pmap);
		p->temp_pmap = 0;
		if (p->hidden_pixmap)
			XFreePixmap(server.dsp, p->hidden_pixmap);
		p->hidden_pixmap = 0;
		if (p->main_win)
			XDestroyWindow(server.dsp, p->main_win);
		p->main_win = 0;
		stop_timeout(p->autohide_timeout);
	}

	free(panel_items_order);
	panel_items_order = NULL;
	free(panel_window_name);
	panel_window_name = NULL;
	free(panel1);
	panel1 = NULL;
	if (backgrounds)
		g_array_free(backgrounds, 1);
	backgrounds = NULL;
	pango_font_description_free(panel_config.g_task.font_desc);
	panel_config.g_task.font_desc = NULL;
}
Exemple #24
0
static
void stringify(val_t *v, int within_op)
{
    static earray<ZString, DIR, DIR::COUNT> dirs //=
    {{
        {"south"}, {"south-west"},
        {"west"}, {"north-west"},
        {"north"}, {"north-east"},
        {"east"}, {"south-east"},
    }};
    FString buf;

    switch (v->ty)
    {
        case TYPE::UNDEF:
            buf = "UNDEF";
            break;

        case TYPE::INT:
            buf = STRPRINTF("%i", v->v.v_int);
            break;

        case TYPE::STRING:
            return;

        case TYPE::DIR:
            buf = dirs[v->v.v_dir];
            break;

        case TYPE::ENTITY:
            buf = show_entity(v->v.v_entity);
            break;

        case TYPE::LOCATION:
            buf = STRPRINTF("<\"%s\", %d, %d>",
                    v->v.v_location.m->name_,
                    v->v.v_location.x,
                    v->v.v_location.y);
            break;

        case TYPE::AREA:
            buf = "%area";
            free_area(v->v.v_area);
            break;

        case TYPE::SPELL:
            buf = v->v.v_spell->name;
            break;

        case TYPE::INVOCATION:
        {
            dumb_ptr<invocation> invocation_ = within_op
                ? v->v.v_invocation
                : map_id2bl(v->v.v_int)->as_spell();
            buf = invocation_->spell->name;
        }
            break;

        default:
            FPRINTF(stderr, "[magic] INTERNAL ERROR: Cannot stringify %d\n",
                    v->ty);
            return;
    }

    v->v.v_string = dumb_string::copys(buf);
    v->ty = TYPE::STRING;
}
Exemple #25
0
static void stringify (val_t * v, int within_op)
{
    static char *dirs[8] =
        { "south", "south-west", "west", "north-west", "north", "north-east",
        "east", "south-east"
    };
    char *buf;

    switch (v->ty)
    {
        case TY_UNDEF:
            buf = strdup ("UNDEF");
            break;

        case TY_INT:
            buf = malloc (32);
            sprintf (buf, "%i", v->v.v_int);
            break;

        case TY_STRING:
            return;

        case TY_DIR:
            buf = strdup (dirs[v->v.v_int]);
            break;

        case TY_ENTITY:
            buf = strdup (show_entity (v->v.v_entity));
            break;

        case TY_LOCATION:
            buf = malloc (128);
            sprintf (buf, "<\"%s\", %d, %d>", map[v->v.v_location.m].name,
                     v->v.v_location.x, v->v.v_location.y);
            break;

        case TY_AREA:
            buf = strdup ("%area");
            free_area (v->v.v_area);
            break;

        case TY_SPELL:
            buf = strdup (v->v.v_spell->name);
            break;

        case TY_INVOCATION:
        {
            invocation_t *invocation = within_op
                ? v->v.v_invocation : (invocation_t *) map_id2bl (v->v.v_int);
            buf = strdup (invocation->spell->name);
        }
            break;

        default:
            fprintf (stderr, "[magic] INTERNAL ERROR: Cannot stringify %d\n",
                     v->ty);
            return;
    }

    v->v.v_string = buf;
    v->ty = TY_STRING;
}