summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pacman/conf.c4
-rw-r--r--src/pacman/query.c17
-rw-r--r--src/pacman/sync.c78
-rw-r--r--src/pacman/util.c11
-rw-r--r--src/util/vercmp.c2
5 files changed, 47 insertions, 65 deletions
diff --git a/src/pacman/conf.c b/src/pacman/conf.c
index 3af3fa5b..fac6da34 100644
--- a/src/pacman/conf.c
+++ b/src/pacman/conf.c
@@ -750,7 +750,9 @@ static int _parseconfig(const char *file, struct section_t *section,
}
cleanup:
- fclose(fp);
+ if (fp) {
+ fclose(fp);
+ }
pm_printf(ALPM_LOG_DEBUG, "config: finished parsing %s\n", file);
return ret;
}
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 90329b33..251c4dd6 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -110,8 +110,7 @@ static int query_fileowner(alpm_list_t *targets)
int ret = 0;
char path[PATH_MAX];
const char *root;
- char *append;
- size_t max_length;
+ size_t rootlen;
alpm_list_t *t;
alpm_db_t *db_local;
@@ -125,9 +124,13 @@ static int query_fileowner(alpm_list_t *targets)
* once, then we can just overwrite whatever file was there on the previous
* iteration. */
root = alpm_option_get_root(config->handle);
- strncpy(path, root, PATH_MAX - 1);
- append = path + strlen(path);
- max_length = PATH_MAX - (append - path) - 1;
+ rootlen = strlen(root);
+ if(rootlen + 1 > PATH_MAX) {
+ /* we are in trouble here */
+ pm_fprintf(stderr, ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, "");
+ return 1;
+ }
+ strcpy(path, root);
db_local = alpm_option_get_localdb(config->handle);
@@ -208,11 +211,11 @@ static int query_fileowner(alpm_list_t *targets)
continue;
}
- if(strlen(pkgfile) > max_length) {
+ if(rootlen + 1 + strlen(pkgfile) > PATH_MAX) {
pm_fprintf(stderr, ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, pkgfile);
}
/* concatenate our file and the root path */
- strcpy(append, pkgfile);
+ strcpy(path + rootlen, pkgfile);
pdname = mdirname(path);
ppath = resolve_path(pdname);
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 26c9ccca..5e1643e4 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -443,32 +443,27 @@ static int sync_info(alpm_list_t *syncs, alpm_list_t *targets)
if(targets) {
for(i = targets; i; i = alpm_list_next(i)) {
- int foundpkg = 0;
+ const char *target = alpm_list_getdata(i);
+ char *name = strdup(target);
+ char *repo, *pkgstr;
+ int foundpkg = 0, founddb = 0;
- char target[512]; /* TODO is this enough space? */
- char *repo = NULL, *pkgstr = NULL;
-
- strncpy(target, i->data, 512);
- pkgstr = strchr(target, '/');
+ pkgstr = strchr(name, '/');
if(pkgstr) {
- alpm_db_t *db = NULL;
- repo = target;
+ repo = name;
*pkgstr = '\0';
++pkgstr;
+ } else {
+ repo = NULL;
+ pkgstr = name;
+ }
- for(j = syncs; j; j = alpm_list_next(j)) {
- db = alpm_list_getdata(j);
- if(strcmp(repo, alpm_db_get_name(db)) == 0) {
- break;
- }
- db = NULL;
- }
-
- if(!db) {
- pm_fprintf(stderr, ALPM_LOG_ERROR,
- _("repository '%s' does not exist\n"), repo);
- return 1;
+ for(j = syncs; j; j = alpm_list_next(j)) {
+ alpm_db_t *db = alpm_list_getdata(j);
+ if(repo && strcmp(repo, alpm_db_get_name(db)) != 0) {
+ continue;
}
+ founddb = 1;
for(k = alpm_db_get_pkgcache(db); k; k = alpm_list_next(k)) {
alpm_pkg_t *pkg = alpm_list_getdata(k);
@@ -479,34 +474,19 @@ static int sync_info(alpm_list_t *syncs, alpm_list_t *targets)
break;
}
}
+ }
- if(!foundpkg) {
- pm_fprintf(stderr, ALPM_LOG_ERROR,
- _("package '%s' was not found in repository '%s'\n"), pkgstr, repo);
- ret++;
- }
- } else {
- pkgstr = target;
-
- for(j = syncs; j; j = alpm_list_next(j)) {
- alpm_db_t *db = alpm_list_getdata(j);
-
- for(k = alpm_db_get_pkgcache(db); k; k = alpm_list_next(k)) {
- alpm_pkg_t *pkg = alpm_list_getdata(k);
-
- if(strcmp(alpm_pkg_get_name(pkg), pkgstr) == 0) {
- dump_pkg_full(pkg, PKG_FROM_SYNCDB, config->op_s_info > 1);
- foundpkg = 1;
- break;
- }
- }
- }
- if(!foundpkg) {
- pm_fprintf(stderr, ALPM_LOG_ERROR,
- _("package '%s' was not found\n"), pkgstr);
- ret++;
- }
+ if(!founddb) {
+ pm_fprintf(stderr, ALPM_LOG_ERROR,
+ _("repository '%s' does not exist\n"), repo);
+ ret++;
+ }
+ if(!foundpkg) {
+ pm_fprintf(stderr, ALPM_LOG_ERROR,
+ _("package '%s' was not found\n"), target);
+ ret++;
}
+ free(name);
}
} else {
for(i = syncs; i; i = alpm_list_next(i)) {
@@ -630,7 +610,7 @@ static int process_pkg(alpm_pkg_t *pkg)
return 0;
}
-static int process_group(alpm_list_t *dbs, char *group)
+static int process_group(alpm_list_t *dbs, const char *group)
{
int ret = 0;
alpm_list_t *i;
@@ -676,7 +656,7 @@ cleanup:
return ret;
}
-static int process_targname(alpm_list_t *dblist, char *targname)
+static int process_targname(alpm_list_t *dblist, const char *targname)
{
alpm_pkg_t *pkg = alpm_find_dbs_satisfier(config->handle, dblist, targname);
@@ -695,7 +675,7 @@ static int process_targname(alpm_list_t *dblist, char *targname)
return process_group(dblist, targname);
}
-static int process_target(char *target)
+static int process_target(const char *target)
{
/* process targets */
char *targstring = strdup(target);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index deb3e056..7065abdc 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -389,22 +389,21 @@ char *strreplace(const char *str, const char *needle, const char *replace)
* x "size difference between replace and needle" */
newsz = strlen(str) + 1 +
alpm_list_count(list) * (replacesz - needlesz);
- newstr = malloc(newsz);
+ newstr = calloc(newsz, sizeof(char));
if(!newstr) {
return NULL;
}
- *newstr = '\0';
p = str;
newp = newstr;
for(i = list; i; i = alpm_list_next(i)) {
q = alpm_list_getdata(i);
- if(q > p){
+ if(q > p) {
/* add chars between this occurence and last occurence, if any */
- strncpy(newp, p, (size_t)(q - p));
+ memcpy(newp, p, (size_t)(q - p));
newp += q - p;
}
- strncpy(newp, replace, replacesz);
+ memcpy(newp, replace, replacesz);
newp += replacesz;
p = q + needlesz;
}
@@ -413,9 +412,7 @@ char *strreplace(const char *str, const char *needle, const char *replace)
if(*p) {
/* add the rest of 'p' */
strcpy(newp, p);
- newp += strlen(p);
}
- *newp = '\0';
return newstr;
}
diff --git a/src/util/vercmp.c b/src/util/vercmp.c
index 88cf49a6..f4356fb4 100644
--- a/src/util/vercmp.c
+++ b/src/util/vercmp.c
@@ -20,7 +20,7 @@
#include <stdlib.h>
#include <stdio.h> /* printf */
-#include <string.h> /* strncpy */
+#include <string.h>
#define BASENAME "vercmp"