* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include <stdio.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
#include "gmqcc.h"
/*
lex_addch(ch, file);
while ((ch = lex_getch(file)) != '*') {
if (ch == EOF)
- return error(ERROR_LEX, "malformatted comment at line", "");
+ return error(file, ERROR_LEX, "malformatted comment");
else
lex_addch(ch, file);
}
* recrusion.
*/
struct lex_file *lex_include(struct lex_file *lex, char *file) {
- char *find = (char*)file;
- /*
- * strip for "" (quotes) .. they might be part of the current
- * thing. Or possibly not.
- */
- if (*find == '"') {
- find++;
- file++;
- while (*find != '"' && *find != '\0')
- find++;
-
- /* strip end "" (quotes) .. if they're actually there */
- if (*find != '\0')
- *find = '\0';
- }
-
- /*
- * Dissallow recrusive include: this could easily cause some breakage
- * and instant OOM.
- */
+ util_strrq(file);
if (strncmp(lex->name, file, strlen(lex->name)) == 0) {
- error(ERROR_LEX, "%s:%d Source file cannot include itself\n", lex->name, lex->line-1);
+ error(lex, ERROR_LEX, "Source file cannot include itself\n");
exit (-1);
}
FILE *fp = fopen(file, "r");
if (!fp) {
- error(ERROR_LEX, "%s:%d Include file `%s` doesn't exist\n", lex->name, lex->line, file);
+ error(lex, ERROR_LEX, "Include file `%s` doesn't exist\n", file);
exit (-1);
}
- /* must free strdup */
- file --;
- mem_d (file);
-
return lex_open(fp);
}