After our recent screwup with size_t and ssize_t in the download code, I
found the `-Wsign-conversion` flag to GCC to see if we were doing anything
else boneheaded. I didn't find anything quite as bad, but we did have some
goofups- most of our public unsigned methods would return -1 on error, which
is a bit odd in an unsigned context.
Signed-off-by: Dan McGee <dan(a)archlinux.org>
---
lib/libalpm/add.c | 4 ++--
lib/libalpm/alpm.h | 15 ++++++++-------
lib/libalpm/alpm_list.c | 2 +-
lib/libalpm/alpm_list.h | 2 +-
lib/libalpm/backup.c | 2 +-
lib/libalpm/be_package.c | 5 ++---
lib/libalpm/conflict.c | 2 +-
lib/libalpm/dload.c | 10 +++++-----
lib/libalpm/handle.c | 15 ++++++++++++---
lib/libalpm/handle.h | 4 ++--
lib/libalpm/package.c | 8 +++++---
lib/libalpm/remove.c | 11 ++++++-----
lib/libalpm/sync.c | 4 ++--
lib/libalpm/trans.c | 2 +-
lib/libalpm/util.c | 13 +++++--------
src/pacman/callback.c | 31 ++++++++++++++++++++++---------
src/pacman/conf.h | 2 +-
src/pacman/pacman.c | 4 ++--
src/pacman/util.c | 34 ++++++++++++++++++++--------------
19 files changed, 99 insertions(+), 71 deletions(-)
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index c6751a4..4120b14 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -199,7 +199,7 @@ static int extract_single_file(struct archive *archive,
/* case 12: existing dir, ignore it */
if(lsbuf.st_mode != entrymode) {
/* if filesystem perms are different than pkg perms, warn user */
- int mask = 07777;
+ mode_t mask = 07777;
_alpm_log(PM_LOG_WARNING, _("directory permissions differ on %s\n"
"filesystem: %o package: %o\n"), entryname, lsbuf.st_mode & mask,
entrymode & mask);
@@ -715,7 +715,7 @@ int _alpm_upgrade_packages(pmtrans_t *trans, pmdb_t *db)
return(0);
}
- pkg_count = alpm_list_count(trans->add);
+ pkg_count = (int)alpm_list_count(trans->add);
pkg_current = 1;
/* loop through our package list adding/upgrading one at a time */
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index e9fadca..ae2dc1f 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -128,8 +128,8 @@ int alpm_option_set_logfile(const char *logfile);
const char *alpm_option_get_lockfile();
/* no set_lockfile, path is determined from dbpath */
-unsigned short alpm_option_get_usesyslog();
-void alpm_option_set_usesyslog(unsigned short usesyslog);
+int alpm_option_get_usesyslog();
+void alpm_option_set_usesyslog(int usesyslog);
alpm_list_t *alpm_option_get_noupgrades();
void alpm_option_add_noupgrade(const char *pkg);
@@ -154,7 +154,8 @@ int alpm_option_remove_ignoregrp(const char *grp);
const char *alpm_option_get_arch();
void alpm_option_set_arch(const char *arch);
-void alpm_option_set_usedelta(unsigned short usedelta);
+int alpm_option_get_usedelta();
+void alpm_option_set_usedelta(int usedelta);
pmdb_t *alpm_option_get_localdb();
alpm_list_t *alpm_option_get_syncdbs();
@@ -195,7 +196,7 @@ typedef enum _pmpkgreason_t {
PM_PKG_REASON_DEPEND = 1 /* installed as a dependency for another package */
} pmpkgreason_t;
-int alpm_pkg_load(const char *filename, unsigned short full, pmpkg_t **pkg);
+int alpm_pkg_load(const char *filename, int full, pmpkg_t **pkg);
int alpm_pkg_free(pmpkg_t *pkg);
int alpm_pkg_checkmd5sum(pmpkg_t *pkg);
char *alpm_fetch_pkgurl(const char *url);
@@ -231,8 +232,8 @@ size_t alpm_pkg_changelog_read(void *ptr, size_t size,
const pmpkg_t *pkg, const void *fp);
/*int alpm_pkg_changelog_feof(const pmpkg_t *pkg, void *fp);*/
int alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp);
-unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg);
-unsigned short alpm_pkg_has_force(pmpkg_t *pkg);
+int alpm_pkg_has_scriptlet(pmpkg_t *pkg);
+int alpm_pkg_has_force(pmpkg_t *pkg);
off_t alpm_pkg_download_size(pmpkg_t *newpkg);
@@ -395,7 +396,7 @@ typedef void (*alpm_trans_cb_conv)(pmtransconv_t, void *, void *,
/* Transaction Progress callback */
typedef void (*alpm_trans_cb_progress)(pmtransprog_t, const char *, int, int, int);
-unsigned int alpm_trans_get_flags();
+int alpm_trans_get_flags();
alpm_list_t * alpm_trans_get_add();
alpm_list_t * alpm_trans_get_remove();
int alpm_trans_init(pmtransflag_t flags,
diff --git a/lib/libalpm/alpm_list.c b/lib/libalpm/alpm_list.c
index 8b2c7b3..392faa7 100644
--- a/lib/libalpm/alpm_list.c
+++ b/lib/libalpm/alpm_list.c
@@ -573,7 +573,7 @@ void SYMEXPORT *alpm_list_getdata(const alpm_list_t *node)
*
* @return the number of list items
*/
-int SYMEXPORT alpm_list_count(const alpm_list_t *list)
+unsigned int SYMEXPORT alpm_list_count(const alpm_list_t *list)
{
unsigned int i = 0;
const alpm_list_t *lp = list;
diff --git a/lib/libalpm/alpm_list.h b/lib/libalpm/alpm_list.h
index f079ecf..66cc7d9 100644
--- a/lib/libalpm/alpm_list.h
+++ b/lib/libalpm/alpm_list.h
@@ -73,7 +73,7 @@ alpm_list_t *alpm_list_last(const alpm_list_t *list);
void *alpm_list_getdata(const alpm_list_t *entry);
/* misc */
-int alpm_list_count(const alpm_list_t *list);
+unsigned int alpm_list_count(const alpm_list_t *list);
void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn);
void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle);
char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle);
diff --git a/lib/libalpm/backup.c b/lib/libalpm/backup.c
index e628131..ab02d90 100644
--- a/lib/libalpm/backup.c
+++ b/lib/libalpm/backup.c
@@ -33,7 +33,7 @@
#include "util.h"
/* split a backup string "file\thash" into two strings : file and hash */
-int _alpm_backup_split(const char *string, char **file, char **hash)
+static int _alpm_backup_split(const char *string, char **file, char **hash)
{
char *str = strdup(string);
char *ptr;
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 9c7c161..745e17f 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -239,7 +239,7 @@ static pmpkg_t *pkg_load(const char *pkgfile, unsigned short full)
if(full) {
/* "checking for conflicts" requires a sorted list, ensure that here */
_alpm_log(PM_LOG_DEBUG, "sorting package filelist for %s\n", pkgfile);
- newpkg->files = alpm_list_msort(newpkg->files, alpm_list_count(newpkg->files),
+ newpkg->files = alpm_list_msort(newpkg->files, (int)alpm_list_count(newpkg->files),
_alpm_str_cmp);
newpkg->infolevel = INFRQ_ALL;
} else {
@@ -269,8 +269,7 @@ error:
* @param pkg address of the package pointer
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
-int SYMEXPORT alpm_pkg_load(const char *filename, unsigned short full,
- pmpkg_t **pkg)
+int SYMEXPORT alpm_pkg_load(const char *filename, int full, pmpkg_t **pkg)
{
ALPM_LOG_FUNC;
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index e934c01..418409e 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -403,7 +403,7 @@ alpm_list_t *_alpm_db_find_fileconflicts(pmdb_t *db, pmtrans_t *trans,
alpm_list_t *upgrade, alpm_list_t *remove)
{
alpm_list_t *i, *j, *conflicts = NULL;
- int numtargs = alpm_list_count(upgrade);
+ int numtargs = (int)alpm_list_count(upgrade);
int current;
ALPM_LOG_FUNC;
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 8b3226b..7538e59 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -59,7 +59,7 @@ static char *get_filename(const char *url) {
static char *get_destfile(const char *path, const char *filename) {
char *destfile;
/* len = localpath len + filename len + null */
- int len = strlen(path) + strlen(filename) + 1;
+ size_t len = strlen(path) + strlen(filename) + 1;
CALLOC(destfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(destfile, len, "%s%s", path, filename);
@@ -69,7 +69,7 @@ static char *get_destfile(const char *path, const char *filename) {
static char *get_tempfile(const char *path, const char *filename) {
char *tempfile;
/* len = localpath len + filename len + '.part' len + null */
- int len = strlen(path) + strlen(filename) + 6;
+ size_t len = strlen(path) + strlen(filename) + 6;
CALLOC(tempfile, len, sizeof(char), RET_ERR(PM_ERR_MEMORY, NULL));
snprintf(tempfile, len, "%s%s.part", path, filename);
@@ -92,7 +92,7 @@ static int download_internal(const char *url, const char *localpath,
struct url_stat ust;
struct stat st;
int chk_resume = 0, ret = 0;
- size_t dl_thisfile = 0;
+ off_t dl_thisfile = 0;
ssize_t nread = 0;
char *tempfile, *destfile, *filename;
struct sigaction new_action, old_action;
@@ -199,7 +199,7 @@ static int download_internal(const char *url, const char *localpath,
while((nread = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) {
size_t nwritten = 0;
- nwritten = fwrite(buffer, 1, nread, localf);
+ nwritten = fwrite(buffer, 1, (size_t)nread, localf);
if((nwritten != nread) || ferror(localf)) {
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
destfile, strerror(errno));
@@ -300,7 +300,7 @@ int _alpm_download_single_file(const char *filename,
for(i = servers; i; i = i->next) {
const char *server = i->data;
char *fileurl = NULL;
- int len;
+ size_t len;
/* print server + filename into a buffer */
len = strlen(server) + strlen(filename) + 2;
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index 012d412..5cbf363 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -169,7 +169,7 @@ const char SYMEXPORT *alpm_option_get_lockfile()
return handle->lockfile;
}
-unsigned short SYMEXPORT alpm_option_get_usesyslog()
+int SYMEXPORT alpm_option_get_usesyslog()
{
if (handle == NULL) {
pm_errno = PM_ERR_HANDLE_NULL;
@@ -223,6 +223,15 @@ const char SYMEXPORT *alpm_option_get_arch()
return handle->arch;
}
+int SYMEXPORT alpm_option_get_usedelta()
+{
+ if (handle == NULL) {
+ pm_errno = PM_ERR_HANDLE_NULL;
+ return -1;
+ }
+ return handle->usedelta;
+}
+
pmdb_t SYMEXPORT *alpm_option_get_localdb()
{
if (handle == NULL) {
@@ -437,7 +446,7 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile)
return(0);
}
-void SYMEXPORT alpm_option_set_usesyslog(unsigned short usesyslog)
+void SYMEXPORT alpm_option_set_usesyslog(int usesyslog)
{
handle->usesyslog = usesyslog;
}
@@ -536,7 +545,7 @@ void SYMEXPORT alpm_option_set_arch(const char *arch)
if(arch) handle->arch = strdup(arch);
}
-void SYMEXPORT alpm_option_set_usedelta(unsigned short usedelta)
+void SYMEXPORT alpm_option_set_usedelta(int usedelta)
{
handle->usedelta = usedelta;
}
diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
index a1eb1cd..afb2a1c 100644
--- a/lib/libalpm/handle.h
+++ b/lib/libalpm/handle.h
@@ -57,9 +57,9 @@ typedef struct _pmhandle_t {
alpm_list_t *ignoregrp; /* List of groups to ignore */
/* options */
- unsigned short usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
+ int usesyslog; /* Use syslog instead of logfile? */ /* TODO move to frontend */
+ int usedelta; /* Download deltas if possible */
char *arch; /* Architecture of packages we should allow */
- unsigned short usedelta; /* Download deltas if possible */
} pmhandle_t;
/* global handle variable */
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index de17166..a10c829 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -295,7 +295,7 @@ alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
return pkg->groups;
}
-unsigned short SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
+int SYMEXPORT alpm_pkg_has_force(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
@@ -503,7 +503,9 @@ size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
if(pkg->origin == PKG_FROM_CACHE) {
ret = fread(ptr, 1, size, (FILE*)fp);
} else if(pkg->origin == PKG_FROM_FILE) {
- ret = archive_read_data((struct archive*)fp, ptr, size);
+ /* TODO: This is not valid; we can lose error codes here.
+ * For now the cast allows compiling with -Wsign-conversion */
+ ret = (size_t)archive_read_data((struct archive*)fp, ptr, size);
}
return(ret);
}
@@ -541,7 +543,7 @@ int SYMEXPORT alpm_pkg_changelog_close(const pmpkg_t *pkg, void *fp)
return(ret);
}
-unsigned short SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)
+int SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)
{
ALPM_LOG_FUNC;
diff --git a/lib/libalpm/remove.c b/lib/libalpm/remove.c
index f31fbfb..ddc0987 100644
--- a/lib/libalpm/remove.c
+++ b/lib/libalpm/remove.c
@@ -372,13 +372,14 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)
ASSERT(db != NULL, RET_ERR(PM_ERR_DB_NULL, -1));
ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
- pkg_count = alpm_list_count(trans->remove);
+ pkg_count = (int)alpm_list_count(trans->remove);
for(targ = trans->remove; targ; targ = targ->next) {
int position = 0;
char scriptlet[PATH_MAX];
info = (pmpkg_t*)targ->data;
const char *pkgname = NULL;
+ int targcount = (int)alpm_list_count(targ);
if(handle->trans->state == STATE_INTERRUPTED) {
return(0);
@@ -410,10 +411,10 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)
}
}
- int filenum = alpm_list_count(files);
+ unsigned int filenum = alpm_list_count(files);
double percent = 0.0;
alpm_list_t *newfiles;
- _alpm_log(PM_LOG_DEBUG, "removing %d files\n", filenum);
+ _alpm_log(PM_LOG_DEBUG, "removing %ud files\n", filenum);
/* iterate through the list backwards, unlinking files */
newfiles = alpm_list_reverse(files);
@@ -424,7 +425,7 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)
percent = (double)position / (double)filenum;
PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, info->name,
(double)(percent * 100), pkg_count,
- (pkg_count - alpm_list_count(targ) + 1));
+ (pkg_count - targcount + 1));
position++;
}
alpm_list_free(newfiles);
@@ -432,7 +433,7 @@ int _alpm_remove_packages(pmtrans_t *trans, pmdb_t *db)
/* set progress to 100% after we finish unlinking files */
PROGRESS(trans, PM_TRANS_PROGRESS_REMOVE_START, pkgname, 100,
- pkg_count, (pkg_count - alpm_list_count(targ) + 1));
+ pkg_count, (pkg_count - targcount + 1));
/* run the post-remove script if it exists */
if(alpm_pkg_has_scriptlet(info) && !(trans->flags & PM_TRANS_FLAG_NOSCRIPTLET)) {
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index a1a6ea7..392d66a 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -691,7 +691,7 @@ static int apply_deltas(pmtrans_t *trans)
pmdelta_t *d = dlts->data;
char *delta, *from, *to;
char command[PATH_MAX];
- int len = 0;
+ size_t len = 0;
delta = _alpm_filecache_find(d->delta);
/* the initial package might be in a different cachedir */
@@ -788,7 +788,7 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)
{
alpm_list_t *i, *j, *files = NULL;
alpm_list_t *deltas = NULL;
- int replaces = 0;
+ unsigned int replaces = 0;
int errors = 0;
const char *cachedir = NULL;
int ret = -1;
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index c99f596..3ac6af3 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -407,7 +407,7 @@ cleanup:
return(retval);
}
-unsigned int SYMEXPORT alpm_trans_get_flags()
+int SYMEXPORT alpm_trans_get_flags()
{
/* Sanity checks */
ASSERT(handle != NULL, return(-1));
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index f78d193..9e91658 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -200,8 +200,7 @@ char *_alpm_strtrim(char *str)
int _alpm_lckmk()
{
int fd;
- pid_t pid;
- char *dir, *ptr, *spid = NULL;
+ char *dir, *ptr;
const char *file = alpm_option_get_lockfile();
/* create the dir of the lockfile first */
@@ -216,13 +215,11 @@ int _alpm_lckmk()
while((fd = open(file, O_WRONLY | O_CREAT | O_EXCL, 0000)) == -1
&& errno == EINTR);
if(fd > 0) {
- pid = getpid();
- size_t len = snprintf(spid, 0, "%ld\n", (long)pid) + 1;
- spid = malloc(len);
- snprintf(spid, len, "%ld\n", (long)pid);
- while(write(fd, (void *)spid, len) == -1 && errno == EINTR);
+ FILE *f = fdopen(fd, "w");
+ fprintf(f, "%ld\n", (long)getpid());
+ fflush(f);
fsync(fd);
- free(spid);
+ fclose(f);
return(fd);
}
return(-1);
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 1dd3ffb..551e769 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -90,10 +90,10 @@ static float get_update_timediff(int first_call)
static void fill_progress(const int bar_percent, const int disp_percent,
const int proglen)
{
- const unsigned int hashlen = proglen - 8;
- const unsigned int hash = bar_percent * hashlen / 100;
- static unsigned int lasthash = 0, mouth = 0;
- unsigned int i;
+ const int hashlen = proglen - 8;
+ const int hash = bar_percent * hashlen / 100;
+ static int lasthash = 0, mouth = 0;
+ int i;
if(bar_percent == 0) {
lasthash = 0;
@@ -323,7 +323,8 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
int tmp, digits, textlen;
char *opr = NULL;
/* used for wide character width determination and printing */
- int len, wclen, wcwid, padwid;
+ size_t len;
+ int wclen, wcwid, padwid;
wchar_t *wcstr;
if(config->noprogressbar) {
@@ -396,7 +397,12 @@ void cb_trans_progress(pmtransprog_t event, const char *pkgname, int percent,
wclen += mbstowcs(wcstr + wclen, " ", len - wclen);
wclen += mbstowcs(wcstr + wclen, pkgname, len - wclen);
#endif
- wcwid = wcswidth(wcstr, wclen);
+ if(wclen < 0) {
+ /* we're probably screwed, so... */
+ free(wcstr);
+ return;
+ }
+ wcwid = wcswidth(wcstr, (size_t)wclen);
padwid = textlen - wcwid;
/* if padwid is < 0, we need to trim the string so padwid = 0 */
if(padwid < 0) {
@@ -452,7 +458,8 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
const int filenamelen = infolen - 27;
char *fname, *p;
/* used for wide character width determination and printing */
- int len, wclen, wcwid, padwid;
+ size_t len;
+ int wclen, wcwid, padwid;
wchar_t *wcfname;
int totaldownload;
@@ -508,7 +515,7 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
rate = xfered / (timediff * 1024.0);
/* round elapsed time to the nearest second */
- eta_s = (int)(timediff + 0.5);
+ eta_s = (unsigned int)(timediff + 0.5);
} else {
/* compute current average values */
timediff = get_update_timediff(0);
@@ -557,7 +564,13 @@ void cb_dl_progress(const char *filename, off_t file_xfered, off_t file_total)
len = strlen(filename) + 1;
wcfname = calloc(len, sizeof(wchar_t));
wclen = mbstowcs(wcfname, fname, len);
- wcwid = wcswidth(wcfname, wclen);
+ if(wclen < 0) {
+ /* we're probably screwed, so... */
+ free(fname);
+ free(wcfname);
+ return;
+ }
+ wcwid = wcswidth(wcfname, (size_t)wclen);
padwid = filenamelen - wcwid;
/* if padwid is < 0, we need to trim the string so padwid = 0 */
if(padwid < 0) {
diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 3c588a7..598657c 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -64,7 +64,7 @@ typedef struct __config_t {
unsigned short group;
pmtransflag_t flags;
unsigned short noask;
- unsigned int ask;
+ pmtransprog_t ask;
/* conf file options */
unsigned short chomp; /* I Love Candy! */
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index ac51502..5e824f4 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -612,7 +612,7 @@ static char *get_filename(const char *url) {
static char *get_destfile(const char *path, const char *filename) {
char *destfile;
/* len = localpath len + filename len + null */
- int len = strlen(path) + strlen(filename) + 1;
+ size_t len = strlen(path) + strlen(filename) + 1;
destfile = calloc(len, sizeof(char));
snprintf(destfile, len, "%s%s", path, filename);
@@ -622,7 +622,7 @@ static char *get_destfile(const char *path, const char *filename) {
static char *get_tempfile(const char *path, const char *filename) {
char *tempfile;
/* len = localpath len + filename len + '.part' len + null */
- int len = strlen(path) + strlen(filename) + 6;
+ size_t len = strlen(path) + strlen(filename) + 6;
tempfile = calloc(len, sizeof(char));
snprintf(tempfile, len, "%s%s.part", path, filename);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 353aae3..94e8f4a 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -232,9 +232,9 @@ char *mdirname(const char *path)
*/
void indentprint(const char *str, int indent)
{
- wchar_t *wcstr;
- const wchar_t *p;
- int len, cidx, cols;
+ wchar_t *wcstr, *p;
+ size_t len;
+ int cidx, cols;
if(!str) {
return;
@@ -260,7 +260,8 @@ void indentprint(const char *str, int indent)
while(*p) {
if(*p == L' ') {
- const wchar_t *q, *next;
+ const wchar_t *next;
+ wchar_t *q;
p++;
if(p == NULL || *p == L' ') continue;
next = wcschr(p, L' ');
@@ -271,7 +272,14 @@ void indentprint(const char *str, int indent)
len = 0;
q = p;
while(q < next) {
- len += wcwidth(*q++);
+ int w = wcwidth(*q);
+ if(w < 0) {
+ /* hmm. this is no good, kill this char */
+ *q = L'?';
+ w = 1;
+ }
+ q++;
+ len += (unsigned)w;
}
if(len > (cols - cidx - 1)) {
/* wrap to a newline and reindent */
@@ -377,7 +385,7 @@ char *strreplace(const char *str, const char *needle, const char *replace)
q = alpm_list_getdata(i);
if(q > p){
/* add chars between this occurence and last occurence, if any */
- strncpy(newp, p, q - p);
+ strncpy(newp, p, (unsigned)(q - p));
newp += q - p;
}
strncpy(newp, replace, replacesz);
@@ -411,7 +419,7 @@ alpm_list_t *strsplit(const char *str, const char splitchar)
char *dup = NULL;
while((str = strchr(str, splitchar))) {
- dup = strndup(prev, str - prev);
+ dup = strndup(prev, (size_t)(str - prev));
if(dup == NULL) {
return(NULL);
}
@@ -430,9 +438,9 @@ alpm_list_t *strsplit(const char *str, const char splitchar)
return(list);
}
-static int string_length(const char *s)
+static size_t string_length(const char *s)
{
- int len;
+ size_t len;
wchar_t *wcstr;
if(!s) {
@@ -442,7 +450,7 @@ static int string_length(const char *s)
len = strlen(s) + 1;
wcstr = calloc(len, sizeof(wchar_t));
len = mbstowcs(wcstr, s, len);
- len = wcswidth(wcstr, len);
+ len = (size_t)wcswidth(wcstr, len);
free(wcstr);
return(len);
@@ -450,16 +458,14 @@ static int string_length(const char *s)
void string_display(const char *title, const char *string)
{
- int len = 0;
-
if(title) {
- /* compute the length of title + a space */
- len = string_length(title) + 1;
printf("%s ", title);
}
if(string == NULL || string[0] == '\0') {
printf(_("None"));
} else {
+ /* compute the length of title + a space */
+ int len = string_length(title) + 1;
indentprint(string, len);
}
printf("\n");
--
1.6.4.4