gnome-control-center/gnome-settings-daemon/list.c
Anders Carlsson a9191cd79d xutils.c Add clipboard manager files.
2005-06-03  Anders Carlsson  <andersca@imendio.com>

	* Makefile.am:
	* clipboard-manager.c:
	* clipboard-manager.h:
	* list.c:
	* list.h:
	* xutils.c
	* xutils.h:
	Add clipboard manager files.

	* gnome-settings-daemon.c: (clipboard_manager_terminate_cb),
	(clipboard_manager_event_filter), (clipboard_manager_watch_cb),
	(finalize), (gnome_settings_daemon_new):
	Use clipboard manager for persistent clipboard storage.
2005-06-03 08:29:45 +00:00

150 lines
2.8 KiB
C

/*
* Copyright © 2004 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Red Hat not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. Red Hat makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL RED HAT
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Author: Matthias Clasen, Red Hat, Inc.
*/
#include <stdlib.h>
#include <list.h>
void
list_foreach (List *list,
Callback func,
void *user_data)
{
while (list)
{
func (list->data, user_data);
list = list->next;
}
}
List *
list_prepend (List *list,
void *data)
{
List *link;
link = (List *) malloc (sizeof (List));
link->next = list;
link->data = data;
return link;
}
void
list_free (List *list)
{
while (list)
{
List *next = list->next;
free (list);
list = next;
}
}
List *
list_find (List *list,
ListFindFunc func,
void *user_data)
{
List *tmp;
for (tmp = list; tmp; tmp = tmp->next)
{
if ((*func) (tmp->data, user_data))
break;
}
return tmp;
}
List *
list_remove (List *list,
void *data)
{
List *tmp, *prev;
prev = NULL;
for (tmp = list; tmp; tmp = tmp->next)
{
if (tmp->data == data)
{
if (prev)
prev->next = tmp->next;
else
list = tmp->next;
free (tmp);
break;
}
prev = tmp;
}
return list;
}
int
list_length (List *list)
{
List *tmp;
int length;
length = 0;
for (tmp = list; tmp; tmp = tmp->next)
length++;
return length;
}
List *
list_copy (List *list)
{
List *new_list = NULL;
if (list)
{
List *last;
new_list = (List *) malloc (sizeof (List));
new_list->data = list->data;
new_list->next = NULL;
last = new_list;
list = list->next;
while (list)
{
last->next = (List *) malloc (sizeof (List));
last = last->next;
last->data = list->data;
list = list->next;
}
last->next = NULL;
}
return new_list;
}