1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/*-------------------------------------------------------------------------
*
* pgtar.h
* Functions for manipulating tarfile datastructures (src/port/tar.c)
*
*
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* src/include/pgtar.h
*
*-------------------------------------------------------------------------
*/
#ifndef PG_TAR_H
#define PG_TAR_H
#define TAR_BLOCK_SIZE 512
enum tarError
{
TAR_OK = 0,
TAR_NAME_TOO_LONG,
TAR_SYMLINK_TOO_LONG
};
extern enum tarError tarCreateHeader(char *h, const char *filename,
const char *linktarget, pgoff_t size,
mode_t mode, uid_t uid, gid_t gid,
time_t mtime);
extern uint64 read_tar_number(const char *s, int len);
extern void print_tar_number(char *s, int len, uint64 val);
extern int tarChecksum(char *header);
/*
* Compute the number of padding bytes required for an entry in a tar
* archive. We must pad out to a multiple of TAR_BLOCK_SIZE. Since that's
* a power of 2, we can use TYPEALIGN().
*/
static inline size_t
tarPaddingBytesRequired(size_t len)
{
return TYPEALIGN(TAR_BLOCK_SIZE, len) - len;
}
#endif
|