Routino SVN Repository Browser

Check out the latest version of Routino: svn co http://routino.org/svn/trunk routino

ViewVC logotype

Annotation of /branches/destination-access/src/logerror.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1411 - (hide annotations) (download) (as text)
Sat Jun 22 16:39:55 2013 UTC (11 years, 8 months ago) by amb
Original Path: trunk/src/logerror.c
File MIME type: text/x-csrc
File size: 4698 byte(s)
Fix for closing binary error file that only shows up after the recent file
function changes.

1 amb 1313 /***************************************
2     Error logging functions
3    
4     Part of the Routino routing software.
5     ******************/ /******************
6     This file Copyright 2013 Andrew M. Bishop
7    
8     This program is free software: you can redistribute it and/or modify
9     it under the terms of the GNU Affero General Public License as published by
10     the Free Software Foundation, either version 3 of the License, or
11     (at your option) any later version.
12    
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16     GNU Affero General Public License for more details.
17    
18     You should have received a copy of the GNU Affero General Public License
19     along with this program. If not, see <http://www.gnu.org/licenses/>.
20     ***************************************/
21    
22    
23     #include <stdio.h>
24     #include <stdarg.h>
25     #include <errno.h>
26    
27     #include "typesx.h"
28    
29     #include "files.h"
30 amb 1319 #include "logging.h"
31 amb 1313
32    
33 amb 1317 /* Global variables */
34 amb 1313
35     /*+ The name of the error log file. +*/
36 amb 1317 char *errorlogfilename=NULL;
37 amb 1313
38 amb 1317 /*+ The name of the binary error log file. +*/
39     char *errorbinfilename=NULL;
40    
41    
42     /* Local variables */
43    
44 amb 1313 /*+ The file handle for the error log file. +*/
45     static FILE *errorlogfile=NULL;
46    
47     /*+ The file descriptor for the binary error log file. +*/
48     static int errorbinfile=-1;
49    
50     /*+ The offset of the error message in the error log file. +*/
51     static off_t errorfileoffset=0;
52    
53    
54     /*++++++++++++++++++++++++++++++++++++++
55     Create the error log file.
56    
57     const char *filename The name of the file to create.
58    
59     int append The option to append to an existing file.
60    
61     int bin The option to enable a binary log file.
62     ++++++++++++++++++++++++++++++++++++++*/
63    
64     void open_errorlog(const char *filename,int append,int bin)
65     {
66     /* Text log file */
67    
68     errorlogfilename=(char*)malloc(strlen(filename)+8);
69    
70     strcpy(errorlogfilename,filename);
71    
72     errorlogfile=fopen(errorlogfilename,append?"a":"w");
73    
74     if(!errorlogfile)
75     {
76     fprintf(stderr,"Cannot open file '%s' for writing [%s].\n",errorlogfilename,strerror(errno));
77     exit(EXIT_FAILURE);
78     }
79    
80     /* Binary log file */
81    
82     if(bin)
83     {
84     errorbinfilename=(char*)malloc(strlen(filename)+8);
85    
86     sprintf(errorbinfilename,"%s.tmp",filename);
87    
88     errorfileoffset=0;
89    
90     if(append)
91     {
92     if(ExistsFile(filename))
93     errorfileoffset=SizeFile(filename);
94    
95 amb 1408 errorbinfile=OpenFileBufferedAppend(errorbinfilename);
96 amb 1313 }
97     else
98 amb 1408 errorbinfile=OpenFileBufferedNew(errorbinfilename);
99 amb 1313 }
100     else
101     errorbinfile=-1;
102     }
103    
104    
105     /*++++++++++++++++++++++++++++++++++++++
106     Close the error log file.
107     ++++++++++++++++++++++++++++++++++++++*/
108    
109     void close_errorlog(void)
110     {
111     if(errorlogfile)
112     {
113     fclose(errorlogfile);
114    
115 amb 1411 if(errorbinfile!=-1)
116     CloseFileBuffered(errorbinfile);
117 amb 1313 }
118     }
119    
120    
121     /*++++++++++++++++++++++++++++++++++++++
122     Log a message to the error log file.
123    
124     const char *format The format string.
125    
126     ... The other arguments.
127     ++++++++++++++++++++++++++++++++++++++*/
128    
129     void logerror(const char *format, ...)
130     {
131     va_list ap;
132    
133     if(!errorlogfile)
134     return;
135    
136     va_start(ap,format);
137    
138     errorfileoffset+=vfprintf(errorlogfile,format,ap);
139    
140     va_end(ap);
141     }
142    
143    
144     /*++++++++++++++++++++++++++++++++++++++
145     Store the node information in the binary log file for this message.
146    
147     node_t logerror_node Returns the node identifier.
148    
149     node_t The node identifier.
150     ++++++++++++++++++++++++++++++++++++++*/
151    
152     node_t logerror_node(node_t id)
153     {
154     if(errorbinfile!=-1)
155     {
156     ErrorLogObject error;
157    
158 amb 1395 error.id=id;
159     error.type='N';
160 amb 1313
161     error.offset=errorfileoffset;
162    
163 amb 1408 WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject));
164 amb 1313 }
165    
166     return(id);
167     }
168    
169    
170     /*++++++++++++++++++++++++++++++++++++++
171     Store the way information in the binary log file for this message.
172    
173     way_t logerror_way Returns the way identifier.
174    
175     way_t The way identifier.
176     ++++++++++++++++++++++++++++++++++++++*/
177    
178     way_t logerror_way(way_t id)
179     {
180     if(errorbinfile!=-1)
181     {
182     ErrorLogObject error;
183    
184 amb 1395 error.id=id;
185     error.type='W';
186 amb 1313
187     error.offset=errorfileoffset;
188    
189 amb 1408 WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject));
190 amb 1313 }
191    
192     return(id);
193     }
194    
195    
196     /*++++++++++++++++++++++++++++++++++++++
197     Store the relation information in the binary log file for this message.
198    
199     relation_t logerror_relation Returns the relation identifier.
200    
201     relation_t The relation identifier.
202     ++++++++++++++++++++++++++++++++++++++*/
203    
204     relation_t logerror_relation(relation_t id)
205     {
206     if(errorbinfile!=-1)
207     {
208     ErrorLogObject error;
209    
210 amb 1395 error.id=id;
211     error.type='R';
212 amb 1313
213     error.offset=errorfileoffset;
214    
215 amb 1408 WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject));
216 amb 1313 }
217    
218     return(id);
219     }