diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4applog.c |
Initial commit
Diffstat (limited to 'support/dktools/dk4applog.c')
-rw-r--r-- | support/dktools/dk4applog.c | 1666 |
1 files changed, 1666 insertions, 0 deletions
diff --git a/support/dktools/dk4applog.c b/support/dktools/dk4applog.c new file mode 100644 index 0000000000..c066252d0e --- /dev/null +++ b/support/dktools/dk4applog.c @@ -0,0 +1,1666 @@ +/* + WARNING: This file was generated by dkct. + 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 +*/ + +/* +Copyright (C) 2015-2017, Dirk Krause + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above opyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @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 + + + + + +#line 70 "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 109 "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 574 "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 673 "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 686 "dk4applog.ctr" + if (NULL != app) { + +#line 687 "dk4applog.ctr" + if ((NULL == app->msg_base) || (0 == app->sz_msg_base)) { + + +#line 689 "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 + ); + } else { + +#line 694 "dk4applog.ctr" + } + } else { + +#line 696 "dk4applog.ctr" + } + +#line 697 "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 *app, int ll) +{ + int back = 0; + 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 + } + 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 *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; + + 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 + } + } + } +} + + + +void +dk4app_log_1( + dk4_app_t *app, + const dkChar * const *msg, + size_t sz_msg, + int priority, + size_t msgind +) +{ + const dkChar *msgtext; + 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); + } + } + } +} + + + +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]; + 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); + } + } + } +} + + + +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]; + 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); + } + } + } +} + + + +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]; + 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); + } + } + } +} + + + +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]; + 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); + } + } + } +} + + + +void +dk4app_log_base1( + dk4_app_t *app, + int priority, + size_t msgind +) +{ + 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); + } + } +} + + + +void +dk4app_log_base2( + dk4_app_t *app, + int priority, + size_t i1, + const dkChar *t1 +) +{ + 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); + } + } +} + + + +void +dk4app_log_base2c( + dk4_app_t *app, + int priority, + size_t i1, + size_t i2 +) +{ + const dkChar *msgptr[2]; + 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); + } + } + } +} + + + +void +dk4app_log_base3( + dk4_app_t *app, + int priority, + size_t i1, + size_t i2, + const dkChar *t1 +) +{ + 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); + } + } +} + + + +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 +) +{ + 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); + } + } +} + + + +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 +) +{ + 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 + ); + } + } +} + + + +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; + 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); + } + } +} + + + +const dkChar * +dk4app_get_log_source_file(dk4_app_t *app) +{ + const dkChar *back = NULL; + if (NULL != app) { + back = app->source_file_name; + } + return back; +} + + + +dk4_um_t +dk4app_get_log_source_line(dk4_app_t *app) +{ + dk4_um_t back = (dk4_um_t)0UL; + if (NULL != app) { + back = app->source_file_line; + } + return back; +} + + + +void +dk4app_set_log_source_file(dk4_app_t *app, const dkChar *fn) +{ + if (NULL != app) { + app->source_file_name = fn; + } +} + + + +void +dk4app_set_log_source_line(dk4_app_t *app, dk4_um_t lineno) +{ + 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 1226 "dk4applog.ctr" + if (NULL != app) { + +#line 1227 "dk4applog.ctr" + dk4app_log_load_base_texts(app); + if ((NULL != app->msg_debug) && (0 < app->sz_msg_debug)) { + back = app->msg_debug; + +#line 1230 "dk4applog.ctr" + } else { + +#line 1231 "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 1238 "dk4applog.ctr" + back = dk4app_def_msg_debug; + } + if (NULL != szptr) { + *szptr = dk4app_string_table_size(dk4app_def_msg_debug); + } + + +#line 1244 "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]; + 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_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 (0 != isfileenc) { + switch (enc) { + case DK4_FILE_ENCODING_ASCII : { + encstr = dk4app_log_kwnl[5]; + } break; + case DK4_FILE_ENCODING_ANSI : { + 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_ASCII : { + encstr = dk4app_log_kwnl[5]; + } break; + case DK4_ENCODING_ANSI : { + 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 1355 "dk4applog.ctr" + 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 1474 "dk4applog.ctr" +} + |