hex.h: move some hex-related declarations from cache.h
hex.c contains code for hex-related functions, but for some reason these functions were declared in the catch-all cache.h. Move the function declarations into a hex.h header instead. This also allows us to remove includes of cache.h from a few C files. For now, we make cache.h include hex.h, so that it is easier to review the direct changes being made by this patch. In the next patch, we will remove that, and add the necessary direct '#include "hex.h"' in the hundreds of C files that need it. Note that reviewing the header changes in this commit might be simplified via git log --no-walk -p --color-moved $COMMIT -- '*.h'` In particular, it highlights the simple movement of code in .h files rather nicely. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
41227cb138
commit
b73ecb4811
79
cache.h
79
cache.h
@ -13,6 +13,7 @@
|
|||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
#include "pack-revindex.h"
|
#include "pack-revindex.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
#include "hex.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
#include "oid-array.h"
|
#include "oid-array.h"
|
||||||
#include "repository.h"
|
#include "repository.h"
|
||||||
@ -1325,22 +1326,6 @@ int finalize_object_file(const char *tmpfile, const char *filename);
|
|||||||
/* Helper to check and "touch" a file */
|
/* Helper to check and "touch" a file */
|
||||||
int check_and_freshen_file(const char *fn, int freshen);
|
int check_and_freshen_file(const char *fn, int freshen);
|
||||||
|
|
||||||
extern const signed char hexval_table[256];
|
|
||||||
static inline unsigned int hexval(unsigned char c)
|
|
||||||
{
|
|
||||||
return hexval_table[c];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert two consecutive hexadecimal digits into a char. Return a
|
|
||||||
* negative value on error. Don't run over the end of short strings.
|
|
||||||
*/
|
|
||||||
static inline int hex2chr(const char *s)
|
|
||||||
{
|
|
||||||
unsigned int val = hexval(s[0]);
|
|
||||||
return (val & ~0xf) ? val : (val << 4) | hexval(s[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert to/from hex/sha1 representation */
|
/* Convert to/from hex/sha1 representation */
|
||||||
#define MINIMUM_ABBREV minimum_abbrev
|
#define MINIMUM_ABBREV minimum_abbrev
|
||||||
#define DEFAULT_ABBREV default_abbrev
|
#define DEFAULT_ABBREV default_abbrev
|
||||||
@ -1393,68 +1378,6 @@ int repo_for_each_abbrev(struct repository *r, const char *prefix, each_abbrev_f
|
|||||||
|
|
||||||
int set_disambiguate_hint_config(const char *var, const char *value);
|
int set_disambiguate_hint_config(const char *var, const char *value);
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to read a SHA1 in hexadecimal format from the 40 characters
|
|
||||||
* starting at hex. Write the 20-byte result to sha1 in binary form.
|
|
||||||
* Return 0 on success. Reading stops if a NUL is encountered in the
|
|
||||||
* input, so it is safe to pass this function an arbitrary
|
|
||||||
* null-terminated string.
|
|
||||||
*/
|
|
||||||
int get_sha1_hex(const char *hex, unsigned char *sha1);
|
|
||||||
int get_oid_hex(const char *hex, struct object_id *sha1);
|
|
||||||
|
|
||||||
/* Like get_oid_hex, but for an arbitrary hash algorithm. */
|
|
||||||
int get_oid_hex_algop(const char *hex, struct object_id *oid, const struct git_hash_algo *algop);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read `len` pairs of hexadecimal digits from `hex` and write the
|
|
||||||
* values to `binary` as `len` bytes. Return 0 on success, or -1 if
|
|
||||||
* the input does not consist of hex digits).
|
|
||||||
*/
|
|
||||||
int hex_to_bytes(unsigned char *binary, const char *hex, size_t len);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert a binary hash in "unsigned char []" or an object name in
|
|
||||||
* "struct object_id *" to its hex equivalent. The `_r` variant is reentrant,
|
|
||||||
* and writes the NUL-terminated output to the buffer `out`, which must be at
|
|
||||||
* least `GIT_MAX_HEXSZ + 1` bytes, and returns a pointer to out for
|
|
||||||
* convenience.
|
|
||||||
*
|
|
||||||
* The non-`_r` variant returns a static buffer, but uses a ring of 4
|
|
||||||
* buffers, making it safe to make multiple calls for a single statement, like:
|
|
||||||
*
|
|
||||||
* printf("%s -> %s", hash_to_hex(one), hash_to_hex(two));
|
|
||||||
* printf("%s -> %s", oid_to_hex(one), oid_to_hex(two));
|
|
||||||
*/
|
|
||||||
char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash, const struct git_hash_algo *);
|
|
||||||
char *oid_to_hex_r(char *out, const struct object_id *oid);
|
|
||||||
char *hash_to_hex_algop(const unsigned char *hash, const struct git_hash_algo *); /* static buffer result! */
|
|
||||||
char *hash_to_hex(const unsigned char *hash); /* same static buffer */
|
|
||||||
char *oid_to_hex(const struct object_id *oid); /* same static buffer */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Parse a 40-character hexadecimal object ID starting from hex, updating the
|
|
||||||
* pointer specified by end when parsing stops. The resulting object ID is
|
|
||||||
* stored in oid. Returns 0 on success. Parsing will stop on the first NUL or
|
|
||||||
* other invalid character. end is only updated on success; otherwise, it is
|
|
||||||
* unmodified.
|
|
||||||
*/
|
|
||||||
int parse_oid_hex(const char *hex, struct object_id *oid, const char **end);
|
|
||||||
|
|
||||||
/* Like parse_oid_hex, but for an arbitrary hash algorithm. */
|
|
||||||
int parse_oid_hex_algop(const char *hex, struct object_id *oid, const char **end,
|
|
||||||
const struct git_hash_algo *algo);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* These functions work like get_oid_hex and parse_oid_hex, but they will parse
|
|
||||||
* a hex value for any algorithm. The algorithm is detected based on the length
|
|
||||||
* and the algorithm in use is returned. If this is not a hex object ID in any
|
|
||||||
* algorithm, returns GIT_HASH_UNKNOWN.
|
|
||||||
*/
|
|
||||||
int get_oid_hex_any(const char *hex, struct object_id *oid);
|
|
||||||
int parse_oid_hex_any(const char *hex, struct object_id *oid, const char **end);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This reads short-hand syntax that not only evaluates to a commit
|
* This reads short-hand syntax that not only evaluates to a commit
|
||||||
* object name, but also can act as if the end user spelled the name
|
* object name, but also can act as if the end user spelled the name
|
||||||
|
@ -1225,6 +1225,7 @@ extern const unsigned char tolower_trans_tbl[256];
|
|||||||
#undef isxdigit
|
#undef isxdigit
|
||||||
|
|
||||||
extern const unsigned char sane_ctype[256];
|
extern const unsigned char sane_ctype[256];
|
||||||
|
extern const signed char hexval_table[256];
|
||||||
#define GIT_SPACE 0x01
|
#define GIT_SPACE 0x01
|
||||||
#define GIT_DIGIT 0x02
|
#define GIT_DIGIT 0x02
|
||||||
#define GIT_ALPHA 0x04
|
#define GIT_ALPHA 0x04
|
||||||
|
3
hex.c
3
hex.c
@ -1,4 +1,5 @@
|
|||||||
#include "cache.h"
|
#include "git-compat-util.h"
|
||||||
|
#include "hex.h"
|
||||||
|
|
||||||
const signed char hexval_table[256] = {
|
const signed char hexval_table[256] = {
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, /* 00-07 */
|
-1, -1, -1, -1, -1, -1, -1, -1, /* 00-07 */
|
||||||
|
84
hex.h
Normal file
84
hex.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#ifndef HEX_H
|
||||||
|
#define HEX_H
|
||||||
|
|
||||||
|
#include "hash.h"
|
||||||
|
|
||||||
|
extern const signed char hexval_table[256];
|
||||||
|
static inline unsigned int hexval(unsigned char c)
|
||||||
|
{
|
||||||
|
return hexval_table[c];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert two consecutive hexadecimal digits into a char. Return a
|
||||||
|
* negative value on error. Don't run over the end of short strings.
|
||||||
|
*/
|
||||||
|
static inline int hex2chr(const char *s)
|
||||||
|
{
|
||||||
|
unsigned int val = hexval(s[0]);
|
||||||
|
return (val & ~0xf) ? val : (val << 4) | hexval(s[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to read a SHA1 in hexadecimal format from the 40 characters
|
||||||
|
* starting at hex. Write the 20-byte result to sha1 in binary form.
|
||||||
|
* Return 0 on success. Reading stops if a NUL is encountered in the
|
||||||
|
* input, so it is safe to pass this function an arbitrary
|
||||||
|
* null-terminated string.
|
||||||
|
*/
|
||||||
|
int get_sha1_hex(const char *hex, unsigned char *sha1);
|
||||||
|
int get_oid_hex(const char *hex, struct object_id *sha1);
|
||||||
|
|
||||||
|
/* Like get_oid_hex, but for an arbitrary hash algorithm. */
|
||||||
|
int get_oid_hex_algop(const char *hex, struct object_id *oid, const struct git_hash_algo *algop);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read `len` pairs of hexadecimal digits from `hex` and write the
|
||||||
|
* values to `binary` as `len` bytes. Return 0 on success, or -1 if
|
||||||
|
* the input does not consist of hex digits).
|
||||||
|
*/
|
||||||
|
int hex_to_bytes(unsigned char *binary, const char *hex, size_t len);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a binary hash in "unsigned char []" or an object name in
|
||||||
|
* "struct object_id *" to its hex equivalent. The `_r` variant is reentrant,
|
||||||
|
* and writes the NUL-terminated output to the buffer `out`, which must be at
|
||||||
|
* least `GIT_MAX_HEXSZ + 1` bytes, and returns a pointer to out for
|
||||||
|
* convenience.
|
||||||
|
*
|
||||||
|
* The non-`_r` variant returns a static buffer, but uses a ring of 4
|
||||||
|
* buffers, making it safe to make multiple calls for a single statement, like:
|
||||||
|
*
|
||||||
|
* printf("%s -> %s", hash_to_hex(one), hash_to_hex(two));
|
||||||
|
* printf("%s -> %s", oid_to_hex(one), oid_to_hex(two));
|
||||||
|
*/
|
||||||
|
char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash, const struct git_hash_algo *);
|
||||||
|
char *oid_to_hex_r(char *out, const struct object_id *oid);
|
||||||
|
char *hash_to_hex_algop(const unsigned char *hash, const struct git_hash_algo *); /* static buffer result! */
|
||||||
|
char *hash_to_hex(const unsigned char *hash); /* same static buffer */
|
||||||
|
char *oid_to_hex(const struct object_id *oid); /* same static buffer */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse a 40-character hexadecimal object ID starting from hex, updating the
|
||||||
|
* pointer specified by end when parsing stops. The resulting object ID is
|
||||||
|
* stored in oid. Returns 0 on success. Parsing will stop on the first NUL or
|
||||||
|
* other invalid character. end is only updated on success; otherwise, it is
|
||||||
|
* unmodified.
|
||||||
|
*/
|
||||||
|
int parse_oid_hex(const char *hex, struct object_id *oid, const char **end);
|
||||||
|
|
||||||
|
/* Like parse_oid_hex, but for an arbitrary hash algorithm. */
|
||||||
|
int parse_oid_hex_algop(const char *hex, struct object_id *oid, const char **end,
|
||||||
|
const struct git_hash_algo *algo);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These functions work like get_oid_hex and parse_oid_hex, but they will parse
|
||||||
|
* a hex value for any algorithm. The algorithm is detected based on the length
|
||||||
|
* and the algorithm in use is returned. If this is not a hex object ID in any
|
||||||
|
* algorithm, returns GIT_HASH_UNKNOWN.
|
||||||
|
*/
|
||||||
|
int get_oid_hex_any(const char *hex, struct object_id *oid);
|
||||||
|
int parse_oid_hex_any(const char *hex, struct object_id *oid, const char **end);
|
||||||
|
|
||||||
|
#endif
|
@ -1,5 +1,7 @@
|
|||||||
#include "cache.h"
|
#include "git-compat-util.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "gettext.h"
|
||||||
|
#include "hex.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
#include "mailinfo.h"
|
#include "mailinfo.h"
|
||||||
|
4
oidset.c
4
oidset.c
@ -1,5 +1,7 @@
|
|||||||
#include "cache.h"
|
#include "git-compat-util.h"
|
||||||
#include "oidset.h"
|
#include "oidset.h"
|
||||||
|
#include "hex.h"
|
||||||
|
#include "strbuf.h"
|
||||||
|
|
||||||
void oidset_init(struct oidset *set, size_t initial_size)
|
void oidset_init(struct oidset *set, size_t initial_size)
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
** work differently than '*', and to fix the character-class code.
|
** work differently than '*', and to fix the character-class code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cache.h"
|
#include "git-compat-util.h"
|
||||||
#include "wildmatch.h"
|
#include "wildmatch.h"
|
||||||
|
|
||||||
typedef unsigned char uchar;
|
typedef unsigned char uchar;
|
||||||
|
Loading…
Reference in New Issue
Block a user