• Home
  • History
  • Annotate
  • only in /external/chromium_org/sdch/open-vcdiff/vsprojects/vcdiff_test/
1/* exif-log.c
2 *
3 * Copyright (c) 2004 Lutz Mueller <lutz@users.sourceforge.net>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA  02110-1301  USA.
19 */
20
21#include <config.h>
22
23#include <libexif/exif-log.h>
24#include <libexif/i18n.h>
25
26#include <stdlib.h>
27#include <string.h>
28
29struct _ExifLog {
30	unsigned int ref_count;
31
32	ExifLogFunc func;
33	void *data;
34
35	ExifMem *mem;
36};
37
38static const struct {
39	ExifLogCode code;
40	const char *title;
41	const char *message;
42} codes[] = {
43	{ EXIF_LOG_CODE_DEBUG, N_("Debugging information"),
44	  N_("Debugging information is available.") },
45	{ EXIF_LOG_CODE_NO_MEMORY, N_("Not enough memory"),
46	  N_("The system cannot provide enough memory.") },
47	{ EXIF_LOG_CODE_CORRUPT_DATA, N_("Corrupt data"),
48	  N_("The data provided does not follow the specification.") },
49	{ 0, NULL, NULL }
50};
51
52const char *
53exif_log_code_get_title (ExifLogCode code)
54{
55	unsigned int i;
56
57	for (i = 0; codes[i].title; i++) if (codes[i].code == code) break;
58	return _(codes[i].title);
59}
60
61const char *
62exif_log_code_get_message (ExifLogCode code)
63{
64	unsigned int i;
65
66	for (i = 0; codes[i].message; i++) if (codes[i].code == code) break;
67	return _(codes[i].message);
68}
69
70ExifLog *
71exif_log_new_mem (ExifMem *mem)
72{
73	ExifLog *log;
74
75	log = exif_mem_alloc (mem, sizeof (ExifLog));
76	if (!log) return NULL;
77	log->ref_count = 1;
78
79	log->mem = mem;
80	exif_mem_ref (mem);
81
82	return log;
83}
84
85ExifLog *
86exif_log_new (void)
87{
88	ExifMem *mem = exif_mem_new_default ();
89	ExifLog *log = exif_log_new_mem (mem);
90
91	exif_mem_unref (mem);
92
93	return log;
94}
95
96void
97exif_log_ref (ExifLog *log)
98{
99	if (!log) return;
100	log->ref_count++;
101}
102
103void
104exif_log_unref (ExifLog *log)
105{
106	if (!log) return;
107	if (log->ref_count > 0) log->ref_count--;
108	if (!log->ref_count) exif_log_free (log);
109}
110
111void
112exif_log_free (ExifLog *log)
113{
114	ExifMem *mem = log ? log->mem : NULL;
115
116	if (!log) return;
117
118	exif_mem_free (mem, log);
119	exif_mem_unref (mem);
120}
121
122void
123exif_log_set_func (ExifLog *log, ExifLogFunc func, void *data)
124{
125	if (!log) return;
126	log->func = func;
127	log->data = data;
128}
129
130#ifdef NO_VERBOSE_TAG_STRINGS
131/* exif_log forms part of the API and can't be commented away */
132#undef exif_log
133#endif
134void
135exif_log (ExifLog *log, ExifLogCode code, const char *domain,
136	  const char *format, ...)
137{
138	va_list args;
139
140	va_start (args, format);
141	exif_logv (log, code, domain, format, args);
142	va_end (args);
143}
144
145void
146exif_logv (ExifLog *log, ExifLogCode code, const char *domain,
147	   const char *format, va_list args)
148{
149	if (!log) return;
150	if (!log->func) return;
151	log->func (log, code, domain, format, args, log->data);
152}
153