diff --git a/buffer.c b/buffer.c index d8ba6fb..f7bf469 100644 --- a/buffer.c +++ b/buffer.c @@ -20,6 +20,8 @@ #include #include +#include +#include #include "error.h" #include "buffer.h" @@ -99,3 +101,17 @@ void buffer_append(struct buffer *b, const void *ptr, size_t len) { memcpy(b->block + b->len, ptr, len); buffer_setlen(b, b->len + len); } + +int buffer_write(struct buffer *b, const char *filename) { + + int fd, rc; + + fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0664); + if (fd < 0) + return error("%s: %s", filename, strerror(errno)); + + rc = write(fd, b->block, b->len); + close(fd); + + return rc; +} diff --git a/buffer.h b/buffer.h index 034bf77..c365e83 100644 --- a/buffer.h +++ b/buffer.h @@ -95,4 +95,6 @@ static inline void buffer_str_term(struct buffer *b, char ch) { buffer_append_ch(b, ch); } +int buffer_write(struct buffer *b, const char *filename); + #endif /* BUFFER_H */