Commit b17c9e88e2f9e3904562ab37ec53d3dbf9eb9e42
1 parent
55fe0b61
Exists in
master
and in
2 other branches
Working on log/trace files.
Showing
9 changed files
with
77 additions
and
54 deletions
Show diff stats
src/core/linux/log.c
... | ... | @@ -42,20 +42,16 @@ |
42 | 42 | |
43 | 43 | int use_syslog = 0; |
44 | 44 | |
45 | -int default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int GNUC_UNUSED(rc), const char *fmt, va_list arg_ptr) { | |
45 | +int default_log_writer(H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata), const char *module, int GNUC_UNUSED(rc), const char *message) { | |
46 | 46 | #ifdef HAVE_SYSLOG |
47 | 47 | if(use_syslog) { |
48 | - vsyslog(LOG_INFO, fmt, arg_ptr); | |
48 | + syslog(LOG_INFO, "%s: %s", module, message); | |
49 | 49 | } else { |
50 | - printf("%s:\t",module); | |
51 | - vprintf(fmt,arg_ptr); | |
52 | - printf("\n"); | |
50 | + printf("%s %s\n", module, message); | |
53 | 51 | fflush(stdout); |
54 | 52 | } |
55 | 53 | #else |
56 | - printf("%s:\t",module); | |
57 | - vprintf(fmt,arg_ptr); | |
58 | - printf("\n"); | |
54 | + printf("%s %s\n", module, message); | |
59 | 55 | fflush(stdout); |
60 | 56 | #endif |
61 | 57 | return 0; | ... | ... |
src/core/log.c
... | ... | @@ -51,8 +51,12 @@ LIB3270_LOG_HANDLER loghandler = default_log_writer; |
51 | 51 | |
52 | 52 | /*---[ Implementacao ]--------------------------------------------------------------------------------------*/ |
53 | 53 | |
54 | -static void write_log(const H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr) { | |
54 | +static void write_log(const H3270 *session, const char *module, int rc, const char *fmt, va_list args) { | |
55 | 55 | |
56 | + // 'mount' message. | |
57 | + char *message = lib3270_vsprintf(fmt,args); | |
58 | + | |
59 | + // Write log | |
56 | 60 | if(session) { |
57 | 61 | |
58 | 62 | if(session->log.file) { |
... | ... | @@ -72,9 +76,7 @@ static void write_log(const H3270 *session, const char *module, int rc, const ch |
72 | 76 | strftime(timestamp, 79, "%x %X", localtime(<ime)); |
73 | 77 | #endif // HAVE_LOCALTIME_R |
74 | 78 | |
75 | - fprintf(f,"%s %s\t",timestamp,module); | |
76 | - vfprintf(f,fmt,arg_ptr); | |
77 | - fprintf(f,"\n"); | |
79 | + fprintf(f,"%s %s\t%s\n",timestamp,module,message); | |
78 | 80 | |
79 | 81 | fclose(f); |
80 | 82 | |
... | ... | @@ -82,14 +84,16 @@ static void write_log(const H3270 *session, const char *module, int rc, const ch |
82 | 84 | |
83 | 85 | } |
84 | 86 | |
85 | - session->log.handler(session,module ? module : LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME),rc,fmt,arg_ptr); | |
87 | + session->log.handler(session,session->log.userdata,module ? module : LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME),rc,message); | |
86 | 88 | |
87 | 89 | } else { |
88 | 90 | |
89 | - loghandler(session, (module ? module : LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME)),rc,fmt,arg_ptr); | |
91 | + loghandler(session, NULL, (module ? module : LIB3270_STRINGIZE_VALUE_OF(PRODUCT_NAME)),rc,message); | |
90 | 92 | |
91 | 93 | } |
92 | 94 | |
95 | + lib3270_free(message); | |
96 | + | |
93 | 97 | } |
94 | 98 | |
95 | 99 | LIB3270_EXPORT const char * lib3270_get_log_filename(const H3270 * hSession) { | ... | ... |
src/core/session.c
... | ... | @@ -199,8 +199,8 @@ static int load(H3270 *session, const char GNUC_UNUSED(*filename)) { |
199 | 199 | return errno = ENOTSUP; |
200 | 200 | } |
201 | 201 | |
202 | -static int def_trace(const H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata), const char *fmt, va_list args) { | |
203 | - vfprintf(stdout,fmt,args); | |
202 | +static int def_trace(const H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata), const char *message) { | |
203 | + printf("%s",message); | |
204 | 204 | fflush(stdout); |
205 | 205 | return 0; |
206 | 206 | } | ... | ... |
src/core/trace_ds.c
... | ... | @@ -73,6 +73,53 @@ |
73 | 73 | /* Statics */ |
74 | 74 | static void wtrace(H3270 *session, const char *fmt, ...); |
75 | 75 | |
76 | +static void write_trace(const H3270 *session, const char *fmt, va_list args) { | |
77 | + | |
78 | + // 'mount' message. | |
79 | + char *message = lib3270_vsprintf(fmt,args); | |
80 | + | |
81 | + if(session->trace.file) { | |
82 | + | |
83 | + // Has log file. Use it if possible. | |
84 | + FILE *f = fopen(session->trace.file, "a"); | |
85 | + | |
86 | + if(f) { | |
87 | + | |
88 | + time_t ltime = time(0); | |
89 | + | |
90 | + char timestamp[80]; | |
91 | +#ifdef HAVE_LOCALTIME_R | |
92 | + struct tm tm; | |
93 | + strftime(timestamp, 79, "%x %X", localtime_r(<ime,&tm)); | |
94 | +#else | |
95 | + strftime(timestamp, 79, "%x %X", localtime(<ime)); | |
96 | +#endif // HAVE_LOCALTIME_R | |
97 | + | |
98 | + fprintf(f,"%s %s\n",timestamp,message); | |
99 | + | |
100 | + fclose(f); | |
101 | + | |
102 | + } | |
103 | + | |
104 | + } | |
105 | + | |
106 | + session->trace.handler(session,session->trace.userdata,message); | |
107 | + | |
108 | + lib3270_free(message); | |
109 | + | |
110 | +} | |
111 | + | |
112 | +/** | |
113 | + * @brief Write to the trace file. | |
114 | + */ | |
115 | +static void wtrace(H3270 *session, const char *fmt, ...) { | |
116 | + va_list args; | |
117 | + va_start(args, fmt); | |
118 | + write_trace(session, fmt, args); | |
119 | + va_end(args); | |
120 | +} | |
121 | + | |
122 | + | |
76 | 123 | /* display a (row,col) */ |
77 | 124 | const char * rcba(H3270 *hSession, int baddr) { |
78 | 125 | static char buf[48]; |
... | ... | @@ -161,7 +208,7 @@ void trace_dsn(H3270 *session, const char *fmt, ...) { |
161 | 208 | |
162 | 209 | /* print out message */ |
163 | 210 | va_start(args, fmt); |
164 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
211 | + write_trace(session,fmt,args); | |
165 | 212 | va_end(args); |
166 | 213 | } |
167 | 214 | |
... | ... | @@ -176,18 +223,7 @@ void trace_ssl(H3270 *session, const char *fmt, ...) { |
176 | 223 | |
177 | 224 | /* print out message */ |
178 | 225 | va_start(args, fmt); |
179 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
180 | - va_end(args); | |
181 | -} | |
182 | - | |
183 | - | |
184 | -/** | |
185 | - * @brief Write to the trace file. | |
186 | - */ | |
187 | -static void wtrace(H3270 *session, const char *fmt, ...) { | |
188 | - va_list args; | |
189 | - va_start(args, fmt); | |
190 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
226 | + write_trace(session, fmt, args); | |
191 | 227 | va_end(args); |
192 | 228 | } |
193 | 229 | |
... | ... | @@ -195,7 +231,7 @@ LIB3270_EXPORT void lib3270_write_trace(H3270 *session, const char *fmt, ...) { |
195 | 231 | va_list args; |
196 | 232 | |
197 | 233 | va_start(args, fmt); |
198 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
234 | + write_trace(session, fmt, args); | |
199 | 235 | va_end(args); |
200 | 236 | } |
201 | 237 | |
... | ... | @@ -206,7 +242,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) |
206 | 242 | return; |
207 | 243 | |
208 | 244 | va_start(args, fmt); |
209 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
245 | + write_trace(session, fmt, args); | |
210 | 246 | va_end(args); |
211 | 247 | } |
212 | 248 | |
... | ... | @@ -217,7 +253,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...) |
217 | 253 | return; |
218 | 254 | |
219 | 255 | va_start(args, fmt); |
220 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
256 | + write_trace(session, fmt, args); | |
221 | 257 | va_end(args); |
222 | 258 | } |
223 | 259 | |
... | ... | @@ -228,7 +264,7 @@ LIB3270_EXPORT void lib3270_write_screen_trace(H3270 *session, const char *fmt, |
228 | 264 | return; |
229 | 265 | |
230 | 266 | va_start(args, fmt); |
231 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
267 | + write_trace(session, fmt, args); | |
232 | 268 | va_end(args); |
233 | 269 | } |
234 | 270 | |
... | ... | @@ -239,7 +275,7 @@ LIB3270_EXPORT void lib3270_write_event_trace(H3270 *session, const char *fmt, . |
239 | 275 | return; |
240 | 276 | |
241 | 277 | va_start(args, fmt); |
242 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
278 | + write_trace(session, fmt, args); | |
243 | 279 | va_end(args); |
244 | 280 | } |
245 | 281 | |
... | ... | @@ -250,7 +286,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) { |
250 | 286 | return; |
251 | 287 | |
252 | 288 | va_start(args, fmt); |
253 | - session->trace.handler(session,session->trace.userdata,fmt, args); | |
289 | + write_trace(session, fmt, args); | |
254 | 290 | va_end(args); |
255 | 291 | } |
256 | 292 | ... | ... |
src/core/windows/log.c
... | ... | @@ -41,10 +41,7 @@ |
41 | 41 | |
42 | 42 | /*---[ Implement ]------------------------------------------------------------------------------------------*/ |
43 | 43 | |
44 | -int default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int rc, const char *fmt, va_list arg_ptr) { | |
45 | - lib3270_autoptr(char) msg = lib3270_vsprintf(fmt,arg_ptr); | |
46 | - | |
47 | - debug("%s",msg); | |
44 | +int default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int rc, const char *msg) { | |
48 | 45 | |
49 | 46 | if(hEventLog) { |
50 | 47 | lib3270_autoptr(char) username = lib3270_get_user_name(); | ... | ... |
src/include/internals.h
... | ... | @@ -635,6 +635,7 @@ struct _h3270 { |
635 | 635 | struct { |
636 | 636 | char *file; ///< @brief Log file name (if set). |
637 | 637 | LIB3270_LOG_HANDLER handler; |
638 | + void *userdata; | |
638 | 639 | } log; |
639 | 640 | |
640 | 641 | struct { |
... | ... | @@ -739,7 +740,7 @@ LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); |
739 | 740 | LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); |
740 | 741 | |
741 | 742 | /// @brief Default log writer. |
742 | -LIB3270_INTERNAL int default_log_writer(H3270 *session, const char *module, int rc, const char *fmt, va_list arg_ptr); | |
743 | +LIB3270_INTERNAL int default_log_writer(H3270 *session, void *dunno, const char *module, int rc, const char *message); | |
743 | 744 | |
744 | 745 | /// @brief The active log handler. |
745 | 746 | LIB3270_INTERNAL LIB3270_LOG_HANDLER loghandler; | ... | ... |
src/include/lib3270/log.h
... | ... | @@ -52,7 +52,7 @@ |
52 | 52 | extern "C" { |
53 | 53 | #endif |
54 | 54 | |
55 | -typedef int (*LIB3270_LOG_HANDLER)(const H3270 *, const char *, int, const char *, va_list); | |
55 | +typedef int (*LIB3270_LOG_HANDLER)(const H3270 *, void *, const char *, int, const char *); | |
56 | 56 | |
57 | 57 | LIB3270_EXPORT void lib3270_set_log_handler(H3270 *session, const LIB3270_LOG_HANDLER loghandler); |
58 | 58 | LIB3270_EXPORT int lib3270_set_log_filename(H3270 * hSession, const char *name); | ... | ... |
src/include/lib3270/trace.h
... | ... | @@ -45,7 +45,7 @@ extern "C" { |
45 | 45 | #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b))) |
46 | 46 | #endif |
47 | 47 | |
48 | -typedef int (*LIB3270_TRACE_HANDLER)(const H3270 *, void *, const char *, va_list); | |
48 | +typedef int (*LIB3270_TRACE_HANDLER)(const H3270 *, void *, const char *); | |
49 | 49 | |
50 | 50 | /** |
51 | 51 | * @brief Set trace filename. | ... | ... |
src/testprogram/testprogram.c
... | ... | @@ -50,16 +50,6 @@ |
50 | 50 | |
51 | 51 | const char *trace_file = "test.trace"; |
52 | 52 | |
53 | -static int write_trace(const H3270 GNUC_UNUSED(*session), void GNUC_UNUSED(*userdata), const char *fmt, va_list args) { | |
54 | - FILE *out = fopen(trace_file,"a"); | |
55 | - if(out) { | |
56 | - | |
57 | - vfprintf(out,fmt,args); | |
58 | - fclose(out); | |
59 | - } | |
60 | - return 0; | |
61 | -} | |
62 | - | |
63 | 53 | static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_UNUSED(*dunno)) { |
64 | 54 | printf("\n\n%s\n\n",__FUNCTION__); |
65 | 55 | } |
... | ... | @@ -138,8 +128,7 @@ int main(int argc, char *argv[]) { |
138 | 128 | return 0; |
139 | 129 | |
140 | 130 | case 't': |
141 | - trace_file = optarg; | |
142 | - lib3270_set_trace_handler(h,write_trace,NULL); | |
131 | + lib3270_set_trace_filename(h,optarg); | |
143 | 132 | lib3270_set_toggle(h,LIB3270_TOGGLE_DS_TRACE,1); |
144 | 133 | break; |
145 | 134 | } | ... | ... |