summaryrefslogtreecommitdiffstats
path: root/Src/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/utils.c')
-rw-r--r--Src/utils.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/Src/utils.c b/Src/utils.c
index a1d7c8cc2..1130415db 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -313,12 +313,12 @@ zerrmsg(FILE *file, const char *fmt, va_list ap)
switch (*fmt++) {
case 's':
str = va_arg(ap, const char *);
- nicezputs(str, file);
+ nicezputs(str ? str : "(null)", file);
break;
case 'l': {
str = va_arg(ap, const char *);
num = va_arg(ap, int);
- fwrite(str, num, 1, file);
+ fwrite(str ? str : "(null)", num, 1, file);
break;
}
case 'L':
@@ -342,12 +342,8 @@ zerrmsg(FILE *file, const char *fmt, va_list ap)
break;
case 'c':
num = va_arg(ap, int);
-#ifdef MULTIBYTE_SUPPORT
- mb_charinit();
- zputs(wcs_nicechar(num, NULL, NULL), file);
-#else
- zputs(nicechar(num), file);
-#endif
+ MB_CHARINIT();
+ zputs(MB_NICECHAR(num), file);
break;
case 'e':
/* print the corresponding message for this errno */
@@ -760,12 +756,13 @@ zwcwidth(wint_t wc)
char *
pathprog(char *prog, char **namep)
{
- char **pp, ppmaxlen = 0, *buf, *funmeta;
+ char **pp, *buf, *funmeta;
+ size_t ppmaxlen = 0;
struct stat st;
for (pp = path; *pp; pp++)
{
- int len = strlen(*pp);
+ size_t len = strlen(*pp);
if (len > ppmaxlen)
ppmaxlen = len;
}
@@ -1257,7 +1254,8 @@ getnameddir(char *name)
/* Check if there is a scalar parameter with this name whose value *
* begins with a `/'. If there is, add it to the hash table and *
* return the new value. */
- if ((pm = (Param) paramtab->getnode(paramtab, name)) &&
+ if ((pm = (Param) realparamtab->getnode2(realparamtab, name)) &&
+ !pm->level &&
(PM_TYPE(pm->node.flags) == PM_SCALAR) &&
(str = getsparam(name)) && *str == '/') {
pm->node.flags |= PM_NAMEDDIR;
@@ -1645,7 +1643,9 @@ checkmailpath(char **s)
char buf[PATH_MAX * 2 + 1], **arr, **ap;
int buflen, ct = 1;
- if (lock) {
+ if (!lock)
+ zerr("%e: %s", errno, *s);
+ else {
char *fn;
pushheap();
@@ -1833,7 +1833,7 @@ adjustlines(int signalled)
int oldlines = zterm_lines;
#ifdef TIOCGWINSZ
- if (signalled || zterm_lines <= 0)
+ if ((signalled && !zterm_lines_preserve) || zterm_lines <= 0)
zterm_lines = shttyinfo.winsize.ws_row;
else
shttyinfo.winsize.ws_row = zterm_lines;
@@ -1858,7 +1858,7 @@ adjustcolumns(int signalled)
int oldcolumns = zterm_columns;
#ifdef TIOCGWINSZ
- if (signalled || zterm_columns <= 0)
+ if ((signalled && !zterm_columns_preserve) || zterm_columns <= 0)
zterm_columns = shttyinfo.winsize.ws_col;
else
shttyinfo.winsize.ws_col = zterm_columns;
@@ -7429,8 +7429,7 @@ lchdir(char const *path, struct dirsav *d, int hard)
#endif
} else {
level = 0;
- if (!d->dev && !d->ino) {
- stat(".", &st1);
+ if (!d->dev && !d->ino && !stat(".", &st1)) {
d->dev = st1.st_dev;
d->ino = st1.st_ino;
}