From 447603b54aaea470ed1dcdb5c52d0be1d7801f84 Mon Sep 17 00:00:00 2001 From: Gary Mills Date: Fri, 6 May 2011 07:32:53 -0700 Subject: [PATCH] 844 m4 should say something useful about why an include()d file can't be opened Reviewed by: Richard Lowe Reviewed by: Garrett D'Amore Approved by: Garrett D'Amore --- usr/src/cmd/sgs/m4/common/m4.c | 18 +++++++++++++++++- usr/src/cmd/sgs/m4/common/m4.h | 6 ++++++ usr/src/cmd/sgs/m4/common/m4macs.c | 10 ++++++---- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/usr/src/cmd/sgs/m4/common/m4.c b/usr/src/cmd/sgs/m4/common/m4.c index 706dbebb7f..e96fb17c26 100644 --- a/usr/src/cmd/sgs/m4/common/m4.c +++ b/usr/src/cmd/sgs/m4/common/m4.c @@ -23,6 +23,10 @@ * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright (c) 2011 Gary Mills + */ + /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ @@ -805,7 +809,8 @@ xfopen(char *name, char *mode) FILE *fp; if ((fp = fopen(name, mode)) == NULL) - error(gettext("can't open file")); + errorf(gettext("cannot open file: %s"), + strerror(errno)); return (fp); } @@ -865,6 +870,17 @@ xcalloc(size_t nbr, size_t size) return (ptr); } +/* Typical format: "cannot open file: %s" */ +/* PRINTFLIKE1 */ +void +errorf(char *str, char *serr) +{ + char buf[500]; + + (void) snprintf(buf, sizeof (buf), str, serr); + error(buf); +} + /* PRINTFLIKE1 */ void error2(char *str, int num) diff --git a/usr/src/cmd/sgs/m4/common/m4.h b/usr/src/cmd/sgs/m4/common/m4.h index e04b2146b3..279448732e 100644 --- a/usr/src/cmd/sgs/m4/common/m4.h +++ b/usr/src/cmd/sgs/m4/common/m4.h @@ -26,6 +26,10 @@ * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright (c) 2011 Gary Mills + */ + #ifndef _M4_H #define _M4_H @@ -33,6 +37,7 @@ #include #include #include +#include #include #include @@ -161,6 +166,7 @@ extern void error(char *); extern int min(int, int); extern void putbak(wchar_t); extern void stkchr(wchar_t); +extern void errorf(char *, char *); extern void error2(char *, int); extern wchar_t *wstrdup(wchar_t *); diff --git a/usr/src/cmd/sgs/m4/common/m4macs.c b/usr/src/cmd/sgs/m4/common/m4macs.c index 70e13d77d3..4d86d7c449 100644 --- a/usr/src/cmd/sgs/m4/common/m4macs.c +++ b/usr/src/cmd/sgs/m4/common/m4macs.c @@ -24,11 +24,13 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2011 Gary Mills + */ + /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -297,8 +299,8 @@ incl(wchar_t **ap, int c, int noisy) if ((ifile[++ifx] = fopen(wstr2str(ap[1], 0), "r")) == NULL) { --ifx; if (noisy) - error(gettext( - "can't open file")); + errorf(gettext("cannot open file: %s"), + strerror(errno)); } else { ipstk[ifx] = ipflr = ip; setfname(wstr2str(ap[1], 0)); -- 2.11.4.GIT