119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Log file output.
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Copyright (C) 2003 Free Software Foundation, Inc.
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   This program is free software; you can redistribute it and/or modify it
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   under the terms of the GNU Library General Public License as published
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   by the Free Software Foundation; either version 2, or (at your option)
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   any later version.
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   This program is distributed in the hope that it will be useful,
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Library General Public License for more details.
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   You should have received a copy of the GNU Library General Public
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   License along with this program; if not, write to the Free Software
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   USA.  */
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Written by Bruno Haible <bruno@clisp.org>.  */
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_CONFIG_H
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project# include <config.h>
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h>
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h>
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Print an ASCII string with quotes and escape sequences where needed.  */
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstatic void
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectprint_escaped (FILE *stream, const char *str)
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  putc ('"', stream);
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  for (; *str != '\0'; str++)
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    if (*str == '\n')
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      {
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fputs ("\\n\"", stream);
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (str[1] == '\0')
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  return;
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	fputs ("\n\"", stream);
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      }
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    else
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      {
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (*str == '"' || *str == '\\')
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  putc ('\\', stream);
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	putc (*str, stream);
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      }
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  putc ('"', stream);
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Add to the log file an entry denoting a failed translation.  */
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project_nl_log_untranslated (const char *logfilename, const char *domainname,
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		      const char *msgid1, const char *msgid2, int plural)
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  static char *last_logfilename = NULL;
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  static FILE *last_logfile = NULL;
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  FILE *logfile;
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  /* Can we reuse the last opened logfile?  */
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    {
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      /* Close the last used logfile.  */
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      if (last_logfilename != NULL)
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	{
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  if (last_logfile != NULL)
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    {
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	      fclose (last_logfile);
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	      last_logfile = NULL;
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    }
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  free (last_logfilename);
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  last_logfilename = NULL;
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      /* Open the logfile.  */
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      last_logfilename = (char *) malloc (strlen (logfilename) + 1);
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      if (last_logfilename == NULL)
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return;
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      strcpy (last_logfilename, logfilename);
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      last_logfile = fopen (logfilename, "a");
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      if (last_logfile == NULL)
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	return;
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    }
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  logfile = last_logfile;
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  fprintf (logfile, "domain ");
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  print_escaped (logfile, domainname);
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  fprintf (logfile, "\nmsgid ");
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  print_escaped (logfile, msgid1);
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  if (plural)
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    {
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      fprintf (logfile, "\nmsgid_plural ");
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      print_escaped (logfile, msgid2);
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project      fprintf (logfile, "\nmsgstr[0] \"\"\n");
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    }
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  else
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    fprintf (logfile, "\nmsgstr \"\"\n");
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  putc ('\n', logfile);
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
99