/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4applog.ctr */ /** @file dk4applog.c The dk4applog module. */ #line 9 "dk4applog.ctr" #ifndef DK4APP_H_INCLUDED #include "dk4app.h" #endif #ifndef DK4CONST_H_INCLUDED #include "dk4const.h" #endif #ifndef DK4TIME_H_INCLUDED #include "dk4time.h" #endif #ifndef DK4TIMEDK_H_INCLUDED #include "dk4timedk.h" #endif #ifndef DK4MAODD_H_INCLUDED #include "dk4maodd.h" #endif #ifndef DK4FPUT_H_INCLUDED #include "dk4fput.h" #endif #ifndef DK4MEM_H_INCLUDED #include "dk4mem.h" #endif #ifndef DK4FOP8_H_INCLUDED #include "dk4fopc8.h" #endif #ifndef DK4FOPD_H_INCLUDED #include "dk4fopd.h" #endif #ifndef DK4MAODD_H_INCLUDED #include "dk4maodd.h" #endif #ifndef DK4ENC_H_INCLUDED #include "dk4enc.h" #endif #ifndef DK4APPMKDH_H_INCLUDED #include "dk4appmkdh.h" #endif #ifndef DK4MPL_H_INCLUDED #include "dk4mpl.h" #endif #ifndef DK4FS_H_INCLUDED #include "dk4fs.h" #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #ifdef __cplusplus extern "C" { #endif /** Log at application startup. @param app Application structure. */ void dk4app_log_startup_debug(dk4_app_t *app); #ifdef __cplusplus } #endif #line 90 "dk4applog.ctr" /** Constant char texts used by the module, not localized. */ static const dkChar * const dk4app_log_kwnl[] = { /* 0 */ dkT("w"), /* 1 */ dkT("a"), /* 2 */ dkT("dk4debug.str"), /* 3 */ dkT("-"), /* 4 */ dkT("+"), /* 5 */ dkT("ascii"), /* 6 */ dkT("ansi"), /* 7 */ dkT("utf-8"), /* 8 */ dkT("utf-16"), /* 9 */ dkT("utf-16-le"), /* 10 */ dkT("utf-16-be"), /* 11 */ dkT("c32"), /* 12 */ dkT("c32-le"), /* 13 */ dkT("c32-be"), /* 14 */ dkT("dk3pref.conf"), /* 15 */ dkT("dk4pref.conf"), NULL #line 129 "dk4applog.ctr" }; /** The message texts for the base log domain, nearly always loaded. */ static const dkChar * const dk4app_def_msg_base[] = { /* 0 */ dkT("NONE"), /* 1 */ dkT("Panic"), /* 2 */ dkT("Fatal"), /* 3 */ dkT("Error"), /* 4 */ dkT("Warning"), /* 5 */ dkT("Info"), /* 6 */ dkT("Progress"), /* 7 */ dkT("Debug"), /* 8 */ dkT("Ignore"), /* 9 */ dkT("Illegal option: \""), /* 10 */ dkT("\"!"), /* 11 */ dkT("Option \""), /* 12 */ dkT("\" requires argument!"), /* 13 */ dkT("Option \""), /* 14 */ dkT("\" requires a boolean argument!\n\tRejected text: \""), /* 15 */ dkT("\"!"), /* 16 */ dkT("Option \""), /* 17 */ dkT("\" requires a size argument!\n\tRejected text: \""), /* 18 */ dkT("\"!"), /* 19 */ dkT("Option \""), /* 20 */ dkT("\" requires integer argument!\n\tRejected text: \""), /* 21 */ dkT("\"!"), /* 22 */ dkT("Option \""), /* 23 */ dkT("\" requires unsigned integer argument!\n\tRejected text: \""), /* 24 */ dkT("\"!"), /* 25 */ dkT("Option \""), /* 26 */ dkT("\" requires floating point (double) argument!\n\tRejected text: \""), /* 27 */ dkT("\"!"), /* 28 */ dkT("Option \"--"), /* 29 */ dkT("Option \"--"), /* 30 */ dkT("Option \"--"), /* 31 */ dkT("Option \"--"), /* 32 */ dkT("Option \"--"), /* 33 */ dkT("Option \"--"), /* 34 */ dkT("Failed to save preference value!\n\t\""), /* 35 */ dkT("\"=\""), /* 36 */ dkT("\"!"), /* 37 */ dkT("Value required for command line preference \""), /* 38 */ dkT("\"!"), /* 39 */ dkT("Option too long!\n\t\""), /* 40 */ dkT("\"!"), /* 41 */ dkT("Failed to remove file:\n\t\""), /* 42 */ dkT("\"!\n\tPath name too long."), /* 43 */ dkT("Failed to create directory:\n\t\""), /* 44 */ dkT("\"!\n\tPath exists, but is not a directory!"), /* 45 */ dkT("\n\tLocal network interface is down!"), /* 46 */ dkT("Failed to create directory:\n\t\""), /* 47 */ dkT("\"!\n\tIllegal path."), /* 48 */ dkT("\"!\n\tFile or directory in use."), /* 49 */ dkT("\"!\n\tPath already exists."), /* 50 */ dkT("\"!\n\tPath name points outside accessible address space."), /* 51 */ dkT("\"!\n\tPath not found (one path component does not exist)."), /* 52 */ dkT("\"!\n\tPath specifies a directory."), /* 53 */ dkT("\"!\n\tNo function for wide-char mkdir available."), /* 54 */ dkT("No wide-char function to remove files available."), /* 55 */ dkT("\"!\n\tInsufficient permissions."), /* 56 */ dkT("\"!\n\tFile system is mounted read-only."), /* 57 */ dkT("\"!\n\tConflict with extended attribute."), /* 58 */ dkT("\"!\n\tNot allowed for this file system type."), /* 59 */ dkT("\"!\n\tI/O error on device."), /* 60 */ dkT("\"!\n\tDisk space or quota problem."), /* 61 */ dkT("\"!\n\tToo many symbolic links in path (probably symlink loop)."), /* 62 */ dkT("\"!\n\tInsufficient kernel memory."), /* 63 */ dkT("\"!\n\tToo many entries in parent directory."), /* 64 */ dkT("\"!\n\tFile server not available."), /* 65 */ dkT("\"!\n\tName too long."), /* 66 */ dkT("Failed to remove directory:\n\t\""), /* 67 */ dkT("\"!\n\tDirectory not empty."), /* 68 */ dkT("\"!\n\tInvalid path name."), /* 69 */ dkT("\"!\n\tWindows error code: "), /* 70 */ dkT(" (0x"), /* 71 */ dkT(")."), /* 72 */ dkT("\"!"), /* 73 */ dkT("\"!\n\tParent directory not found (device or server share)!"), /* 74 */ dkT("\"!\n\tBad network resource name (share name)!"), /* 75 */ dkT("\"!\n\tBad network resource name (server name)!"), /* 76 */ dkT("\n\tNo route to network destination available!"), /* 77 */ dkT("\"!"), /* 78 */ dkT("\n\tAttempt to read from outside file!"), /* 79 */ dkT("\"!\n\tError code: "), /* 80 */ dkT("."), /* 81 */ dkT("Options --help, --version, and --license are mutually exclusive!"), /* 82 */ dkT("Numeric overflow in size calculation!"), /* 83 */ dkT("Numeric overflow in size calculation!\n\t"), /* 84 */ dkT(" elements of "), /* 85 */ dkT(" bytes."), /* 86 */ dkT("Memory allocation failed! Invalid size(s) specified."), /* 87 */ dkT("Memory allocation failed! Invalid size(s) specified.\n\tNumber of elements: "), /* 88 */ dkT(", element size: "), /* 89 */ dkT("."), /* 90 */ dkT("Not enough memory! Allcation failed."), /* 91 */ dkT("Not enough memory! Allcation failed.\n\tNumber of elements: "), /* 92 */ dkT(", element size: "), /* 93 */ dkT("."), /* 94 */ dkT("Further file removal attempts failed in:\n\t\""), /* 95 */ dkT("\"!"), /* 96 */ dkT("Further subdirectory removal attempts failed in:\n\t\""), /* 97 */ dkT("\"!"), /* 98 */ dkT("File or directory name too long:\n\t\""), /* 99 */ dkT("\"!"), /* 100 */ dkT("Failed to expand file name:\n\t\""), /* 101 */ dkT("\"!"), /* 102 */ dkT("\"!\n\tNo function for directory traversal available!"), /* 103 */ dkT("\"!\n\tMemory allocation failed!"), /* 104 */ dkT("\"!\n\tFailed to open directory for traversal!"), /* 105 */ dkT("\"!\n\tDirectory or file name too large!"), /* 106 */ dkT("\"!\n\tMultiple matching files!"), /* 107 */ dkT("\"!\n\tNo matching file!"), /* 108 */ dkT("Failed to open file:\n\t\""), /* 109 */ dkT("\"!\n\tNot a regular file!"), /* 110 */ dkT("\"!\n\tPath contains symbolic links!"), /* 111 */ dkT("\"!\n\tPath is a symbolic link!"), /* 112 */ dkT("\"!\n\tSymbolic link owner is not target owner!"), /* 113 */ dkT("\"!\n\tSignal received!"), /* 114 */ dkT("\"!\n\tToo many open files in process!"), /* 115 */ dkT("\"!\n\tToo many open files on system!"), /* 116 */ dkT("\"!\n\tDevice for special file does not exist!"), /* 117 */ dkT("\"!\n\tFile size too large for off_t data type!"), /* 118 */ dkT("Read operation failed!"), /* 119 */ dkT("Read operation failed, error code:"), /* 120 */ dkT("."), /* 121 */ dkT("\n\tOperation would block!"), /* 122 */ dkT("\n\tBad file descriptor (bug)!"), /* 123 */ dkT("\n\tBuffer is outside usable address space (bug)!"), /* 124 */ dkT("\n\tSignal received!"), /* 125 */ dkT("\n\tFile descriptor attached to unsuitable object (bug)!"), /* 126 */ dkT("\n\tI/O error!"), /* 127 */ dkT("\n\tFile descriptor attachted to directory (bug)!"), /* 128 */ dkT("Write operation failed!"), /* 129 */ dkT("Write operation failed, error code:"), /* 130 */ dkT("."), /* 131 */ dkT("\n\tNo space left on device!"), /* 132 */ dkT("\n\tFile size would exceed limits!"), /* 133 */ dkT("\n\tNo reader attached to pipe or socket!"), /* 134 */ dkT("\n\tSocket not connected!"), /* 135 */ dkT("\n\tBuffer size outside supported range!"), /* 136 */ dkT("\n\tInsufficient system resources available!"), /* 137 */ dkT("\n\tNonexistent or incapable device!"), /* 138 */ dkT("\n\tInsufficient permissions!"), /* 139 */ dkT("\n\tUnexpected control part in normal-mode message!"), /* 140 */ dkT("\n\tConnection reset by peer!"), /* 141 */ dkT("\n\tTimed out!"), /* 142 */ dkT("\n\tInsufficient memory available!"), /* 143 */ dkT("\n\tFile descriptor is socket or FIFO!"), /* 144 */ dkT("Failed to open directory:\n\t\""), /* 145 */ dkT("\"!\n\tNo function found for directory traversal!"), /* 146 */ dkT("\"!\n\tNumeric overflow in size calculation!"), /* 147 */ dkT("\"!\n\tPath not found!"), /* 148 */ dkT("\"!\n\tDirectory does not exist!"), /* 149 */ dkT("Failed to obtain information about file/directory:\n\t\""), /* 150 */ dkT("\"!\n\tOne path component is not a directory."), /* 151 */ dkT("\"!\n\tCurrently used by another process."), /* 152 */ dkT("Not a directory:\n\t\""), /* 153 */ dkT("\"!"), /* 154 */ dkT("\" in \""), /* 155 */ dkT("Failed to change file buffering!"), /* 156 */ dkT("Failed to change buffering for file\n\""), /* 157 */ dkT("\"!"), /* 158 */ dkT("Neither setvbuf() nor setbuffer() function available!"), /* 159 */ dkT("Syntax error, expected line:\n\"name = width height [border-left border-right border-top border-bottom]\""), /* 160 */ dkT("Preference value found: \""), /* 161 */ dkT("\"=\""), /* 162 */ dkT("\"."), /* 163 */ dkT("Preference value too long: \""), /* 164 */ dkT("\"=\""), /* 165 */ dkT("\"!"), /* 166 */ dkT("Preference value not found: \""), /* 167 */ dkT("\"!"), NULL #line 594 "dk4applog.ctr" }; static const dkChar * const dk4app_def_msg_debug[] = { /* 0 */ dkT("Host name: "), /* 1 */ dkT("User name: "), /* 2 */ dkT("Home directory: "), /* 3 */ dkT("Language: "), /* 4 */ dkT("Region: "), /* 5 */ dkT("Encoding: "), /* 6 */ dkT("Encoding expected on standard input: "), /* 7 */ dkT("Encoding expected on files: "), /* 8 */ dkT("Program name: "), /* 9 */ dkT("Program group: "), /* 10 */ dkT("Directory etc: "), /* 11 */ dkT("Directory bin: "), /* 12 */ dkT("Directory share: "), /* 13 */ dkT("Directory lib: "), /* 14 */ dkT("Directory var: "), /* 15 */ dkT("Directory tmp: "), /* 16 */ dkT("Logging enabled: "), /* 17 */ dkT("Log file: "), /* 18 */ dkT("Log level to log on stderr: "), /* 19 */ dkT("Log level to log to file: "), /* 20 */ dkT("Log level to keep log file: "), /* 21 */ dkT("Data file search for \""), /* 22 */ dkT("\" failed."), /* 23 */ dkT("\" succeeded.\n\t"), /* 24 */ dkT("Configuration file search for \""), /* 25 */ dkT("Delete directory: "), /* 26 */ dkT("Delete file: "), /* 27 */ dkT("Delete file or directory: "), /* 28 */ dkT("Preference files:"), /* 29 */ dkT("UNUSED"), /* 30 */ dkT("+ "), /* 31 */ dkT("- "), /* 32 */ dkT("Search for data file \""), /* 33 */ dkT("Search for configuration file \""), /* 34 */ dkT("\" (compression allowed):"), /* 35 */ dkT("\" (no compression allowed):"), /* 36 */ dkT("Collecting paper size data."), /* 37 */ dkT("\" (gzip compression allowed):"), /* 38 */ dkT("\" (bzip2 compression allowed):"), /* 39 */ dkT("\" (gzip/bzip2 compression allowed):"), /* 40 */ dkT("String copy allocated: \""), /* 41 */ dkT("\"."), /* 42 */ dkT("Successfully converted to integer."), /* 43 */ dkT("Not an integer!"), /* 44 */ dkT("Successfully converted to unsigned integer."), /* 45 */ dkT("Not an unsigned integer!"), /* 46 */ dkT("Successfully converted to boolean."), /* 47 */ dkT("Not a boolean!"), /* 48 */ dkT("Successfully converted to size specification."), /* 49 */ dkT("Not a size specification!"), NULL #line 693 "dk4applog.ctr" }; /** Ensure the messages texts for the base log domain are loaded. @param app Application structure. @param logdom Log text domain. */ static void dk4app_log_load_base_texts(dk4_app_t *app) { #line 706 "dk4applog.ctr" if (NULL != app) { #line 707 "dk4applog.ctr" if ((NULL == app->msg_base) || (0 == app->sz_msg_base)) { #line 709 "dk4applog.ctr" app->sz_msg_base = dk4app_string_table_size(dk4app_def_msg_base); app->msg_base = dk4app_string_table( app, dkT("dk4base.str"), dk4app_def_msg_base ); } #if TRACE_DEBUG else { #line 716 "dk4applog.ctr" } #endif } else { #line 719 "dk4applog.ctr" } #line 720 "dk4applog.ctr" } /** Check whether there is at least one non-NULL pointer in array. CRT on Windows: Not used. @param msg Array to check. @param sz Size of array. @return 1 if any valid pointer was found, 0 otherwise. */ static int dk4app_log_any_non_null(const dkChar * const *msg, size_t sz) { size_t i; int back = 0; for (i = 0; ((i < sz) && (0 == back)); i++) { if (NULL != msg[i]) { back = 1; } } return back; } int dk4app_log_do(dk4_app_t const *app, int ll) { int back = 0; #line 749 "dk4applog.ctr" if (NULL != app) { #if (!(DK4_ON_WINDOWS && DK4_WIN_DENY_CRT)) if (0 != app->log_enabled) { if (app->ll_stderr >= ll) { back = 1; } if (app->ll_file >= ll) { back = 1; } } #endif } #line 762 "dk4applog.ctr" return back; } /** Log multi part message to one file. CRT on Windows: Required. @param app Application structure, may be NULL. @param priority Log priority. @param msg Pointer to message parts array. @param sz Number of message parts. @param outfile Output file @param showtime Flag: Show timestamp. @param timer Timestamp of previous log message if any. @param havetime Flag: Timer already contains a value. */ static void dk4app_log_msg_to_file( dk4_app_t const *app, int priority, const dkChar * const *msg, size_t sz, FILE *outfile, int showtime, dk4_time_t *timer, int *havetime ) { #if (!(DK4_ON_WINDOWS && DK4_WIN_DENY_CRT)) dkChar lnb[64]; dkChar buf[64]; size_t i; dk4_time_t ct; int res; dk4time_get(&ct); /* Print timestamp */ if ((0 != showtime) && ((0 == *havetime) || (ct != *timer))) { *havetime = 1; *timer = ct; if (0 != dk4time_as_text(buf, DK4_SIZEOF(buf,dkChar), &ct, NULL)) { dk4fputs(dkT("# "), outfile, NULL); dk4fputs(buf, outfile, NULL); dk4fputc(dkT('\n'), outfile, NULL); } } /* Print error position */ if (NULL != app->source_file_name) { dk4fputs(app->source_file_name, outfile, NULL); dk4fputc(dkT(':'), outfile, NULL); if ((dk4_um_t)0UL != app->source_file_line) { res = dk4ma_write_decimal_unsigned( lnb, DK4_SIZEOF(lnb,dkChar), app->source_file_line, 0, NULL ); if (0 != res) { dk4fputs(lnb, outfile, NULL); dk4fputc(dkT(':'), outfile, NULL); } } dk4fputc(dkT(' '), outfile, NULL); } /* Print message */ switch (priority) { case DK4_LL_PANIC: case DK4_LL_FATAL: case DK4_LL_ERROR: case DK4_LL_WARNING: { dk4fputs((app->msg_base)[priority], outfile, NULL); dk4fputs(dkT(": "), outfile, NULL); } break; } for (i = 0; i < sz; i++) { dk4fputs(msg[i], outfile, NULL); } dk4fputc(dkT('\n'), outfile, NULL); fflush(outfile); #endif } void dk4app_log_msg( dk4_app_t *app, int priority, const dkChar * const *msg, size_t sz ) { FILE *fipo; #line 855 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if (0 != dk4app_log_any_non_null(msg, sz)) { #if (!(DK4_ON_WINDOWS && DK4_WIN_DENY_CRT)) if (app->ll_stderr >= priority) { if (0 == app->have_stderr_init) { dk4fput_initialize_stderr(); app->have_stderr_init = 1; } dk4app_log_msg_to_file( app, priority, msg, sz, stderr, app->log_stderr_time, &(app->timer_stderr), &(app->have_stderr_time) ); } if (app->ll_file >= priority) { if (NULL != app->log_file_name) { #if VERSION_BEFORE_20160127 #else if (0 == app->have_file_opened) { (void)dk4app_mkdir_hierarchy(app->log_file_name, 0, NULL); } #endif fipo = dk4fopen( app->log_file_name, dk4app_log_kwnl[(0 != app->have_file_opened) ? 1 : 0], (DK4_FOPEN_SC_WR_SYMLINK_OWNER | DK4_FOPEN_SC_IS_REGULAR), NULL ); app->have_file_opened = 1; if (NULL != fipo) { dk4app_log_msg_to_file( app, priority, msg, sz, fipo, app->log_stderr_time, &(app->timer_file), &(app->have_file_time) ); fclose(fipo); } } } if (priority < app->ll_found) { app->ll_found = priority; } #endif } } } #line 902 "dk4applog.ctr" } void dk4app_log_1( dk4_app_t *app, const dkChar * const *msg, size_t sz_msg, int priority, size_t msgind ) { const dkChar *msgtext; #line 917 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if ((NULL != msg) && (0 < sz_msg) && (msgind < sz_msg)) { msgtext = msg[msgind]; dk4app_log_msg(app, priority, &msgtext, 1); } } } #line 927 "dk4applog.ctr" } void dk4app_log_2( dk4_app_t *app, const dkChar * const *msg, size_t sz_msg, int priority, size_t i1, const dkChar *t1 ) { const dkChar *msgtext[3]; #line 943 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if ((NULL != msg) && (0 < sz_msg) && (i1 < sz_msg)) { msgtext[0] = msg[i1]; msgtext[1] = t1; dk4app_log_msg(app, priority, msgtext, 2); } } } #line 954 "dk4applog.ctr" } void dk4app_log_3( dk4_app_t *app, const dkChar * const *msg, size_t sz_msg, int priority, size_t i1, size_t i2, const dkChar *t1 ) { const dkChar *msgtext[3]; #line 971 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if ((NULL != msg) && (0 < sz_msg) && (i1 < sz_msg) && (i2 < sz_msg)) { msgtext[0] = msg[i1]; msgtext[1] = t1; msgtext[2] = msg[i2]; dk4app_log_msg(app, priority, msgtext, 3); } } } #line 983 "dk4applog.ctr" } void dk4app_log_5( dk4_app_t *app, const dkChar * const *msg, size_t sz_msg, int priority, size_t i1, size_t i2, size_t i3, const dkChar *t1, const dkChar *t2 ) { const dkChar *msgtext[5]; #line 1002 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if ((NULL != msg) && (0 < sz_msg) && (i1 < sz_msg) && (i2 < sz_msg)) { msgtext[0] = msg[i1]; msgtext[1] = t1; msgtext[2] = msg[i2]; msgtext[3] = t2; msgtext[4] = msg[i3]; dk4app_log_msg(app, priority, msgtext, 5); } } } #line 1016 "dk4applog.ctr" } void dk4app_log_7( dk4_app_t *app, const dkChar * const *msg, size_t sz_msg, int priority, size_t i1, size_t i2, size_t i3, size_t i4, const dkChar *t1, const dkChar *t2, const dkChar *t3 ) { const dkChar *msgtext[7]; #line 1037 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); if ( (NULL != msg) && (0 < sz_msg) && (i1 < sz_msg) && (i2 < sz_msg) && (i3 < sz_msg) ) { msgtext[0] = msg[i1]; msgtext[1] = t1; msgtext[2] = msg[i2]; msgtext[3] = t2; msgtext[4] = msg[i3]; msgtext[5] = t3; msgtext[6] = msg[i4]; dk4app_log_msg(app, priority, msgtext, 7); } } } #line 1057 "dk4applog.ctr" } void dk4app_log_base1( dk4_app_t *app, int priority, size_t msgind ) { #line 1069 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); dk4app_log_1(app, app->msg_base, app->sz_msg_base, priority, msgind); } } #line 1076 "dk4applog.ctr" } void dk4app_log_base2( dk4_app_t *app, int priority, size_t i1, const dkChar *t1 ) { #line 1089 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); dk4app_log_2(app,app->msg_base,app->sz_msg_base,priority,i1,t1); } } #line 1096 "dk4applog.ctr" } void dk4app_log_base2c( dk4_app_t *app, int priority, size_t i1, size_t i2 ) { const dkChar *msgptr[2]; #line 1110 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { if ((app->sz_msg_base > i1) && (app->sz_msg_base > i2)) { dk4app_log_load_base_texts(app); msgptr[0] = (app->msg_base)[i1]; msgptr[1] = (app->msg_base)[i2]; dk4app_log_msg(app, priority, msgptr, 2); } } } #line 1121 "dk4applog.ctr" } void dk4app_log_base3( dk4_app_t *app, int priority, size_t i1, size_t i2, const dkChar *t1 ) { #line 1135 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); dk4app_log_3(app,app->msg_base,app->sz_msg_base,priority,i1,i2,t1); } } #line 1142 "dk4applog.ctr" } void dk4app_log_base5( dk4_app_t *app, int priority, size_t i1, size_t i2, size_t i3, const dkChar *t1, const dkChar *t2 ) { #line 1158 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); dk4app_log_5(app,app->msg_base,app->sz_msg_base,priority,i1,i2,i3,t1,t2); } } #line 1165 "dk4applog.ctr" } void dk4app_log_base7( dk4_app_t *app, int priority, size_t i1, size_t i2, size_t i3, size_t i4, const dkChar *t1, const dkChar *t2, const dkChar *t3 ) { #line 1183 "dk4applog.ctr" if (NULL != app) { if (0 != dk4app_log_do(app, priority)) { dk4app_log_load_base_texts(app); dk4app_log_7( app,app->msg_base,app->sz_msg_base,priority,i1,i2,i3,i4,t1,t2,t3 ); } } #line 1192 "dk4applog.ctr" } void dk4app_log_with_errno( dk4_app_t *app, int priority, size_t i1, size_t i2, size_t i3, size_t i4, size_t i5, const dkChar *t1, int errn ) { dkChar enb[64]; int res; #line 1212 "dk4applog.ctr" if (NULL != app) { res = dk4ma_write_decimal_signed( enb, DK4_SIZEOF(enb,dkChar), (dk4_im_t)errn, 0, NULL ); if (0 != res) { dk4app_log_base5(app, priority, i1, i2, i3, t1, enb); } else { dk4app_log_base3(app, priority, i4, i5, t1); } } #line 1223 "dk4applog.ctr" } const dkChar * dk4app_get_log_source_file(dk4_app_t const *app) { const dkChar *back = NULL; #line 1232 "dk4applog.ctr" if (NULL != app) { back = app->source_file_name; } #line 1236 "dk4applog.ctr" return back; } dk4_um_t dk4app_get_log_source_line(dk4_app_t const *app) { dk4_um_t back = (dk4_um_t)0UL; #line 1246 "dk4applog.ctr" if (NULL != app) { back = app->source_file_line; } #line 1250 "dk4applog.ctr" return back; } void dk4app_set_log_source_file(dk4_app_t *app, const dkChar *fn) { #line 1259 "dk4applog.ctr" if (NULL != app) { app->source_file_name = fn; } } void dk4app_set_log_source_line(dk4_app_t *app, dk4_um_t lineno) { #line 1270 "dk4applog.ctr" if (NULL != app) { app->source_file_line = lineno; } } const dkChar * const * dk4app_log_debug_texts(dk4_app_t *app, size_t *szptr) { const dkChar * const *back = NULL; #line 1282 "dk4applog.ctr" if (NULL != app) { #line 1283 "dk4applog.ctr" dk4app_log_load_base_texts(app); if ((NULL != app->msg_debug) && (0 < app->sz_msg_debug)) { back = app->msg_debug; #line 1286 "dk4applog.ctr" } else { #line 1287 "dk4applog.ctr" app->msg_debug = dk4app_string_table( app, dk4app_log_kwnl[2], dk4app_def_msg_debug ); app->sz_msg_debug = dk4app_string_table_size(app->msg_debug); back = app->msg_debug; } } else { #line 1294 "dk4applog.ctr" back = dk4app_def_msg_debug; } if (NULL != szptr) { *szptr = dk4app_string_table_size(dk4app_def_msg_debug); } #line 1300 "dk4applog.ctr" return back; } static void dk4app_log_two_strings_at_startup( dk4_app_t *app, const dkChar *title, const dkChar *value ) { const dkChar *msg[3]; #if DK4_USE_ASSERT assert(NULL != app); #endif msg[0] = title; msg[1] = value; if (NULL == value) { msg[1] = dk4app_log_kwnl[3]; } msg[2] = NULL; dk4app_log_msg(app, DK4_LL_DEBUG, msg, 2); } static void dk4app_log_startup_log_level( dk4_app_t *app, const dkChar *title, int ll ) { const dkChar *llstr = NULL; #if DK4_USE_ASSERT assert(NULL != app); #endif if ((DK4_LL_NONE <= ll) && (DK4_LL_IGNORE >= ll)) { llstr = (app->msg_base)[(size_t)ll]; } dk4app_log_two_strings_at_startup(app, title, llstr); } static void dk4app_log_startup_encoding( dk4_app_t *app, const dkChar *title, int enc, int isfileenc ) { const dkChar *encstr = NULL; #if DK4_USE_ASSERT assert(NULL != app); #endif if (0 != isfileenc) { switch (enc) { case DK4_FILE_ENCODING_PLAIN : { encstr = dk4app_log_kwnl[5]; } break; case DK4_FILE_ENCODING_WIN1252 : { encstr = dk4app_log_kwnl[6]; } break; case DK4_FILE_ENCODING_UTF8 : { encstr = dk4app_log_kwnl[7]; } break; case DK4_FILE_ENCODING_UTF16_LE : { encstr = dk4app_log_kwnl[9]; } break; case DK4_FILE_ENCODING_UTF16_BE : { encstr = dk4app_log_kwnl[10]; } break; case DK4_FILE_ENCODING_32_LE : { encstr = dk4app_log_kwnl[12]; } break; case DK4_FILE_ENCODING_32_BE : { encstr = dk4app_log_kwnl[13]; } break; } } else { switch (enc) { case DK4_ENCODING_PLAIN : { encstr = dk4app_log_kwnl[5]; } break; case DK4_ENCODING_WIN1252 : { encstr = dk4app_log_kwnl[6]; } break; case DK4_ENCODING_UTF8 : { encstr = dk4app_log_kwnl[7]; } break; case DK4_ENCODING_UTF16 : { encstr = dk4app_log_kwnl[8]; } break; case DK4_ENCODING_32 : { encstr = dk4app_log_kwnl[11]; } break; } } dk4app_log_two_strings_at_startup(app, title, encstr); } void dk4app_log_startup_debug(dk4_app_t *app) { dkChar fnb[DK4_MAX_PATH]; dk4_er_t er; const dkChar *msgtxt[3]; const dkChar * const *debmsg = NULL; size_t szdebmsg = 0; int res = 0; int pn = 0; #line 1420 "dk4applog.ctr" #if DK4_USE_ASSERT assert(NULL != app); #endif if (NULL != app) { if (0 != dk4app_log_do(app, DK4_LL_DEBUG)) { /* Obtain localized texts */ dk4app_log_load_base_texts(app); debmsg = dk4app_log_debug_texts(app, &szdebmsg); /* 0 Host name */ dk4app_log_two_strings_at_startup(app, debmsg[0], app->host_name); /* 1 User name */ dk4app_log_two_strings_at_startup(app, debmsg[1], app->user_name); /* 2 Home dir */ dk4app_log_two_strings_at_startup(app, debmsg[2], app->user_home); /* 3 Language */ dk4app_log_two_strings_at_startup(app, debmsg[3], app->language); /* 4 Region */ dk4app_log_two_strings_at_startup(app, debmsg[4], app->region); /* 5 Encoding */ dk4app_log_startup_encoding(app, debmsg[5], app->encoding, 0); /* 6 Encoding stdin */ dk4app_log_startup_encoding(app, debmsg[6], app->enc_in_std, 1); /* 7 Encoding files */ dk4app_log_startup_encoding(app, debmsg[7], app->enc_in_file, 1); /* 8 Program name */ dk4app_log_two_strings_at_startup(app, debmsg[8], app->prog_name); /* 9 Program group */ dk4app_log_two_strings_at_startup(app, debmsg[9], app->group_name); /* 10 etc */ dk4app_log_two_strings_at_startup(app, debmsg[10], app->dir_etc); /* 11 bin */ dk4app_log_two_strings_at_startup(app, debmsg[11], app->dir_bin); /* 12 share */ dk4app_log_two_strings_at_startup(app, debmsg[12], app->dir_share); /* 13 lib */ dk4app_log_two_strings_at_startup(app, debmsg[13], app->dir_lib); /* 14 var */ dk4app_log_two_strings_at_startup(app, debmsg[14], app->dir_var); /* 15 tmp */ dk4app_log_two_strings_at_startup(app, debmsg[15], app->dir_tmp); /* 17 Log file */ dk4app_log_two_strings_at_startup(app, debmsg[17], app->log_file_name); /* 16 Logging enabled */ dk4app_log_two_strings_at_startup( app, debmsg[16], dk4app_log_kwnl[(0 != app->log_enabled) ? 4 : 3] ); /* 18 Log level stderr */ dk4app_log_startup_log_level(app, debmsg[18], app->ll_stderr); /* 19 Log level file */ dk4app_log_startup_log_level(app, debmsg[19], app->ll_file); /* 20 Log level keep */ dk4app_log_startup_log_level(app, debmsg[20], app->ll_file_keep); /* Preferences files */ dk4app_log_1(app, debmsg, szdebmsg, DK4_LL_DEBUG, 28); for (pn = 0; (pn <= DK4_FS_CONF_MAX); pn++) { #if DK4_HAVE_COMPATDKTOOLS3 dk4error_init(&er); res = dk4fs_config_construct_compat_one( fnb, DK4_SIZEOF(fnb,dkChar), dk4app_log_kwnl[14], app->dir_share, app->dir_etc, app->user_home, app->prog_name, app->group_name, pn, 1, &er ); if (0 != res) { res = dk4fs_attempt_file_name(fnb, DK4_SIZEOF(fnb,dkChar), 1, NULL); if (0 != res) { msgtxt[0] = debmsg[30]; msgtxt[1] = fnb; dk4app_log_msg(app, DK4_LL_DEBUG, msgtxt, 2); } else { msgtxt[0] = debmsg[31]; msgtxt[1] = fnb; dk4app_log_msg(app, DK4_LL_DEBUG, msgtxt, 2); } } #endif dk4error_init(&er); res = dk4fs_config_construct_compat_one( fnb, DK4_SIZEOF(fnb,dkChar), dk4app_log_kwnl[15], app->dir_share, app->dir_etc, app->user_home, app->prog_name, app->group_name, pn, 0, &er ); if (0 != res) { res = dk4fs_attempt_file_name(fnb, DK4_SIZEOF(fnb,dkChar), 1, NULL); if (0 != res) { msgtxt[0] = debmsg[30]; msgtxt[1] = fnb; dk4app_log_msg(app, DK4_LL_DEBUG, msgtxt, 2); } else { msgtxt[0] = debmsg[31]; msgtxt[1] = fnb; dk4app_log_msg(app, DK4_LL_DEBUG, msgtxt, 2); } } } #if VERSION_BEFORE_2017_03_13 dk4app_log_1(app, debmsg, szdebmsg, DK4_LL_DEBUG, 29); #endif } } #line 1542 "dk4applog.ctr" }