freebsd-ports/archivers/libcabinet/files/patch-cfcreate.cpp
Edwin Groothuis 8a8b31d05c [patch] Unbreak port: archivers/libcabinet
This port did not build with gcc 3.3.1. I also fixed a
	possible buffer overflow (they used gets() to read from
	stdin).

	Please review the patch file ``patch-cftypes.cpp'' with
	extra care, since I am not sure whether this makes sense
	(2 positions in the file, marked with ``TODO'' - thanks.

Also added some lines in cftypes.cpp to overcome the absence of
values.h on -current.

PR:		ports/55767
Submitted by:	Simon Barner <barner@in.tum.de>
2003-08-31 13:09:31 +00:00

38 lines
1.1 KiB
C++

--- cfcreate.cpp.orig Sun Oct 24 13:29:53 1999
+++ cfcreate.cpp Tue Aug 19 21:16:05 2003
@@ -29,6 +29,8 @@
#include <unistd.h>
#endif
+using std::ios;
+
///////////////////////////////////////***************************************
int cfc_fileinfo::write_entry(ostream& out)
@@ -129,7 +131,7 @@
}
}
- if(fstat(in.rdbuf()->fd(), &statbuf) != 0) return FSTAT_FAILURE;
+ if(stat(fname, &statbuf) != 0) return FSTAT_FAILURE;
#ifndef unix
if(getftime(in.rdbuf()->fd(), &datetime) != 0) return GETTIME_FAILURE;
#endif
@@ -194,7 +196,7 @@
unprocessed_data = NULL; // Reset buffer holder
unprocessed_data_len = 0u;
- if(in.read(buf + bytesread, len - bytesread).bad())
+ if(in.read((char*)buf + bytesread, len - bytesread).bad())
{
delete[] buf;
buf = NULL;
@@ -272,7 +274,7 @@
return WRITE_ERROR;
}
- tempfile->write(compdata, blockinfo.compressed_len);
+ tempfile->write((char*)compdata, blockinfo.compressed_len);
processed_bytes += sizeof(blockinfo) + blockinfo.compressed_len;
if(compdata != data) delete[] compdata; // If buffer was allocated, free it
data_blocks++; // Incriment block counter