GitHub上检出代码,跳转到第一个commit,那是2005年4月提交的 `e83c5163316f89bfbde7d9ab23ca2e25604af290`。
需要认真复习我的C语言知识了,不过重点不是在于语言,而是这个工具本身的设计。
CACHE_H这个头文件就挺精彩,数据结构直接是基于硬件结构来设计的,注释写的很清楚“根本不考虑可移植性,因为这仅仅是个cache,一切以效率为优先考量”。
```
/*
* Basic data structures for the directory cache
*
* NOTE NOTE NOTE! This is all in the native CPU byte format. It's
* not even trying to be portable. It's trying to be efficient. It's
* just a cache, after all.
*/
#define CACHE_SIGNATURE 0x44495243 /* "DIRC" */
struct cache_header {
unsigned int signature;
unsigned int version;
unsigned int entries;
unsigned char sha1[20];
};
/*
* The "cache_time" is just the low 32 bits of the
* time. It doesn't matter if it overflows - we only
* check it for equality in the 32 bits we save.
*/
struct cache_time {
unsigned int sec;
unsigned int nsec;
};
```
此外,作为最基础的数据结构,CACHE_H也定义了一组接口函数。
```
/* Initialize the cache information */
extern int read_cache(void);
/* Return a statically allocated filename matching the sha1 signature */
extern char *sha1_file_name(unsigned char *sha1);
/* Write a memory buffer out to the sha file */
extern int write_sha1_buffer(unsigned char *sha1, void *buf, unsigned int size);
/* Read and unpack a sha1 file into memory, write memory to a sha1 file */
extern void * read_sha1_file(unsigned char *sha1, char *type, unsigned long *size);
extern int write_sha1_file(char *buf, unsigned len);
/* Convert to/from hex/sha1 representation */
extern int get_sha1_hex(char *hex, unsigned char *sha1);
extern char *sha1_to_hex(unsigned char *sha1); /* static buffer! */
```
评论