Use smart pointers

This commit is contained in:
topjohnwu
2019-11-23 04:57:52 -05:00
parent 5bee1c56a9
commit 01253f050a
8 changed files with 87 additions and 81 deletions

View File

@@ -23,10 +23,9 @@ static int strm_close(void *v) {
return 0;
}
FILE *open_stream(stream *strm) {
FILE *fp = funopen(strm, strm_read, strm_write, strm_seek, strm_close);
// Disable buffering
setbuf(fp, nullptr);
sFILE make_stream(stream_ptr &&strm) {
sFILE fp(funopen(strm.release(), strm_read, strm_write, strm_seek, strm_close), fclose);
setbuf(fp.get(), nullptr);
return fp;
}
@@ -45,21 +44,16 @@ off_t stream::seek(off_t off, int whence) {
return -1;
}
filter_stream::~filter_stream() {
if (fp) fclose(fp);
}
int filter_stream::read(void *buf, size_t len) {
return fread(buf, 1, len, fp);
return fread(buf, 1, len, fp.get());
}
int filter_stream::write(const void *buf, size_t len) {
return fwrite(buf, 1, len, fp);
return fwrite(buf, 1, len, fp.get());
}
void filter_stream::set_base(FILE *f) {
if (fp) fclose(fp);
fp = f;
void filter_stream::set_base(sFILE &&f) {
fp = std::move(f);
}
off_t seekable_stream::seek_pos(off_t off, int whence) {