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