1. 14 May, 2023 1 commit
    • alloc: simplify pluggable allocators · 9dd1bfe8
      Remove the number of functions that custom allocator users need to
      provide; nobody should need to implement `substrdup`. Keep it to the
      basics that are actually _needed_ for allocation (malloc, realloc,
      free) and reimplement the rest ourselves.
      
      In addition, move the failure check and error setting _out_ of the
      custom allocators and into a wrapper so that users don't need to deal
      with this. This also allows us to call our allocator (without the
      wrapper) early so that it does not try to set an error on failure, which
      may be important for bootstrapping.
      Edward Thomson committed
  2. 13 May, 2023 20 commits
  3. 12 May, 2023 3 commits
  4. 11 May, 2023 2 commits
  5. 09 May, 2023 5 commits
  6. 08 May, 2023 9 commits
    • util: detect all possible qsort_r and qsort_s variants · d873966f
      As reported in https://bugs.freebsd.org/271234, recent versions of
      FreeBSD have adjusted the prototype for qsort_r() to match the POSIX
      interface. This causes libgit2's CMake configuration check to fail to
      detect qsort_r(), making it fall back to qsort_s(), which in libgit2
      also has an incompatible interface. With recent versions of clang this
      results in a "incompatible function pointer types" compile error.
      
      Summarizing, there are four variations of 'qsort-with-context':
      * old style BSD qsort_r(), used in FreeBSD 13 and earlier, where the
        comparison function has the context parameter first
      * GNU or POSIX qsort_r(), also used in FreeBSD 14 and later, where the
        comparison function has the context parameter last
      * C11 qsort_s(), where the comparison function has the context parameter
        last
      * Microsoft qsort_s(), where the comparison function has the context
        parameter first
      
      Add explicit detections for all these variants, so they get detected as
      (in the same order as above):
      
      * `GIT_QSORT_R_BSD`
      * `GIT_QSORT_R_GNU`
      * `GIT_QSORT_S_C11`
      * `GIT_QSORT_S_MSC`
      
      An additional complication is that on FreeBSD 14 and later, <stdlib.h>
      uses the C11 _Generic() macro mechanism to automatically select the
      correct qsort_r() prototype, depending on the caller's comparison
      function argument. This breaks CMake's check_prototype_definition()
      functionality, since it tries to redefine the function, and _Generic
      macro is expanded inline causing a compile error.
      
      Work around that problem by putting the function names in parentheses,
      to prevent the preprocessor from using a macro to replace the function
      name.
      
      Also, in `git__qsort_r()`, change the `#if` order so the variants that
      do not have to use glue are preferred.
      Dimitry Andric committed
    • grafts: make `from_file` be `open_or_refresh` · 43db9288
      The semantics of `from_file` are weird - it looks like a function that
      just opens a file, but it actually inspects the pointer, which is
      unexpected and could make things very crashy.
      
      Make an `open` function that just does an open, and move the magic to
      `open_or_refresh` whose name better indicates that it may do weird
      stuff.
      Edward Thomson committed
    • shallow: don't default to -1 for depth · 3388f5ba
      Depth of `0` should indicate full depth. Disallow negative values (they
      may have a future meaning) and use `0` as the default.
      Edward Thomson committed
    • grafts: use `git_parse` to parse object IDs · 69592bde
      Don't mix parsing by hand and using `git_parse` to parse.
      Edward Thomson committed
    • futils: use SHA256 for checksums always · 6a02b459
      Use SHA256 for file checksums. SHA1 makes no sense as a default in 2023.
      
      Given that we're just looking at a file checksum to see if it's changed,
      this does not need to take repository's OID type into account or
      otherwise be configurable.
      Edward Thomson committed
    • shallow: avoid unnecessary pkt free · 8f7fc2ee
      Looks like a double-free here.
      Edward Thomson committed