]> git.proxmox.com Git - libgit2.git/commitdiff
error: Simplify giterr_detach
authorVicent Marti <tanoku@gmail.com>
Tue, 5 Nov 2013 13:56:10 +0000 (14:56 +0100)
committerVicent Marti <tanoku@gmail.com>
Tue, 5 Nov 2013 13:56:10 +0000 (14:56 +0100)
include/git2/errors.h
src/errors.c
src/iterator.c

index 5f5d0ab1fd795805b88e29f7208c55cba8c4e92c..be7a31d8ecc11055d97e6ac6001b169f4565dbc3 100644 (file)
@@ -89,17 +89,14 @@ GIT_EXTERN(void) giterr_clear(void);
 /**
  * Get the last error data and clear it.
  *
- * This copies the last error message into the given `git_buf` and returns
- * the associated `git_error_t`, leaving the error cleared as if
- * `giterr_clear` had been called.  You must call `git_buf_free` on the
- * message to release the memory.
+ * This copies the last error into the given `git_error` struct
+ * and returns 0 if the copy was successful, leaving the error 
+ * cleared as if `giterr_clear` had been called.
  *
- * Note: it is possible that this will return `GITERR_NONE` and set the
- * buffer to NULL, so be prepared for that condition.  Also, if the last
- * error was an out-of-memory error, this will return `GITERR_NOMEMORY`
- * but also leave the buffer set to NULL (to avoid allocation).
+ * If there was no existing error in the library, -1 will be returned
+ * and the contents of `cpy` will be left unmodified.
  */
-GIT_EXTERN(git_error_t) giterr_detach(git_buf *message);
+GIT_EXTERN(int) giterr_detach(git_error *cpy);
 
 /**
  * Set the error message string for this thread.
index 70b5f2668ff136c6de060c9c89503fced59e8977..d04da4ca9106d282b6da6bf966ab4b2b095a9762 100644 (file)
@@ -112,27 +112,22 @@ void giterr_clear(void)
 #endif
 }
 
-git_error_t giterr_detach(git_buf *message)
+int giterr_detach(git_error *cpy)
 {
-       git_error_t rval;
        git_error *error = GIT_GLOBAL->last_error;
 
-       assert(message);
-
-       git_buf_free(message);
+       assert(cpy);
 
        if (!error)
-               return GITERR_NONE;
-
-       rval = error->klass;
+               return -1;
 
-       if (error != &g_git_oom_error)
-               git_buf_attach(message, error->message, 0);
+       cpy->message = error->message;
+       cpy->klass = error->klass;
 
        error->message = NULL;
        giterr_clear();
 
-       return rval;
+       return 0;
 }
 
 const git_error *giterr_last(void)
index 369a079bc98af845e5ebb8eeac70f0eea548f6d8..8646399abe6fbdf22345d60570eb6bc0fb35e02e 100644 (file)
@@ -991,8 +991,9 @@ static int fs_iterator__expand_dir(fs_iterator *fi)
                fi->base.start, fi->base.end, &ff->entries);
 
        if (error < 0) {
-               git_buf     msg = GIT_BUF_INIT;
-               git_error_t errt = giterr_detach(&msg);
+               git_error last_error = {0};
+
+               giterr_detach(&last_error);
 
                /* these callbacks may clear the error message */
                fs_iterator__free_frame(ff);
@@ -1000,9 +1001,9 @@ static int fs_iterator__expand_dir(fs_iterator *fi)
                /* next time return value we skipped to */
                fi->base.flags &= ~GIT_ITERATOR_FIRST_ACCESS;
 
-               if (msg.ptr) {
-                       giterr_set_str(errt, msg.ptr);
-                       git_buf_free(&msg);
+               if (last_error.message) {
+                       giterr_set_str(last_error.klass, last_error.message);
+                       free(last_error.message);
                }
 
                return error;