diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c index b7e7edd3736f200e5b6cce1232c6972577b490b6..5bc75faaec7c92a1bd7d431f7fa0efc348ecf3e1 100644 --- a/src/backend/commands/define.c +++ b/src/backend/commands/define.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.41 2000/04/13 11:51:07 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.42 2000/05/12 18:51:59 momjian Exp $ * * DESCRIPTION * The "DefineFoo" routines take the parse tree and pick out the @@ -35,6 +35,8 @@ */ #include <ctype.h> #include <math.h> +#include <sys/stat.h> + #include "postgres.h" @@ -180,6 +182,8 @@ static void interpret_AS_clause(const char *languageName, const List *as, char **prosrc_str_p, char **probin_str_p) { + struct stat stat_buf; + Assert(as != NIL); if (strcmp(languageName, "C") == 0) @@ -187,9 +191,15 @@ interpret_AS_clause(const char *languageName, const List *as, /* * For "C" language, store the file name in probin and, when - * given, the link symbol name in prosrc. + * given, the link symbol name in prosrc. But first, stat the + * file to make sure it's there! */ + + if (stat(strVal(lfirst(as)), &stat_buf) == -1) + elog(ERROR, "stat failed on file '%s': %m", strVal(lfirst(as))); + *probin_str_p = strVal(lfirst(as)); + if (lnext(as) == NULL) *prosrc_str_p = "-"; else