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,20 +42,16 @@ | ||
| 42 | 42 | ||
| 43 | int use_syslog = 0; | 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 | #ifdef HAVE_SYSLOG | 46 | #ifdef HAVE_SYSLOG |
| 47 | if(use_syslog) { | 47 | if(use_syslog) { |
| 48 | - vsyslog(LOG_INFO, fmt, arg_ptr); | 48 | + syslog(LOG_INFO, "%s: %s", module, message); |
| 49 | } else { | 49 | } else { |
| 50 | - printf("%s:\t",module); | ||
| 51 | - vprintf(fmt,arg_ptr); | ||
| 52 | - printf("\n"); | 50 | + printf("%s %s\n", module, message); |
| 53 | fflush(stdout); | 51 | fflush(stdout); |
| 54 | } | 52 | } |
| 55 | #else | 53 | #else |
| 56 | - printf("%s:\t",module); | ||
| 57 | - vprintf(fmt,arg_ptr); | ||
| 58 | - printf("\n"); | 54 | + printf("%s %s\n", module, message); |
| 59 | fflush(stdout); | 55 | fflush(stdout); |
| 60 | #endif | 56 | #endif |
| 61 | return 0; | 57 | return 0; |
src/core/log.c
| @@ -51,8 +51,12 @@ LIB3270_LOG_HANDLER loghandler = default_log_writer; | @@ -51,8 +51,12 @@ LIB3270_LOG_HANDLER loghandler = default_log_writer; | ||
| 51 | 51 | ||
| 52 | /*---[ Implementacao ]--------------------------------------------------------------------------------------*/ | 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 | if(session) { | 60 | if(session) { |
| 57 | 61 | ||
| 58 | if(session->log.file) { | 62 | if(session->log.file) { |
| @@ -72,9 +76,7 @@ static void write_log(const H3270 *session, const char *module, int rc, const ch | @@ -72,9 +76,7 @@ static void write_log(const H3270 *session, const char *module, int rc, const ch | ||
| 72 | strftime(timestamp, 79, "%x %X", localtime(<ime)); | 76 | strftime(timestamp, 79, "%x %X", localtime(<ime)); |
| 73 | #endif // HAVE_LOCALTIME_R | 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 | fclose(f); | 81 | fclose(f); |
| 80 | 82 | ||
| @@ -82,14 +84,16 @@ static void write_log(const H3270 *session, const char *module, int rc, const ch | @@ -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 | } else { | 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 | LIB3270_EXPORT const char * lib3270_get_log_filename(const H3270 * hSession) { | 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,8 +199,8 @@ static int load(H3270 *session, const char GNUC_UNUSED(*filename)) { | ||
| 199 | return errno = ENOTSUP; | 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 | fflush(stdout); | 204 | fflush(stdout); |
| 205 | return 0; | 205 | return 0; |
| 206 | } | 206 | } |
src/core/trace_ds.c
| @@ -73,6 +73,53 @@ | @@ -73,6 +73,53 @@ | ||
| 73 | /* Statics */ | 73 | /* Statics */ |
| 74 | static void wtrace(H3270 *session, const char *fmt, ...); | 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 | /* display a (row,col) */ | 123 | /* display a (row,col) */ |
| 77 | const char * rcba(H3270 *hSession, int baddr) { | 124 | const char * rcba(H3270 *hSession, int baddr) { |
| 78 | static char buf[48]; | 125 | static char buf[48]; |
| @@ -161,7 +208,7 @@ void trace_dsn(H3270 *session, const char *fmt, ...) { | @@ -161,7 +208,7 @@ void trace_dsn(H3270 *session, const char *fmt, ...) { | ||
| 161 | 208 | ||
| 162 | /* print out message */ | 209 | /* print out message */ |
| 163 | va_start(args, fmt); | 210 | va_start(args, fmt); |
| 164 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 211 | + write_trace(session,fmt,args); |
| 165 | va_end(args); | 212 | va_end(args); |
| 166 | } | 213 | } |
| 167 | 214 | ||
| @@ -176,18 +223,7 @@ void trace_ssl(H3270 *session, const char *fmt, ...) { | @@ -176,18 +223,7 @@ void trace_ssl(H3270 *session, const char *fmt, ...) { | ||
| 176 | 223 | ||
| 177 | /* print out message */ | 224 | /* print out message */ |
| 178 | va_start(args, fmt); | 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 | va_end(args); | 227 | va_end(args); |
| 192 | } | 228 | } |
| 193 | 229 | ||
| @@ -195,7 +231,7 @@ LIB3270_EXPORT void lib3270_write_trace(H3270 *session, const char *fmt, ...) { | @@ -195,7 +231,7 @@ LIB3270_EXPORT void lib3270_write_trace(H3270 *session, const char *fmt, ...) { | ||
| 195 | va_list args; | 231 | va_list args; |
| 196 | 232 | ||
| 197 | va_start(args, fmt); | 233 | va_start(args, fmt); |
| 198 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 234 | + write_trace(session, fmt, args); |
| 199 | va_end(args); | 235 | va_end(args); |
| 200 | } | 236 | } |
| 201 | 237 | ||
| @@ -206,7 +242,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) | @@ -206,7 +242,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) | ||
| 206 | return; | 242 | return; |
| 207 | 243 | ||
| 208 | va_start(args, fmt); | 244 | va_start(args, fmt); |
| 209 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 245 | + write_trace(session, fmt, args); |
| 210 | va_end(args); | 246 | va_end(args); |
| 211 | } | 247 | } |
| 212 | 248 | ||
| @@ -217,7 +253,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...) | @@ -217,7 +253,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...) | ||
| 217 | return; | 253 | return; |
| 218 | 254 | ||
| 219 | va_start(args, fmt); | 255 | va_start(args, fmt); |
| 220 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 256 | + write_trace(session, fmt, args); |
| 221 | va_end(args); | 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,7 +264,7 @@ LIB3270_EXPORT void lib3270_write_screen_trace(H3270 *session, const char *fmt, | ||
| 228 | return; | 264 | return; |
| 229 | 265 | ||
| 230 | va_start(args, fmt); | 266 | va_start(args, fmt); |
| 231 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 267 | + write_trace(session, fmt, args); |
| 232 | va_end(args); | 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,7 +275,7 @@ LIB3270_EXPORT void lib3270_write_event_trace(H3270 *session, const char *fmt, . | ||
| 239 | return; | 275 | return; |
| 240 | 276 | ||
| 241 | va_start(args, fmt); | 277 | va_start(args, fmt); |
| 242 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 278 | + write_trace(session, fmt, args); |
| 243 | va_end(args); | 279 | va_end(args); |
| 244 | } | 280 | } |
| 245 | 281 | ||
| @@ -250,7 +286,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) { | @@ -250,7 +286,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) { | ||
| 250 | return; | 286 | return; |
| 251 | 287 | ||
| 252 | va_start(args, fmt); | 288 | va_start(args, fmt); |
| 253 | - session->trace.handler(session,session->trace.userdata,fmt, args); | 289 | + write_trace(session, fmt, args); |
| 254 | va_end(args); | 290 | va_end(args); |
| 255 | } | 291 | } |
| 256 | 292 |
src/core/windows/log.c
| @@ -41,10 +41,7 @@ | @@ -41,10 +41,7 @@ | ||
| 41 | 41 | ||
| 42 | /*---[ Implement ]------------------------------------------------------------------------------------------*/ | 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 | if(hEventLog) { | 46 | if(hEventLog) { |
| 50 | lib3270_autoptr(char) username = lib3270_get_user_name(); | 47 | lib3270_autoptr(char) username = lib3270_get_user_name(); |
src/include/internals.h
| @@ -635,6 +635,7 @@ struct _h3270 { | @@ -635,6 +635,7 @@ struct _h3270 { | ||
| 635 | struct { | 635 | struct { |
| 636 | char *file; ///< @brief Log file name (if set). | 636 | char *file; ///< @brief Log file name (if set). |
| 637 | LIB3270_LOG_HANDLER handler; | 637 | LIB3270_LOG_HANDLER handler; |
| 638 | + void *userdata; | ||
| 638 | } log; | 639 | } log; |
| 639 | 640 | ||
| 640 | struct { | 641 | struct { |
| @@ -739,7 +740,7 @@ LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); | @@ -739,7 +740,7 @@ LIB3270_INTERNAL void clear_chr(H3270 *hSession, int baddr); | ||
| 739 | LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); | 740 | LIB3270_INTERNAL unsigned char get_field_attribute(H3270 *session, int baddr); |
| 740 | 741 | ||
| 741 | /// @brief Default log writer. | 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 | /// @brief The active log handler. | 745 | /// @brief The active log handler. |
| 745 | LIB3270_INTERNAL LIB3270_LOG_HANDLER loghandler; | 746 | LIB3270_INTERNAL LIB3270_LOG_HANDLER loghandler; |
src/include/lib3270/log.h
| @@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
| 52 | extern "C" { | 52 | extern "C" { |
| 53 | #endif | 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 | LIB3270_EXPORT void lib3270_set_log_handler(H3270 *session, const LIB3270_LOG_HANDLER loghandler); | 57 | LIB3270_EXPORT void lib3270_set_log_handler(H3270 *session, const LIB3270_LOG_HANDLER loghandler); |
| 58 | LIB3270_EXPORT int lib3270_set_log_filename(H3270 * hSession, const char *name); | 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,7 +45,7 @@ extern "C" { | ||
| 45 | #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b))) | 45 | #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b))) |
| 46 | #endif | 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 | * @brief Set trace filename. | 51 | * @brief Set trace filename. |
src/testprogram/testprogram.c
| @@ -50,16 +50,6 @@ | @@ -50,16 +50,6 @@ | ||
| 50 | 50 | ||
| 51 | const char *trace_file = "test.trace"; | 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 | static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_UNUSED(*dunno)) { | 53 | static void online_group_state_changed(H3270 GNUC_UNUSED(*hSession), void GNUC_UNUSED(*dunno)) { |
| 64 | printf("\n\n%s\n\n",__FUNCTION__); | 54 | printf("\n\n%s\n\n",__FUNCTION__); |
| 65 | } | 55 | } |
| @@ -138,8 +128,7 @@ int main(int argc, char *argv[]) { | @@ -138,8 +128,7 @@ int main(int argc, char *argv[]) { | ||
| 138 | return 0; | 128 | return 0; |
| 139 | 129 | ||
| 140 | case 't': | 130 | case 't': |
| 141 | - trace_file = optarg; | ||
| 142 | - lib3270_set_trace_handler(h,write_trace,NULL); | 131 | + lib3270_set_trace_filename(h,optarg); |
| 143 | lib3270_set_toggle(h,LIB3270_TOGGLE_DS_TRACE,1); | 132 | lib3270_set_toggle(h,LIB3270_TOGGLE_DS_TRACE,1); |
| 144 | break; | 133 | break; |
| 145 | } | 134 | } |