summaryrefslogtreecommitdiffstats
path: root/contrib/gcclibs
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2014-04-02 06:17:57 +0000
committerdim <dim@FreeBSD.org>2014-04-02 06:17:57 +0000
commitcc435e800f19c25059603fd7b0a54d125f462bb1 (patch)
tree40af670d3aa1910cb4e53926b95764544a5d0f1d /contrib/gcclibs
parente28755359aef63078f347e74e5c4a18661c5fcd1 (diff)
downloadFreeBSD-src-cc435e800f19c25059603fd7b0a54d125f462bb1.zip
FreeBSD-src-cc435e800f19c25059603fd7b0a54d125f462bb1.tar.gz
MFC r263775:
Avoid "cc1: warning: is shorter than expected" when using GNU cpp in combination with dtrace scripts, which have "#!/usr/sbin/dtrace -Cs" shebang lines. This is because dtrace positions the file pointer after the shebang line, before passing the file to GNU cpp. To fix the warning, adjust the size downwards by the current position, after a bit of sanity checking. Suggested by: avg
Diffstat (limited to 'contrib/gcclibs')
-rw-r--r--contrib/gcclibs/libcpp/files.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/contrib/gcclibs/libcpp/files.c b/contrib/gcclibs/libcpp/files.c
index 0e9f977..366d30a 100644
--- a/contrib/gcclibs/libcpp/files.c
+++ b/contrib/gcclibs/libcpp/files.c
@@ -546,6 +546,7 @@ static bool
read_file_guts (cpp_reader *pfile, _cpp_file *file)
{
ssize_t size, total, count;
+ off_t offset;
uchar *buf;
bool regular;
@@ -573,6 +574,21 @@ read_file_guts (cpp_reader *pfile, _cpp_file *file)
}
size = file->st.st_size;
+
+ if ((offset = lseek(file->fd, 0, SEEK_CUR)) < 0)
+ {
+ cpp_error (pfile, CPP_DL_ERROR, "%s has no current position",
+ file->path);
+ return false;
+ }
+ else if (offset > INTTYPE_MAXIMUM (ssize_t) || (ssize_t)offset > size)
+ {
+ cpp_error (pfile, CPP_DL_ERROR, "current position of %s is too large",
+ file->path);
+ return false;
+ }
+
+ size -= (ssize_t)offset;
}
else
/* 8 kilobytes is a sensible starting size. It ought to be bigger
OpenPOWER on IntegriCloud