xbps-query: fixed some issues found by pancake and valgrind.
This commit is contained in:
@ -57,8 +57,8 @@ list_pkgs_in_dict(struct xbps_handle *xhp,
|
|||||||
{
|
{
|
||||||
struct list_pkgver_cb *lpc = arg;
|
struct list_pkgver_cb *lpc = arg;
|
||||||
const char *pkgver, *short_desc, *arch;
|
const char *pkgver, *short_desc, *arch;
|
||||||
char *tmp = NULL, *out = NULL;
|
char tmp[255], *out = NULL;
|
||||||
size_t i, len = 0;
|
size_t i, len = 0, maxcols;
|
||||||
bool chkarch;
|
bool chkarch;
|
||||||
|
|
||||||
(void)xhp;
|
(void)xhp;
|
||||||
@ -73,25 +73,22 @@ list_pkgs_in_dict(struct xbps_handle *xhp,
|
|||||||
if (!pkgver && !short_desc)
|
if (!pkgver && !short_desc)
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
tmp = calloc(1, lpc->pkgver_len + 1);
|
strncpy(tmp, pkgver, sizeof(tmp));
|
||||||
assert(tmp);
|
for (i = strlen(pkgver); i < lpc->pkgver_len; i++)
|
||||||
memcpy(tmp, pkgver, lpc->pkgver_len);
|
|
||||||
for (i = strlen(tmp); i < lpc->pkgver_len; i++)
|
|
||||||
tmp[i] = ' ';
|
tmp[i] = ' ';
|
||||||
|
|
||||||
tmp[i] = '\0';
|
tmp[i] = '\0';
|
||||||
len = strlen(tmp) + strlen(short_desc) + 1;
|
maxcols = lpc->maxcols - 4;
|
||||||
if (len > lpc->maxcols) {
|
len = strlen(tmp) + strlen(short_desc);
|
||||||
|
if (len > maxcols) {
|
||||||
out = malloc(lpc->maxcols);
|
out = malloc(lpc->maxcols);
|
||||||
assert(out);
|
assert(out);
|
||||||
snprintf(out, lpc->maxcols-2, "%s %s", tmp, short_desc);
|
snprintf(out, maxcols, "%s %s", tmp, short_desc);
|
||||||
strncat(out, "...", lpc->maxcols);
|
printf("%s...\n", out);
|
||||||
printf("%s\n", out);
|
|
||||||
free(out);
|
free(out);
|
||||||
} else {
|
} else {
|
||||||
printf("%s %s\n", tmp, short_desc);
|
printf("%s %s\n", tmp, short_desc);
|
||||||
}
|
}
|
||||||
free(tmp);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -87,12 +87,14 @@ repo_search_pkgs_cb(struct xbps_rindex *rpi, void *arg, bool *done)
|
|||||||
prop_dictionary_keysym_t ksym;
|
prop_dictionary_keysym_t ksym;
|
||||||
struct repo_search_data *rsd = arg;
|
struct repo_search_data *rsd = arg;
|
||||||
const char *pkgver, *pkgname, *desc, *inststr;
|
const char *pkgver, *pkgname, *desc, *inststr;
|
||||||
char *tmp = NULL, *out = NULL;
|
char tmp[255], *out = NULL;
|
||||||
size_t i, j, len;
|
size_t i, j, len, maxcols;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
(void)done;
|
(void)done;
|
||||||
|
|
||||||
|
maxcols = rsd->maxcols - 4; /* - "...\n" */
|
||||||
|
|
||||||
allkeys = prop_dictionary_all_keys(rpi->repod);
|
allkeys = prop_dictionary_all_keys(rpi->repod);
|
||||||
for (i = 0; i < prop_array_count(allkeys); i++) {
|
for (i = 0; i < prop_array_count(allkeys); i++) {
|
||||||
ksym = prop_array_get(allkeys, i);
|
ksym = prop_array_get(allkeys, i);
|
||||||
@ -108,9 +110,7 @@ repo_search_pkgs_cb(struct xbps_rindex *rpi, void *arg, bool *done)
|
|||||||
(strcasecmp(pkgname, rsd->patterns[x]) == 0) ||
|
(strcasecmp(pkgname, rsd->patterns[x]) == 0) ||
|
||||||
(strcasestr(pkgver, rsd->patterns[x])) ||
|
(strcasestr(pkgver, rsd->patterns[x])) ||
|
||||||
(strcasestr(desc, rsd->patterns[x]))) {
|
(strcasestr(desc, rsd->patterns[x]))) {
|
||||||
tmp = calloc(1, rsd->pkgver_len + 1);
|
strncpy(tmp, pkgver, sizeof(tmp));
|
||||||
assert(tmp);
|
|
||||||
memcpy(tmp, pkgver, rsd->pkgver_len);
|
|
||||||
for (j = strlen(tmp); j < rsd->pkgver_len; j++)
|
for (j = strlen(tmp); j < rsd->pkgver_len; j++)
|
||||||
tmp[j] = ' ';
|
tmp[j] = ' ';
|
||||||
|
|
||||||
@ -121,21 +121,18 @@ repo_search_pkgs_cb(struct xbps_rindex *rpi, void *arg, bool *done)
|
|||||||
inststr = "[-]";
|
inststr = "[-]";
|
||||||
|
|
||||||
len = strlen(inststr) + strlen(tmp) +
|
len = strlen(inststr) + strlen(tmp) +
|
||||||
strlen(desc) + 1;
|
strlen(desc);
|
||||||
if (len > rsd->maxcols) {
|
if (len > maxcols) {
|
||||||
out = malloc(rsd->maxcols+1);
|
out = malloc(maxcols);
|
||||||
assert(out);
|
assert(out);
|
||||||
snprintf(out, rsd->maxcols-3, "%s %s %s",
|
snprintf(out, maxcols, "%s %s %s",
|
||||||
inststr, tmp, desc);
|
inststr, tmp, desc);
|
||||||
strncat(out, "...", rsd->maxcols);
|
printf("%s...\n", out);
|
||||||
out[rsd->maxcols+1] = '\0';
|
|
||||||
printf("%s\n", out);
|
|
||||||
free(out);
|
free(out);
|
||||||
} else {
|
} else {
|
||||||
printf("%s %s %s\n", inststr,
|
printf("%s %s %s\n", inststr,
|
||||||
tmp, desc);
|
tmp, desc);
|
||||||
}
|
}
|
||||||
free(tmp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,7 @@ show_pkg_revdeps(struct xbps_handle *xhp, const char *pkg)
|
|||||||
prop_array_get_cstring_nocopy(reqby, i, &pkgdep);
|
prop_array_get_cstring_nocopy(reqby, i, &pkgdep);
|
||||||
printf("%s\n", pkgdep);
|
printf("%s\n", pkgdep);
|
||||||
}
|
}
|
||||||
|
prop_object_release(reqby);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -105,13 +105,15 @@ print_value_obj(const char *keyname, prop_object_t obj,
|
|||||||
} else {
|
} else {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char buf[BUFSIZ-1];
|
char buf[BUFSIZ-1];
|
||||||
|
void *data;
|
||||||
|
|
||||||
f = fmemopen(prop_data_data(obj),
|
data = prop_data_data(obj);
|
||||||
prop_data_size(obj), "r");
|
f = fmemopen(data, prop_data_size(obj), "r");
|
||||||
assert(f);
|
assert(f);
|
||||||
while (fgets(buf, BUFSIZ-1, f))
|
while (fgets(buf, BUFSIZ-1, f))
|
||||||
printf("%s", buf);
|
printf("%s", buf);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
free(data);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -284,6 +286,7 @@ int
|
|||||||
repo_show_pkg_files(struct xbps_handle *xhp, const char *pkg)
|
repo_show_pkg_files(struct xbps_handle *xhp, const char *pkg)
|
||||||
{
|
{
|
||||||
prop_dictionary_t pkgd;
|
prop_dictionary_t pkgd;
|
||||||
|
int rv;
|
||||||
|
|
||||||
pkgd = xbps_rpool_get_pkg_plist(xhp, pkg, "./files.plist");
|
pkgd = xbps_rpool_get_pkg_plist(xhp, pkg, "./files.plist");
|
||||||
if (pkgd == NULL) {
|
if (pkgd == NULL) {
|
||||||
@ -294,5 +297,8 @@ repo_show_pkg_files(struct xbps_handle *xhp, const char *pkg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return show_pkg_files(pkgd);
|
rv = show_pkg_files(pkgd);
|
||||||
|
prop_object_release(pkgd);
|
||||||
|
return rv;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user