static void print_member __P((char *, int, int, int));
static void display_defaults __P((struct passwd *));
static void display_bound_defaults __P((int));
-static int get_ttycols __P((void));
static void print_wrap __P((int, int, int, ...));
#define print_def(a) print_wrap(4, 0, 1, a);
# define ts_cols ws_col
#endif
-static int
+int
get_ttycols()
{
char *p;
int exit_val;
{
char **p, **uvec[5];
- int i, linelen, linemax, ulen;
+ int i, linelen, linemax, ulen, plen;
static char *uvec1[] = {
- " -h | -K | -k | -L | -V | -v",
+ " -h |",
+ " -K |",
+ " -k |",
+ " -L |",
+ " -V |",
+ " -v",
NULL
};
static char *uvec2[] = {
- " -l [-U username] [-u username|#uid] [command]",
+ " -l",
+ " [-U username]",
+ " [-u username|#uid]",
+ " [command]",
NULL
};
static char *uvec3[] = {
}
/*
- * Print usage and wrap lines as needed.
- * Assumes an 80-character wide terminal, which is kind of bogus...
+ * Print usage and wrap lines as needed, depending on the
+ * tty width.
*/
ulen = (int)strlen(getprogname()) + 7;
- linemax = 80;
+ linemax = get_ttycols();
for (i = 0; uvec[i] != NULL; i++) {
- linelen = linemax - ulen;
printf("usage: %s", getprogname());
+ linelen = linemax - ulen;
for (p = uvec[i]; *p != NULL; p++) {
- if (linelen == linemax || (linelen -= strlen(*p)) >= 0) {
+ plen = (int)strlen(*p);
+ if (linelen >= plen || linelen == linemax - ulen) {
fputs(*p, stdout);
+ linelen -= plen;
} else {
p--;
- linelen = linemax;
+ linelen = linemax - ulen;
printf("\n%*s", ulen, "");
}
}
FILE *open_sudoers __P((const char *, int *));
void display_privs __P((VOID *, struct passwd *));
int display_cmnd __P((VOID *, struct passwd *));
+int get_ttycols __P((void));
void sudo_setenv __P((const char *, const char *, int));
void sudo_unsetenv __P((const char *));
void sudo_setgrent __P((void));