diff options
Diffstat (limited to 'pack-objects.h')
-rw-r--r-- | pack-objects.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/pack-objects.h b/pack-objects.h index f5282155f2..90ad0a8f4f 100644 --- a/pack-objects.h +++ b/pack-objects.h @@ -44,4 +44,24 @@ struct object_entry *packlist_find(struct packing_data *pdata, const unsigned char *sha1, uint32_t *index_pos); +static inline uint32_t pack_name_hash(const char *name) +{ + uint32_t c, hash = 0; + + if (!name) + return 0; + + /* + * This effectively just creates a sortable number from the + * last sixteen non-whitespace characters. Last characters + * count "most", so things that end in ".c" sort together. + */ + while ((c = *name++) != 0) { + if (isspace(c)) + continue; + hash = (hash >> 2) + (c << 24); + } + return hash; +} + #endif |