1 |
commit: 662850519f77c11367c4a05caf6f45bbc5cf3885 |
2 |
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Jun 28 19:09:34 2020 +0000 |
4 |
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
5 |
CommitDate: Sun Jun 28 19:09:34 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=66285051 |
7 |
|
8 |
qpkg: replace allocated buf with stack version |
9 |
|
10 |
now we don't use anything that would realloc buf, just stick to a buffer |
11 |
on the stack so we don't have ensure we free it either |
12 |
|
13 |
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org> |
14 |
|
15 |
qpkg.c | 40 ++++++++++------------------------------ |
16 |
1 file changed, 10 insertions(+), 30 deletions(-) |
17 |
|
18 |
diff --git a/qpkg.c b/qpkg.c |
19 |
index 8faa6ea..533e05c 100644 |
20 |
--- a/qpkg.c |
21 |
+++ b/qpkg.c |
22 |
@@ -174,11 +174,10 @@ qpkg_make(tree_pkg_ctx *pkg) |
23 |
char tmpdir[BUFSIZE]; |
24 |
char filelist[BUFSIZE + 32]; |
25 |
char tbz2[BUFSIZE + 32]; |
26 |
- size_t buflen; |
27 |
+ char buf[BUFSIZE * 4]; |
28 |
size_t xpaksize; |
29 |
char *line; |
30 |
char *savep; |
31 |
- char *buf; |
32 |
int i; |
33 |
char *xpak_argv[2]; |
34 |
struct stat st; |
35 |
@@ -191,9 +190,6 @@ qpkg_make(tree_pkg_ctx *pkg) |
36 |
return 0; |
37 |
} |
38 |
|
39 |
- buflen = _Q_PATH_MAX; |
40 |
- buf = xmalloc(buflen); |
41 |
- |
42 |
line = tree_pkg_meta_get(pkg, CONTENTS); |
43 |
if (line == NULL) |
44 |
return -1; |
45 |
@@ -202,22 +198,16 @@ qpkg_make(tree_pkg_ctx *pkg) |
46 |
mask = umask(0077); |
47 |
i = mkstemp(tmpdir); |
48 |
umask(mask); |
49 |
- if (i == -1) { |
50 |
- free(buf); |
51 |
+ if (i == -1) |
52 |
return -2; |
53 |
- } |
54 |
close(i); |
55 |
unlink(tmpdir); |
56 |
- if (mkdir(tmpdir, 0750)) { |
57 |
- free(buf); |
58 |
+ if (mkdir(tmpdir, 0750)) |
59 |
return -3; |
60 |
- } |
61 |
|
62 |
snprintf(filelist, sizeof(filelist), "%s/filelist", tmpdir); |
63 |
- if ((out = fopen(filelist, "w")) == NULL) { |
64 |
- free(buf); |
65 |
+ if ((out = fopen(filelist, "w")) == NULL) |
66 |
return -4; |
67 |
- } |
68 |
|
69 |
for (; (line = strtok_r(line, "\n", &savep)) != NULL; line = NULL) { |
70 |
contents_entry *e; |
71 |
@@ -244,18 +234,14 @@ qpkg_make(tree_pkg_ctx *pkg) |
72 |
fflush(stdout); |
73 |
|
74 |
snprintf(tbz2, sizeof(tbz2), "%s/bin.tbz2", tmpdir); |
75 |
- if (snprintf(buf, buflen, "tar jcf '%s' --files-from='%s' " |
76 |
- "--no-recursion >/dev/null 2>&1", tbz2, filelist) > (int)buflen || |
77 |
- (fp = popen(buf, "r")) == NULL) |
78 |
- { |
79 |
- free(buf); |
80 |
+ if (snprintf(buf, sizeof(buf), "tar jcf '%s' --files-from='%s' " |
81 |
+ "--no-recursion >/dev/null 2>&1", tbz2, filelist) > |
82 |
+ (int)sizeof(buf) || (fp = popen(buf, "r")) == NULL) |
83 |
return 2; |
84 |
- } |
85 |
pclose(fp); |
86 |
|
87 |
if ((i = open(tbz2, O_WRONLY)) < 0) { |
88 |
warnp("failed to open '%s': %s", tbz2, strerror(errno)); |
89 |
- free(buf); |
90 |
return 1; |
91 |
} |
92 |
|
93 |
@@ -263,12 +249,11 @@ qpkg_make(tree_pkg_ctx *pkg) |
94 |
if (fstat(i, &st) == -1) { |
95 |
warnp("could not stat '%s': %s", tbz2, strerror(errno)); |
96 |
close(i); |
97 |
- free(buf); |
98 |
return 1; |
99 |
} |
100 |
xpaksize = st.st_size; |
101 |
|
102 |
- snprintf(buf, buflen, "%s%s/%s/%s", |
103 |
+ snprintf(buf, sizeof(buf), "%s%s/%s/%s", |
104 |
portroot, portvdb, atom->CATEGORY, atom->PF); |
105 |
xpak_argv[0] = buf; |
106 |
xpak_argv[1] = NULL; |
107 |
@@ -278,7 +263,6 @@ qpkg_make(tree_pkg_ctx *pkg) |
108 |
if (fstat(i, &st) == -1) { |
109 |
warnp("could not stat '%s': %s", tbz2, strerror(errno)); |
110 |
close(i); |
111 |
- free(buf); |
112 |
return 1; |
113 |
} |
114 |
xpaksize = st.st_size - xpaksize; |
115 |
@@ -287,7 +271,6 @@ qpkg_make(tree_pkg_ctx *pkg) |
116 |
if ((fp = fdopen(i, "a")) == NULL) { |
117 |
warnp("could not open '%s': %s", tbz2, strerror(errno)); |
118 |
close(i); |
119 |
- free(buf); |
120 |
return 1; |
121 |
} |
122 |
|
123 |
@@ -299,14 +282,13 @@ qpkg_make(tree_pkg_ctx *pkg) |
124 |
unlink(filelist); |
125 |
|
126 |
/* create dirs, if necessary */ |
127 |
- snprintf(buf, buflen, "%s/%s", qpkg_bindir, atom->CATEGORY); |
128 |
+ snprintf(buf, sizeof(buf), "%s/%s", qpkg_bindir, atom->CATEGORY); |
129 |
mkdir_p(buf, 0755); |
130 |
|
131 |
- snprintf(buf, buflen, "%s/%s/%s.tbz2", |
132 |
+ snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", |
133 |
qpkg_bindir, atom->CATEGORY, atom->PF); |
134 |
if (rename(tbz2, buf)) { |
135 |
warnp("could not move '%s' to '%s'", tbz2, buf); |
136 |
- free(buf); |
137 |
return 1; |
138 |
} |
139 |
|
140 |
@@ -314,14 +296,12 @@ qpkg_make(tree_pkg_ctx *pkg) |
141 |
|
142 |
if (stat(buf, &st) == -1) { |
143 |
warnp("could not stat '%s': %s", buf, strerror(errno)); |
144 |
- free(buf); |
145 |
return 1; |
146 |
} |
147 |
|
148 |
printf("%s%s%s KiB\n", |
149 |
RED, make_human_readable_str(st.st_size, 1, KILOBYTE), NORM); |
150 |
|
151 |
- free(buf); |
152 |
return 0; |
153 |
} |