diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2022-06-12 10:40:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-12 10:40:12 -0400 |
commit | d333dbea26437a231bb50d00891da5861567d35a (patch) | |
tree | d6b79075cd65b101cec0b38f9e4eb86de5b850a7 | |
parent | 660e6bd5cd277296aa8b3aadc1383995b6c00e87 (diff) | |
parent | 0f5944459beb952fd49461dfb3c2867de7df314b (diff) | |
download | libgit2-d333dbea26437a231bb50d00891da5861567d35a.tar.gz |
Merge pull request #6288 from libgit2/cmn/mwindow-simplifications
A couple of simplications around mwindow
-rw-r--r-- | src/libgit2/mwindow.c | 18 | ||||
-rw-r--r-- | src/libgit2/mwindow.h | 2 |
2 files changed, 10 insertions, 10 deletions
diff --git a/src/libgit2/mwindow.c b/src/libgit2/mwindow.c index d06b7a80e..ad649490a 100644 --- a/src/libgit2/mwindow.c +++ b/src/libgit2/mwindow.c @@ -186,13 +186,16 @@ int git_mwindow_free_all(git_mwindow_file *mwf) } /* - * Check if a window 'win' contains the address 'offset' + * Check if a window 'win' contains both the address 'offset' and 'extra'. + * + * 'extra' is the size of the hash we're using as we always want to make sure + * that it's contained. */ -int git_mwindow_contains(git_mwindow *win, off64_t offset) +int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra) { off64_t win_off = win->offset; return win_off <= offset - && offset <= (off64_t)(win_off + win->window_map.len); + && (offset + extra) <= (off64_t)(win_off + win->window_map.len); } #define GIT_MWINDOW__LRU -1 @@ -237,9 +240,7 @@ static bool git_mwindow_scan_recently_used( * store it in the output parameter. If lru_window is NULL, * it's the first loop, so store it as well. */ - if (!lru_window || - (comparison_sign == GIT_MWINDOW__LRU && lru_window->last_used > w->last_used) || - (comparison_sign == GIT_MWINDOW__MRU && lru_window->last_used < w->last_used)) { + if (!lru_window || (comparison_sign * w->last_used) > lru_window->last_used) { lru_window = w; lru_last = w_last; found = true; @@ -406,14 +407,13 @@ unsigned char *git_mwindow_open( return NULL; } - if (!w || !(git_mwindow_contains(w, offset) && git_mwindow_contains(w, offset + extra))) { + if (!w || !(git_mwindow_contains(w, offset, extra))) { if (w) { w->inuse_cnt--; } for (w = mwf->windows; w; w = w->next) { - if (git_mwindow_contains(w, offset) && - git_mwindow_contains(w, offset + extra)) + if (git_mwindow_contains(w, offset, extra)) break; } diff --git a/src/libgit2/mwindow.h b/src/libgit2/mwindow.h index e3a03f019..e32ab99d4 100644 --- a/src/libgit2/mwindow.h +++ b/src/libgit2/mwindow.h @@ -38,7 +38,7 @@ typedef struct git_mwindow_ctl { git_vector windowfiles; } git_mwindow_ctl; -int git_mwindow_contains(git_mwindow *win, off64_t offset); +int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra); int git_mwindow_free_all(git_mwindow_file *mwf); /* locks */ unsigned char *git_mwindow_open(git_mwindow_file *mwf, git_mwindow **cursor, off64_t offset, size_t extra, unsigned int *left); int git_mwindow_file_register(git_mwindow_file *mwf); |