PostgreSQL Source Code: src/port/tar.c Source File (original) (raw)
1#include "c.h"
2
3#include <sys/stat.h>
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21void
23{
25 {
26
27 s[--len] = ' ';
28 while (len)
29 {
30 s[--len] = (val & 7) + '0';
31 val >>= 3;
32 }
33 }
34 else
35 {
36
37 s[0] = '\200';
38 while (len > 1)
39 {
41 val >>= 8;
42 }
43 }
44}
45
46
47
48
49
50
51
52
53
54
55
56
59{
61
62 if (*s == '\200')
63 {
64
65 while (--len)
66 {
67 result <<= 8;
68 result |= (unsigned char) (*++s);
69 }
70 }
71 else
72 {
73
74 while (len-- && *s >= '0' && *s <= '7')
75 {
76 result <<= 3;
77 result |= (*s - '0');
78 s++;
79 }
80 }
81 return result;
82}
83
84
85
86
87
88
89int
91{
92 int i,
93 sum;
94
95
96
97
98
99
100 sum = 8 * ' ';
102 if (i < 148 || i >= 156)
103 sum += 0xFF & header[i];
104 return sum;
105}
106
107
108
109
110
111
112
116{
119
120 if (linktarget && strlen(linktarget) > 99)
122
124
125
128 {
129
130
131
132
133
135
136 flen = Min(flen, 99);
137 h[flen] = '/';
138 h[flen + 1] = '\0';
139 }
140
141
143
144
146
147
149
150
152
154 else
156
157
159
160
161
162 if (linktarget != NULL)
163 {
164
166
168 }
170 {
171
173 }
174 else
175 {
176
178 }
179
180
182
183
185
186
187
189
190
191
193
194
196
197
199
200
201
202
204
206}
static PgChecksumMode mode
size_t strlcpy(char *dst, const char *src, size_t siz)
uint64 read_tar_number(const char *s, int len)
int tarChecksum(char *header)
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)
void print_tar_number(char *s, int len, uint64 val)