diff options
author | Vicent Martà <tanoku@gmail.com> | 2012-03-09 19:55:50 +0100 |
---|---|---|
committer | Vicent Martà <tanoku@gmail.com> | 2012-03-09 20:09:22 +0100 |
commit | dda708e78f3c3f43d814d46c29ab9f2b9d47ed5c (patch) | |
tree | 60a6e01583c15209a42740a46e182ac7cbc893de /src/filebuf.h | |
parent | 6af24ce31f43c3621f11720704a078058665bc3f (diff) | |
download | libgit2-dda708e78f3c3f43d814d46c29ab9f2b9d47ed5c.tar.gz |
error-handling: On-disk config file backend
Includes:
- Proper error reporting when encountering syntax errors in a
config file (file, line number, column).
- Rewritten `config_write`, now with 99% less goto-spaghetti
- Error state in `git_filebuf`: filebuf write functions no longer
need to be checked for error returns. If any of the writes performed
on a buffer fail, the last call to `git_filebuf_commit` or
`git_filebuf_hash` will fail accordingly and set the appropiate error
message. Baller!
Diffstat (limited to 'src/filebuf.h')
-rw-r--r-- | src/filebuf.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/filebuf.h b/src/filebuf.h index 371215391..5f9d4ad9d 100644 --- a/src/filebuf.h +++ b/src/filebuf.h @@ -40,25 +40,35 @@ struct git_filebuf { size_t buf_size, buf_pos; git_file fd; + int last_error; }; typedef struct git_filebuf git_filebuf; #define GIT_FILEBUF_INIT {0} -/* The git_filebuf object lifecycle is: +/* + * The git_filebuf object lifecycle is: * - Allocate git_filebuf, preferably using GIT_FILEBUF_INIT. + * * - Call git_filebuf_open() to initialize the filebuf for use. + * * - Make as many calls to git_filebuf_write(), git_filebuf_printf(), - * git_filebuf_reserve() as you like. + * git_filebuf_reserve() as you like. The error codes for these + * functions don't need to be checked. They are stored internally + * by the file buffer. + * * - While you are writing, you may call git_filebuf_hash() to get - * the hash of all you have written so far. + * the hash of all you have written so far. This function will + * fail if any of the previous writes to the buffer failed. + * * - To close the git_filebuf, you may call git_filebuf_commit() or * git_filebuf_commit_at() to save the file, or * git_filebuf_cleanup() to abandon the file. All of these will - * clear the git_filebuf object. + * free the git_filebuf object. Likewise, all of these will fail + * if any of the previous writes to the buffer failed, and set + * an error code accordingly. */ - int git_filebuf_write(git_filebuf *lock, const void *buff, size_t len); int git_filebuf_reserve(git_filebuf *file, void **buff, size_t len); int git_filebuf_printf(git_filebuf *file, const char *format, ...) GIT_FORMAT_PRINTF(2, 3); |