xref: /netbsd-src/external/gpl2/texinfo/dist/intl/log.c (revision 29619d2afe564e54d657b83e5a3ae89584f83720)
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