/* LIBGIMP - The GIMP Library * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * gimpparasite.c * Copyright (C) 1998 Jay Cox * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "config.h" #include #ifdef HAVE_UNISTD_H #include #endif #include #include #ifdef G_OS_WIN32 #include /* For _getpid() */ #endif #include "gimpparasite.h" #include "gimpparasite_pdb.h" #ifdef DEBUG static void gimp_parasite_print (GimpParasite *parasite) { if (parasite == NULL) { g_print ("pid %d: attempt to print a null parasite\n", getpid ()); return; } g_print ("pid %d: parasite: %p\n", getpid (), parasite); if (parasite->name) g_print ("\tname: %s\n", parasite->name); else g_print ("\tname: NULL\n"); g_print ("\tflags: %d\n", parasite->flags); g_print ("\tsize: %d\n", parasite->size); if (parasite->size > 0) g_print ("\tdata: %p\n", parasite->data); } #endif GimpParasite * gimp_parasite_new (const gchar *name, guint32 flags, guint32 size, const gpointer data) { GimpParasite *parasite; if (!name) return NULL; parasite = g_new (GimpParasite, 1); parasite->name = g_strdup (name); parasite->flags = (flags & 0xFF); parasite->size = size; if (size) parasite->data = g_memdup (data, size); else parasite->data = NULL; return parasite; } void gimp_parasite_free (GimpParasite *parasite) { if (parasite == NULL) return; if (parasite->name) g_free (parasite->name); if (parasite->data) g_free (parasite->data); g_free (parasite); } gboolean gimp_parasite_is_type (const GimpParasite *parasite, const gchar *name) { if (!parasite || !parasite->name) return FALSE; return (strcmp (parasite->name, name) == 0); } GimpParasite * gimp_parasite_copy (const GimpParasite *parasite) { if (parasite == NULL) return NULL; return gimp_parasite_new (parasite->name, parasite->flags, parasite->size, parasite->data); } gboolean gimp_parasite_compare (const GimpParasite *a, const GimpParasite *b) { if (a && b && a->name && b->name && strcmp (a->name, b->name) == 0 && a->flags == b->flags && a->size == b->size) { if (a->data == NULL && b->data == NULL) return TRUE; else if (a->data && b->data && memcmp (a->data, b->data, a->size) == 0) return TRUE; } return FALSE; } gulong gimp_parasite_flags (const GimpParasite *parasite) { if (parasite == NULL) return 0; return parasite->flags; } gboolean gimp_parasite_is_persistent (const GimpParasite *parasite) { if (parasite == NULL) return FALSE; return (parasite->flags & GIMP_PARASITE_PERSISTENT); } gboolean gimp_parasite_is_undoable (const GimpParasite *parasite) { if (parasite == NULL) return FALSE; return (parasite->flags & GIMP_PARASITE_UNDOABLE); } gboolean gimp_parasite_has_flag (const GimpParasite *parasite, gulong flag) { if (parasite == NULL) return FALSE; return (parasite->flags & flag); } const gchar * gimp_parasite_name (const GimpParasite *parasite) { if (parasite) return parasite->name; return NULL; } gpointer gimp_parasite_data (const GimpParasite *parasite) { if (parasite) return parasite->data; return NULL; } glong gimp_parasite_data_size (const GimpParasite *parasite) { if (parasite) return parasite->size; return 0; } void gimp_attach_new_parasite (const gchar *name, gint flags, gint size, const gpointer data) { GimpParasite *parasite = gimp_parasite_new (name, flags, size, data); gimp_parasite_attach (parasite); gimp_parasite_free (parasite); } void gimp_drawable_attach_new_parasite (gint32 drawable, const gchar *name, gint flags, gint size, const gpointer data) { GimpParasite *parasite = gimp_parasite_new (name, flags, size, data); gimp_drawable_parasite_attach (drawable, parasite); gimp_parasite_free (parasite); } void gimp_image_attach_new_parasite (gint32 image_ID, const gchar *name, gint flags, gint size, const gpointer data) { GimpParasite *parasite = gimp_parasite_new (name, flags, size, data); gimp_image_parasite_attach (image_ID, parasite); gimp_parasite_free (parasite); }