1*29619d2aSchristos /* $NetBSD: log.c,v 1.1.1.1 2016/01/14 00:11:28 christos Exp $ */
2*29619d2aSchristos
3*29619d2aSchristos /* Log file output.
4*29619d2aSchristos Copyright (C) 2003 Free Software Foundation, Inc.
5*29619d2aSchristos
6*29619d2aSchristos This program is free software; you can redistribute it and/or modify it
7*29619d2aSchristos under the terms of the GNU Library General Public License as published
8*29619d2aSchristos by the Free Software Foundation; either version 2, or (at your option)
9*29619d2aSchristos any later version.
10*29619d2aSchristos
11*29619d2aSchristos This program is distributed in the hope that it will be useful,
12*29619d2aSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of
13*29619d2aSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14*29619d2aSchristos Library General Public License for more details.
15*29619d2aSchristos
16*29619d2aSchristos You should have received a copy of the GNU Library General Public
17*29619d2aSchristos License along with this program; if not, write to the Free Software
18*29619d2aSchristos Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19*29619d2aSchristos USA. */
20*29619d2aSchristos
21*29619d2aSchristos /* Written by Bruno Haible <bruno@clisp.org>. */
22*29619d2aSchristos
23*29619d2aSchristos #ifdef HAVE_CONFIG_H
24*29619d2aSchristos # include <config.h>
25*29619d2aSchristos #endif
26*29619d2aSchristos
27*29619d2aSchristos #include <stdio.h>
28*29619d2aSchristos #include <stdlib.h>
29*29619d2aSchristos #include <string.h>
30*29619d2aSchristos
31*29619d2aSchristos /* Print an ASCII string with quotes and escape sequences where needed. */
32*29619d2aSchristos static void
print_escaped(FILE * stream,const char * str)33*29619d2aSchristos print_escaped (FILE *stream, const char *str)
34*29619d2aSchristos {
35*29619d2aSchristos putc ('"', stream);
36*29619d2aSchristos for (; *str != '\0'; str++)
37*29619d2aSchristos if (*str == '\n')
38*29619d2aSchristos {
39*29619d2aSchristos fputs ("\\n\"", stream);
40*29619d2aSchristos if (str[1] == '\0')
41*29619d2aSchristos return;
42*29619d2aSchristos fputs ("\n\"", stream);
43*29619d2aSchristos }
44*29619d2aSchristos else
45*29619d2aSchristos {
46*29619d2aSchristos if (*str == '"' || *str == '\\')
47*29619d2aSchristos putc ('\\', stream);
48*29619d2aSchristos putc (*str, stream);
49*29619d2aSchristos }
50*29619d2aSchristos putc ('"', stream);
51*29619d2aSchristos }
52*29619d2aSchristos
53*29619d2aSchristos /* Add to the log file an entry denoting a failed translation. */
54*29619d2aSchristos void
_nl_log_untranslated(const char * logfilename,const char * domainname,const char * msgid1,const char * msgid2,int plural)55*29619d2aSchristos _nl_log_untranslated (const char *logfilename, const char *domainname,
56*29619d2aSchristos const char *msgid1, const char *msgid2, int plural)
57*29619d2aSchristos {
58*29619d2aSchristos static char *last_logfilename = NULL;
59*29619d2aSchristos static FILE *last_logfile = NULL;
60*29619d2aSchristos FILE *logfile;
61*29619d2aSchristos
62*29619d2aSchristos /* Can we reuse the last opened logfile? */
63*29619d2aSchristos if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
64*29619d2aSchristos {
65*29619d2aSchristos /* Close the last used logfile. */
66*29619d2aSchristos if (last_logfilename != NULL)
67*29619d2aSchristos {
68*29619d2aSchristos if (last_logfile != NULL)
69*29619d2aSchristos {
70*29619d2aSchristos fclose (last_logfile);
71*29619d2aSchristos last_logfile = NULL;
72*29619d2aSchristos }
73*29619d2aSchristos free (last_logfilename);
74*29619d2aSchristos last_logfilename = NULL;
75*29619d2aSchristos }
76*29619d2aSchristos /* Open the logfile. */
77*29619d2aSchristos last_logfilename = (char *) malloc (strlen (logfilename) + 1);
78*29619d2aSchristos if (last_logfilename == NULL)
79*29619d2aSchristos return;
80*29619d2aSchristos strcpy (last_logfilename, logfilename);
81*29619d2aSchristos last_logfile = fopen (logfilename, "a");
82*29619d2aSchristos if (last_logfile == NULL)
83*29619d2aSchristos return;
84*29619d2aSchristos }
85*29619d2aSchristos logfile = last_logfile;
86*29619d2aSchristos
87*29619d2aSchristos fprintf (logfile, "domain ");
88*29619d2aSchristos print_escaped (logfile, domainname);
89*29619d2aSchristos fprintf (logfile, "\nmsgid ");
90*29619d2aSchristos print_escaped (logfile, msgid1);
91*29619d2aSchristos if (plural)
92*29619d2aSchristos {
93*29619d2aSchristos fprintf (logfile, "\nmsgid_plural ");
94*29619d2aSchristos print_escaped (logfile, msgid2);
95*29619d2aSchristos fprintf (logfile, "\nmsgstr[0] \"\"\n");
96*29619d2aSchristos }
97*29619d2aSchristos else
98*29619d2aSchristos fprintf (logfile, "\nmsgstr \"\"\n");
99*29619d2aSchristos putc ('\n', logfile);
100*29619d2aSchristos }
101