Re: [PATCH 1/5] verify_lock(): return 0/-1 rather than struct ref_lock *

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 22, 2015 at 4:34 PM, Michael Haggerty <mhagger@xxxxxxxxxxxx> wrote:
> Its return value wasn't conveying any extra information, but it made
> the reader wonder whether the ref_lock that it returned might be
> different than the one that was passed to it. So change the function
> to the traditional "return 0 on success or a negative value on error".
>
> Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx>

Bonus points for the documentation!
Reviewed-by: Stefan Beller <sbeller@xxxxxxxxxx>

> ---
>  refs.c | 21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/refs.c b/refs.c
> index 97043fd..4432bc9 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -2195,9 +2195,14 @@ static void unlock_ref(struct ref_lock *lock)
>         free(lock);
>  }
>
> -/* This function should make sure errno is meaningful on error */
> -static struct ref_lock *verify_lock(struct ref_lock *lock,
> -       const unsigned char *old_sha1, int mustexist)
> +/*
> + * Verify that the reference locked by lock has the value old_sha1.
> + * Fail if the reference doesn't exist and mustexist is set. Return 0
> + * on success or a negative value on error. This function should make
> + * sure errno is meaningful on error.
> + */
> +static int verify_lock(struct ref_lock *lock,
> +                      const unsigned char *old_sha1, int mustexist)
>  {
>         if (read_ref_full(lock->ref_name,
>                           mustexist ? RESOLVE_REF_READING : 0,
> @@ -2206,16 +2211,16 @@ static struct ref_lock *verify_lock(struct ref_lock *lock,
>                 error("Can't verify ref %s", lock->ref_name);
>                 unlock_ref(lock);
>                 errno = save_errno;
> -               return NULL;
> +               return -1;
>         }
>         if (hashcmp(lock->old_sha1, old_sha1)) {
>                 error("Ref %s is at %s but expected %s", lock->ref_name,
>                         sha1_to_hex(lock->old_sha1), sha1_to_hex(old_sha1));
>                 unlock_ref(lock);
>                 errno = EBUSY;
> -               return NULL;
> +               return -1;
>         }
> -       return lock;
> +       return 0;
>  }
>
>  static int remove_empty_directories(const char *file)
> @@ -2445,7 +2450,9 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname,
>                         goto error_return;
>                 }
>         }
> -       return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
> +       if (old_sha1 && verify_lock(lock, old_sha1, mustexist))
> +               return NULL;
> +       return lock;
>
>   error_return:
>         unlock_ref(lock);
> --
> 2.1.4
>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]