Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: /
Date: Sun, 28 Jun 2020 19:11:53
Message-Id: 1593371374.662850519f77c11367c4a05caf6f45bbc5cf3885.grobian@gentoo
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 }