1 /* -*- mode: c; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*-
3 * Conky, a system monitor, based on torsmo
5 * Any original torsmo code is licensed under the BSD license
7 * All code written since the fork of torsmo is licensed under the GPL
9 * Please see COPYING for details
11 * Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
12 * Copyright (c) 2005-2009 Brenden Matthews, Philip Kovacs, et. al.
14 * All rights reserved.
16 * This program is free software: you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation, either version 3 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program. If not, see <http://www.gnu.org/licenses/>.
28 * vim: ts=4 sw=4 noet ai cindent syntax=c
33 #include "obj_destroy.h"
36 * Frees the list of text objects root points to. When internal = 1, it won't
37 * free global objects.
39 void free_text_objects(struct text_object *root, int internal)
41 struct text_object *obj;
47 #define data obj->data
48 for (obj = root->prev; obj; obj = root->prev) {
49 root->prev = obj->prev;
55 #endif /* !__OpenBSD__ */
62 #endif /* __linux__ */
64 free(data.read_tcp.host);
72 free(data.tztime.fmt);
75 free(data.mboxscan.args);
76 free(data.mboxscan.output);
81 case OBJ_unseen_mails:
82 case OBJ_flagged_mails:
83 case OBJ_unflagged_mails:
84 case OBJ_forwarded_mails:
85 case OBJ_unforwarded_mails:
86 case OBJ_replied_mails:
87 case OBJ_unreplied_mails:
89 case OBJ_trashed_mails:
90 free(data.local_mail.mbox);
97 case OBJ_imap_messages:
102 case OBJ_pop3_unseen:
114 free_text_objects(obj->sub, 1);
117 case OBJ_if_existing:
120 free(data.ifblock.s);
121 free(data.ifblock.str);
125 free(data.headtail.logfile);
126 if(data.headtail.buffer) {
127 free(data.headtail.buffer);
144 case OBJ_iconv_start:
149 case OBJ_disk_protect:
153 free(data.ifblock.s);
154 free(data.ifblock.str);
157 if (info.gw_info.iface) {
158 free(info.gw_info.iface);
159 info.gw_info.iface = 0;
161 if (info.gw_info.ip) {
162 free(info.gw_info.ip);
166 case OBJ_ioscheduler:
171 #if (defined(__FreeBSD__) || defined(__linux__))
173 free(data.ifblock.s);
174 free(data.ifblock.str);
178 case OBJ_xmms2_artist:
179 if (info.xmms2.artist) {
180 free(info.xmms2.artist);
181 info.xmms2.artist = 0;
184 case OBJ_xmms2_album:
185 if (info.xmms2.album) {
186 free(info.xmms2.album);
187 info.xmms2.album = 0;
190 case OBJ_xmms2_title:
191 if (info.xmms2.title) {
192 free(info.xmms2.title);
193 info.xmms2.title = 0;
196 case OBJ_xmms2_genre:
197 if (info.xmms2.genre) {
198 free(info.xmms2.genre);
199 info.xmms2.genre = 0;
202 case OBJ_xmms2_comment:
203 if (info.xmms2.comment) {
204 free(info.xmms2.comment);
205 info.xmms2.comment = 0;
209 if (info.xmms2.url) {
210 free(info.xmms2.url);
215 if (info.xmms2.date) {
216 free(info.xmms2.date);
220 case OBJ_xmms2_status:
221 if (info.xmms2.status) {
222 free(info.xmms2.status);
223 info.xmms2.status = 0;
226 case OBJ_xmms2_playlist:
227 if (info.xmms2.playlist) {
228 free(info.xmms2.playlist);
229 info.xmms2.playlist = 0;
232 case OBJ_xmms2_smart:
233 if (info.xmms2.artist) {
234 free(info.xmms2.artist);
235 info.xmms2.artist = 0;
237 if (info.xmms2.title) {
238 free(info.xmms2.title);
239 info.xmms2.title = 0;
241 if (info.xmms2.url) {
242 free(info.xmms2.url);
249 case OBJ_bmpx_artist:
253 case OBJ_bmpx_bitrate:
268 free(data.rss.action);
273 free(data.weather.uri);
274 free(data.weather.data_type);
278 case OBJ_weather_forecast:
279 free(data.weather_forecast.uri);
280 free(data.weather_forecast.data_type);
293 #endif /* HAVE_LUA */
300 case OBJ_battery_short:
303 case OBJ_battery_time:
306 #endif /* !__OpenBSD__ */
314 free(data.execi.cmd);
315 free(data.execi.buffer);
318 if (data.texeci.p_timed_thread) timed_thread_destroy(data.texeci.p_timed_thread, &data.texeci.p_timed_thread);
319 free(data.texeci.cmd);
320 free(data.texeci.buffer);
331 if (info.first_process && !internal) {
332 free_all_processes();
333 info.first_process = NULL;
335 if (data.top.s) free(data.top.s);
339 free(data.hddtemp.dev);
340 free(data.hddtemp.addr);
341 if (data.hddtemp.temp)
342 free(data.hddtemp.temp);
345 case OBJ_entropy_avail:
346 case OBJ_entropy_perc:
347 case OBJ_entropy_poolsize:
348 case OBJ_entropy_bar:
351 if (info.users.names) {
352 free(info.users.names);
353 info.users.names = 0;
357 if (info.users.terms) {
358 free(info.users.terms);
359 info.users.terms = 0;
363 if (info.users.times) {
364 free(info.users.times);
365 info.users.times = 0;
370 case OBJ_smapi_bat_perc:
371 case OBJ_smapi_bat_temp:
372 case OBJ_smapi_bat_power:
375 case OBJ_if_smapi_bat_installed:
376 free(data.ifblock.s);
377 free(data.ifblock.str);
391 case OBJ_mpd_bitrate:
394 case OBJ_mpd_elapsed:
399 case OBJ_mpd_percent:
401 case OBJ_if_mpd_playing:
412 case OBJ_moc_totaltime:
413 case OBJ_moc_timeleft:
414 case OBJ_moc_curtime:
415 case OBJ_moc_bitrate:
424 free_text_objects(obj->sub, 1);
429 free(data.scroll.text);
430 free_text_objects(obj->sub, 1);
434 free(data.combine.left);
435 free(data.combine.seperation);
436 free(data.combine.right);
437 free_text_objects(obj->sub, 1);
442 case OBJ_apcupsd_name:
443 case OBJ_apcupsd_model:
444 case OBJ_apcupsd_upsmode:
445 case OBJ_apcupsd_cable:
446 case OBJ_apcupsd_status:
447 case OBJ_apcupsd_linev:
448 case OBJ_apcupsd_load:
449 case OBJ_apcupsd_loadbar:
451 case OBJ_apcupsd_loadgraph:
452 case OBJ_apcupsd_loadgauge:
454 case OBJ_apcupsd_charge:
455 case OBJ_apcupsd_timeleft:
456 case OBJ_apcupsd_temp:
457 case OBJ_apcupsd_lastxfer:
462 case OBJ_desktop_number:
463 case OBJ_desktop_name:
464 if(info.x11.desktop.name) {
465 free(info.x11.desktop.name);
466 info.x11.desktop.name = NULL;
468 if(info.x11.desktop.all_names) {
469 free(info.x11.desktop.all_names);
470 info.x11.desktop.all_names = NULL;