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