Imported Upstream version 1.7.1
[platform/upstream/edje.git] / src / bin / epp / cpperror.c
1 /* Default error handlers for CPP Library.
2  * Copyright (C) 1986, 87, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
3  * Written by Per Bothner, 1994.
4  * Based on CCCP program by by Paul Rubin, June 1986
5  * Adapted to ANSI C, Richard Stallman, Jan 1987
6  * Copyright (C) 2003-2011 Kim Woelders
7  * 
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation; either version 2, or (at your option) any
11  * 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 General Public License for more details.
17  * 
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  * 
22  * In other words, you are welcome to use, share and improve this program.
23  * You are forbidden to forbid anyone else to use, share and improve
24  * what you give them.   Help stamp out software-hoarding!  */
25
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29
30 #include <stdio.h>
31 #include <stdlib.h>
32
33 #include "cpplib.h"
34
35 /* Print the file names and line numbers of the #include
36  * commands which led to the current file.  */
37
38 void
39 cpp_print_containing_files(cpp_reader * pfile)
40 {
41    cpp_buffer         *ip;
42    int                 first = 1;
43
44    /* If stack of files hasn't changed since we last printed
45     * this info, don't repeat it.  */
46    if (pfile->input_stack_listing_current)
47       return;
48
49    ip = cpp_file_buffer(pfile);
50
51    /* Give up if we don't find a source file.  */
52    if (!ip)
53       return;
54
55    /* Find the other, outer source files.  */
56    while ((ip = CPP_PREV_BUFFER(ip)), ip != CPP_NULL_BUFFER(pfile))
57      {
58         long                line, col;
59
60         cpp_buf_line_and_col(ip, &line, &col);
61         if (ip->fname)
62           {
63              if (first)
64                {
65                   first = 0;
66                   fprintf(stderr, "In file included");
67                }
68              else
69                 fprintf(stderr, ",\n                ");
70           }
71      }
72    if (!first)
73       fprintf(stderr, ":\n");
74
75    /* Record we have printed the status as of this time.  */
76    pfile->input_stack_listing_current = 1;
77 }
78
79 void
80 cpp_file_line_for_message(cpp_reader * pfile __UNUSED__, const char *filename,
81                           int line, int column)
82 {
83    if (column > 0)
84      {
85         fprintf(stderr, "%s:%d:%d: ", filename, line, column);
86      }
87    else
88      {
89         fprintf(stderr, "%s:%d: ", filename, line);
90      }
91 }
92
93 /* IS_ERROR is 1 for error, 0 for warning */
94 void
95 cpp_message_v(cpp_reader * pfile, int is_error, const char *msg, va_list args)
96 {
97    if (is_error)
98       pfile->errors++;
99    else
100       fprintf(stderr, "warning: ");
101    vfprintf(stderr, msg, args);
102    fprintf(stderr, "\n");
103 }
104
105 void
106 cpp_message(cpp_reader * pfile, int is_error, const char *msg, ...)
107 {
108    va_list             args;
109
110    va_start(args, msg);
111
112    cpp_message_v(pfile, is_error, msg, args);
113
114    va_end(args);
115 }
116
117 static void
118 cpp_fatal_v(const char *msg, va_list args)
119 {
120    fprintf(stderr, "%s: ", progname);
121    vfprintf(stderr, msg, args);
122    fprintf(stderr, "\n");
123    exit(FATAL_EXIT_CODE);
124 }
125
126 void
127 cpp_fatal(const char *msg, ...)
128 {
129    va_list             args;
130
131    va_start(args, msg);
132
133    cpp_fatal_v(msg, args);
134
135    va_end(args);
136 }
137
138 void
139 cpp_pfatal_with_name(cpp_reader * pfile, const char *name)
140 {
141    cpp_perror_with_name(pfile, name);
142 #ifdef VMS
143    exit(vaxc$errno);
144 #else
145    exit(FATAL_EXIT_CODE);
146 #endif
147 }