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 {

40 s[--len] = (val & 255);

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 * ' ';

101 for (i = 0; i < 512; i++)

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)