Mercurial > geeqie
annotate src/debug.c @ 1808:6c61c246506b
Fix a small issue with strptime
strptime do not initialize all fields. So the undefined fields could end
in crash later on.
author | mow |
---|---|
date | Sun, 28 Feb 2010 15:17:12 +0000 |
parents | 956aab097ea7 |
children |
rev | line source |
---|---|
507 | 1 /* |
2 * Geeqie | |
1802 | 3 * Copyright (C) 2008 - 2010 The Geeqie Team |
507 | 4 * |
5 * Authors: Vladimir Nadvornik, Laurent Monin | |
6 * | |
7 * This software is released under the GNU General Public License (GNU GPL). | |
8 * Please read the included file COPYING for more information. | |
9 * This software comes with no warranty of any kind, use at your own risk! | |
10 */ | |
11 | |
12 #include "main.h" | |
678
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
13 #include "debug.h" |
507 | 14 |
678
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
15 #include "logwindow.h" |
693
bbe9cef644f8
Use print_term() instead of printf(), since it handles charset conversion
zas_
parents:
678
diff
changeset
|
16 #include "ui_fileops.h" |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
17 |
1305 | 18 #include <glib/gprintf.h> |
19 | |
20 | |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
21 /* |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
22 * Logging functions |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
23 */ |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
24 |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
995
diff
changeset
|
25 gint log_domain_printf(const gchar *domain, const gchar *format, ...) |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
26 { |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
27 va_list ap; |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
28 gchar buf[4096]; |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
29 gint ret; |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
30 |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
31 va_start(ap, format); |
1305 | 32 ret = g_vsnprintf(buf, sizeof(buf), format, ap); |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
33 va_end(ap); |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
34 |
693
bbe9cef644f8
Use print_term() instead of printf(), since it handles charset conversion
zas_
parents:
678
diff
changeset
|
35 print_term(buf); |
678
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
36 if (strcmp(domain, DOMAIN_INFO) == 0) |
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
37 log_window_append(buf, LOG_NORMAL); |
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
38 else |
6d6f042b8ca5
Add a log window that shows normal and debug messages. For now, it was added to Help menu.
zas_
parents:
673
diff
changeset
|
39 log_window_append(buf, LOG_MSG); |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
40 |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
41 return ret; |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
42 } |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
43 |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
44 |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
45 /* |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
46 * Debugging only functions |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
47 */ |
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
48 |
507 | 49 #ifdef DEBUG |
50 | |
51 static gint debug_level = DEBUG_LEVEL_MIN; | |
52 | |
53 | |
54 gint get_debug_level(void) | |
55 { | |
56 return debug_level; | |
57 } | |
58 | |
59 void set_debug_level(gint new_level) | |
60 { | |
995 | 61 debug_level = CLAMP(new_level, DEBUG_LEVEL_MIN, DEBUG_LEVEL_MAX); |
507 | 62 } |
63 | |
64 void debug_level_add(gint delta) | |
65 { | |
66 set_debug_level(debug_level + delta); | |
67 } | |
68 | |
69 gint required_debug_level(gint level) | |
70 { | |
71 return (debug_level >= level); | |
72 } | |
73 | |
509 | 74 static gint timeval_delta(struct timeval *result, struct timeval *x, struct timeval *y) |
75 { | |
76 if (x->tv_usec < y->tv_usec) | |
77 { | |
78 gint nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1; | |
79 y->tv_usec -= 1000000 * nsec; | |
80 y->tv_sec += nsec; | |
81 } | |
82 | |
83 if (x->tv_usec - y->tv_usec > 1000000) | |
84 { | |
85 gint nsec = (x->tv_usec - y->tv_usec) / 1000000; | |
86 y->tv_usec += 1000000 * nsec; | |
87 y->tv_sec -= nsec; | |
88 } | |
89 | |
90 result->tv_sec = x->tv_sec - y->tv_sec; | |
91 result->tv_usec = x->tv_usec - y->tv_usec; | |
92 | |
93 return x->tv_sec < y->tv_sec; | |
94 } | |
95 | |
96 const gchar *get_exec_time(void) | |
97 { | |
98 static gchar timestr[30]; | |
99 static struct timeval start_tv = {0, 0}; | |
100 static struct timeval previous = {0, 0}; | |
101 static gint started = 0; | |
102 | |
103 struct timeval tv = {0, 0}; | |
104 static struct timeval delta = {0, 0}; | |
105 | |
106 gettimeofday(&tv, NULL); | |
107 | |
108 if (start_tv.tv_sec == 0) start_tv = tv; | |
109 | |
110 tv.tv_sec -= start_tv.tv_sec; | |
111 if (tv.tv_usec >= start_tv.tv_usec) | |
112 tv.tv_usec -= start_tv.tv_usec; | |
113 else | |
114 { | |
115 tv.tv_usec += 1000000 - start_tv.tv_usec; | |
116 tv.tv_sec -= 1; | |
117 } | |
118 | |
119 if (started) timeval_delta(&delta, &tv, &previous); | |
120 | |
121 previous = tv; | |
122 started = 1; | |
123 | |
1000
4fe8f9656107
For the sake of consistency, use glib basic types everywhere.
zas_
parents:
995
diff
changeset
|
124 g_snprintf(timestr, sizeof(timestr), "%5d.%06d (+%05d.%06d)", (gint)tv.tv_sec, (gint)tv.tv_usec, (gint)delta.tv_sec, (gint)delta.tv_usec); |
509 | 125 |
126 return timestr; | |
127 } | |
128 | |
129 void init_exec_time(void) | |
130 { | |
131 get_exec_time(); | |
132 } | |
133 | |
673
fbebf5cf4a55
Do not use printf() directly but use new wrapper function log_printf() instead.
zas_
parents:
671
diff
changeset
|
134 #endif /* DEBUG */ |
1055
1646720364cf
Adding a vim modeline to all files - patch by Klaus Ethgen
nadvornik
parents:
1000
diff
changeset
|
135 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */ |