Index: libexif/sources/libexif/exif-log.c |
=================================================================== |
--- libexif/sources/libexif/exif-log.c (revision 0) |
+++ libexif/sources/libexif/exif-log.c (revision 0) |
@@ -0,0 +1,152 @@ |
+/* exif-log.c |
+ * |
+ * Copyright (c) 2004 Lutz Mueller <lutz@users.sourceforge.net> |
+ * |
+ * 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 |
+ * Lesser 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., 51 Franklin Street, Fifth Floor, |
+ * Boston, MA 02110-1301 USA. |
+ */ |
+ |
+#include <config.h> |
+ |
+#include <libexif/exif-log.h> |
+#include <libexif/i18n.h> |
+ |
+#include <stdlib.h> |
+#include <string.h> |
+ |
+struct _ExifLog { |
+ unsigned int ref_count; |
+ |
+ ExifLogFunc func; |
+ void *data; |
+ |
+ ExifMem *mem; |
+}; |
+ |
+static const struct { |
+ ExifLogCode code; |
+ const char *title; |
+ const char *message; |
+} codes[] = { |
+ { EXIF_LOG_CODE_DEBUG, N_("Debugging information"), |
+ N_("Debugging information is available.") }, |
+ { EXIF_LOG_CODE_NO_MEMORY, N_("Not enough memory"), |
+ N_("The system cannot provide enough memory.") }, |
+ { EXIF_LOG_CODE_CORRUPT_DATA, N_("Corrupt data"), |
+ N_("The data provided does not follow the specification.") }, |
+ { 0, NULL, NULL } |
+}; |
+ |
+const char * |
+exif_log_code_get_title (ExifLogCode code) |
+{ |
+ unsigned int i; |
+ |
+ for (i = 0; codes[i].title; i++) if (codes[i].code == code) break; |
+ return _(codes[i].title); |
+} |
+ |
+const char * |
+exif_log_code_get_message (ExifLogCode code) |
+{ |
+ unsigned int i; |
+ |
+ for (i = 0; codes[i].message; i++) if (codes[i].code == code) break; |
+ return _(codes[i].message); |
+} |
+ |
+ExifLog * |
+exif_log_new_mem (ExifMem *mem) |
+{ |
+ ExifLog *log; |
+ |
+ log = exif_mem_alloc (mem, sizeof (ExifLog)); |
+ if (!log) return NULL; |
+ log->ref_count = 1; |
+ |
+ log->mem = mem; |
+ exif_mem_ref (mem); |
+ |
+ return log; |
+} |
+ |
+ExifLog * |
+exif_log_new (void) |
+{ |
+ ExifMem *mem = exif_mem_new_default (); |
+ ExifLog *log = exif_log_new_mem (mem); |
+ |
+ exif_mem_unref (mem); |
+ |
+ return log; |
+} |
+ |
+void |
+exif_log_ref (ExifLog *log) |
+{ |
+ if (!log) return; |
+ log->ref_count++; |
+} |
+ |
+void |
+exif_log_unref (ExifLog *log) |
+{ |
+ if (!log) return; |
+ if (log->ref_count > 0) log->ref_count--; |
+ if (!log->ref_count) exif_log_free (log); |
+} |
+ |
+void |
+exif_log_free (ExifLog *log) |
+{ |
+ ExifMem *mem = log ? log->mem : NULL; |
+ |
+ if (!log) return; |
+ |
+ exif_mem_free (mem, log); |
+ exif_mem_unref (mem); |
+} |
+ |
+void |
+exif_log_set_func (ExifLog *log, ExifLogFunc func, void *data) |
+{ |
+ if (!log) return; |
+ log->func = func; |
+ log->data = data; |
+} |
+ |
+#ifdef NO_VERBOSE_TAG_STRINGS |
+/* exif_log forms part of the API and can't be commented away */ |
+#undef exif_log |
+#endif |
+void |
+exif_log (ExifLog *log, ExifLogCode code, const char *domain, |
+ const char *format, ...) |
+{ |
+ va_list args; |
+ |
+ va_start (args, format); |
+ exif_logv (log, code, domain, format, args); |
+ va_end (args); |
+} |
+ |
+void |
+exif_logv (ExifLog *log, ExifLogCode code, const char *domain, |
+ const char *format, va_list args) |
+{ |
+ if (!log) return; |
+ if (!log->func) return; |
+ log->func (log, code, domain, format, args, log->data); |
+} |
Property changes on: libexif/sources/libexif/exif-log.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |