summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Griffin <aaron@archlinux.org>2006-11-22 04:53:10 +0000
committerAaron Griffin <aaron@archlinux.org>2006-11-22 04:53:10 +0000
commit54691771831c97c7366bf8ee7c54da3952c22120 (patch)
tree6db658673d8009bb798c7c053621d431d171c891
parent3c7f616805b4e7b29a1b5ef8cf218627c9da34bd (diff)
downloadpacman-54691771831c97c7366bf8ee7c54da3952c22120.tar.xz
Removed global maxcols - it is looked up on the fly now, so the progress bar is
resized. Also used ioctl in place of the COLUMNS env variable
-rw-r--r--src/pacman/downloadprog.c3
-rw-r--r--src/pacman/list.c4
-rw-r--r--src/pacman/trans.c3
-rw-r--r--src/pacman/util.c22
4 files changed, 25 insertions, 7 deletions
diff --git a/src/pacman/downloadprog.c b/src/pacman/downloadprog.c
index f831656b..06345782 100644
--- a/src/pacman/downloadprog.c
+++ b/src/pacman/downloadprog.c
@@ -47,8 +47,6 @@ struct timeval initial_time;
/* pacman options */
extern config_t *config;
-extern unsigned int maxcols;
-
#define FILENAME_TRIM_LEN 21
#define UPDATE_SPEED_SEC 0.1
@@ -58,6 +56,7 @@ void log_progress(const char *filename, int xfered, int total)
int i, hash;
long chomp = 0;
char *fname, *p;
+ unsigned int maxcols = getcols();
unsigned int progresslen = maxcols - 57;
int percent = ((float)xfered) / ((float)total) * 100;
struct timeval current_time;
diff --git a/src/pacman/list.c b/src/pacman/list.c
index 0c271978..c95e8f3d 100644
--- a/src/pacman/list.c
+++ b/src/pacman/list.c
@@ -28,8 +28,6 @@
#include "util.h"
#include "list.h"
-extern int maxcols;
-
static list_t *list_last(list_t *list);
list_t *list_new()
@@ -127,6 +125,7 @@ void list_display(const char *title, list_t *list)
if(list) {
for(lp = list, cols = len; lp; lp = lp->next) {
int s = strlen((char *)lp->data)+1;
+ unsigned int maxcols = getcols();
if(s+cols >= maxcols) {
int i;
cols = len;
@@ -155,6 +154,7 @@ void pmlist_display(const char *title, pmlist_t *list)
if(list) {
for(lp = list, cols = len; lp; lp = alpm_list_next(lp)) {
int s = strlen(alpm_list_getdata(lp))+1;
+ unsigned int maxcols = getcols();
if(s+cols >= maxcols) {
int i;
cols = len;
diff --git a/src/pacman/trans.c b/src/pacman/trans.c
index 0b141906..1b9295e1 100644
--- a/src/pacman/trans.c
+++ b/src/pacman/trans.c
@@ -40,7 +40,6 @@
#define LOG_STR_LEN 256
extern config_t *config;
-extern unsigned int maxcols;
int prevpercent=0; /* for less progressbar output */
@@ -154,6 +153,7 @@ void cb_trans_evt(unsigned char event, void *data1, void *data2)
break;
case PM_TRANS_EVT_RETRIEVE_LOCAL:
MSG(NL, " %s [", (char*)data1);
+ unsigned int maxcols = getcols();
STRNCPY(out, (char*)data2, maxcols-42);
MSG(CL, "%s", out);
for(i = strlen(out); i < maxcols-43; i++) {
@@ -287,6 +287,7 @@ void cb_trans_progress(unsigned char event, char *pkgname, int percent, int howm
static int lasthash = 0, mouth = 0;
int i, hash;
long chomp = 0;
+ unsigned int maxcols = getcols();
unsigned int maxpkglen, progresslen = maxcols - 57;
char *ptr = NULL;
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 68f39e38..c6841e16 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -24,6 +24,9 @@
#include <sys/stat.h>
#endif
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
@@ -45,18 +48,33 @@
#include "conf.h"
#include "log.h"
-extern int maxcols;
extern config_t *config;
extern int neednl;
/* gets the current screen column width */
int getcols()
{
+#ifdef TIOCGSIZE
+ struct ttysize win;
+ if(ioctl(1, TIOCGSIZE, &win) == 0) {
+ return win.ts_cols;
+ }
+#elif defined(TIOCGWINSZ)
+ struct winsize win;
+ if(ioctl(1, TIOCGWINSZ, &win) == 0) {
+ return win.ws_col;
+ }
+#endif
+ else {
+ return -1;
+ }
+ /* Original envvar way - prone to display issues
const char *cenv = getenv("COLUMNS");
if(cenv != NULL) {
return atoi(cenv);
}
return -1;
+ */
}
/* does the same thing as 'mkdir -p' */
@@ -152,7 +170,7 @@ void indentprint(const char *str, int indent)
next = p + strlen(p);
}
len = next - p;
- if(len > (maxcols-cidx-1)) {
+ if(len > (getcols()-cidx-1)) {
/* newline */
int i;
fprintf(stdout, "\n");