1238106Sdes/* Log file output.
2238106Sdes   Copyright (C) 2003 Free Software Foundation, Inc.
3238106Sdes
4238106Sdes   This program is free software; you can redistribute it and/or modify it
5238106Sdes   under the terms of the GNU Library General Public License as published
6238106Sdes   by the Free Software Foundation; either version 2, or (at your option)
7238106Sdes   any later version.
8238106Sdes
9238106Sdes   This program is distributed in the hope that it will be useful,
10238106Sdes   but WITHOUT ANY WARRANTY; without even the implied warranty of
11238106Sdes   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12238106Sdes   Library General Public License for more details.
13238106Sdes
14238106Sdes   You should have received a copy of the GNU Library General Public
15238106Sdes   License along with this program; if not, write to the Free Software
16238106Sdes   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
17238106Sdes   USA.  */
18238106Sdes
19238106Sdes/* Written by Bruno Haible <bruno@clisp.org>.  */
20238106Sdes
21238106Sdes#ifdef HAVE_CONFIG_H
22238106Sdes# include <config.h>
23238106Sdes#endif
24269257Sdes
25269257Sdes#include <stdio.h>
26269257Sdes#include <stdlib.h>
27269257Sdes#include <string.h>
28269257Sdes
29269257Sdes/* Print an ASCII string with quotes and escape sequences where needed.  */
30269257Sdesstatic void
31269257Sdesprint_escaped (stream, str)
32269257Sdes     FILE *stream;
33269257Sdes     const char *str;
34238106Sdes{
35238106Sdes  putc ('"', stream);
36238106Sdes  for (; *str != '\0'; str++)
37238106Sdes    if (*str == '\n')
38238106Sdes      {
39238106Sdes	fputs ("\\n\"", stream);
40238106Sdes	if (str[1] == '\0')
41238106Sdes	  return;
42238106Sdes	fputs ("\n\"", stream);
43269257Sdes      }
44238106Sdes    else
45238106Sdes      {
46238106Sdes	if (*str == '"' || *str == '\\')
47238106Sdes	  putc ('\\', stream);
48238106Sdes	putc (*str, stream);
49238106Sdes      }
50238106Sdes  putc ('"', stream);
51238106Sdes}
52238106Sdes
53238106Sdes/* Add to the log file an entry denoting a failed translation.  */
54238106Sdesvoid
55238106Sdes_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural)
56238106Sdes     const char *logfilename;
57238106Sdes     const char *domainname;
58238106Sdes     const char *msgid1;
59269257Sdes     const char *msgid2;
60269257Sdes     int plural;
61269257Sdes{
62238106Sdes  static char *last_logfilename = NULL;
63238106Sdes  static FILE *last_logfile = NULL;
64238106Sdes  FILE *logfile;
65269257Sdes
66238106Sdes  /* Can we reuse the last opened logfile?  */
67269257Sdes  if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
68269257Sdes    {
69238106Sdes      /* Close the last used logfile.  */
70238106Sdes      if (last_logfilename != NULL)
71269257Sdes	{
72238106Sdes	  if (last_logfile != NULL)
73238106Sdes	    {
74238106Sdes	      fclose (last_logfile);
75238106Sdes	      last_logfile = NULL;
76238106Sdes	    }
77269257Sdes	  free (last_logfilename);
78238106Sdes	  last_logfilename = NULL;
79238106Sdes	}
80238106Sdes      /* Open the logfile.  */
81238106Sdes      last_logfilename = (char *) malloc (strlen (logfilename) + 1);
82238106Sdes      if (last_logfilename == NULL)
83238106Sdes	return;
84238106Sdes      strcpy (last_logfilename, logfilename);
85269257Sdes      last_logfile = fopen (logfilename, "a");
86238106Sdes      if (last_logfile == NULL)
87269257Sdes	return;
88238106Sdes    }
89238106Sdes  logfile = last_logfile;
90238106Sdes
91238106Sdes  fprintf (logfile, "domain ");
92269257Sdes  print_escaped (logfile, domainname);
93269257Sdes  fprintf (logfile, "\nmsgid ");
94238106Sdes  print_escaped (logfile, msgid1);
95238106Sdes  if (plural)
96238106Sdes    {
97238106Sdes      fprintf (logfile, "\nmsgid_plural ");
98238106Sdes      print_escaped (logfile, msgid2);
99238106Sdes      fprintf (logfile, "\nmsgstr[0] \"\"\n");
100238106Sdes    }
101269257Sdes  else
102238106Sdes    fprintf (logfile, "\nmsgstr \"\"\n");
103238106Sdes  putc ('\n', logfile);
104238106Sdes}
105238106Sdes