diff --git a/src/cmd/builtin/pty.c b/src/cmd/builtin/pty.c index a417b49f2aa5..4e93cdc203cf 100644 --- a/src/cmd/builtin/pty.c +++ b/src/cmd/builtin/pty.c @@ -782,7 +782,7 @@ dialogue(Sfio_t* mp, Sfio_t* lp, int delay, int timeout) { int op; int line; - int n; + intmax_t n; char* s; char* m; char* e; @@ -919,7 +919,7 @@ dialogue(Sfio_t* mp, Sfio_t* lp, int delay, int timeout) match(s, m, 1); break; case 's': - n = (int)strtol(s, &e, 0); + n = strtoll(s, &e, 0); if (*e) error(2, "%s: invalid delay -- milliseconds expected", s); if (n) diff --git a/src/lib/libast/comp/wordexp.c b/src/lib/libast/comp/wordexp.c index 8142caff8688..fdcbddb6423f 100644 --- a/src/lib/libast/comp/wordexp.c +++ b/src/lib/libast/comp/wordexp.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -45,7 +45,7 @@ static int sh_unquote(char* string) return sp-string; if((dp=sp) > string && sp[-1]=='$') { - int n=stresc(sp+1); + ptrdiff_t n=stresc(sp+1); /* copy all but trailing ' */ while(--n>0) *dp++ = *++sp; diff --git a/src/lib/libast/disc/sfkeyprintf.c b/src/lib/libast/disc/sfkeyprintf.c index 91c4d680606b..c12ec5e7deb8 100644 --- a/src/lib/libast/disc/sfkeyprintf.c +++ b/src/lib/libast/disc/sfkeyprintf.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -50,8 +51,8 @@ typedef struct typedef struct { char* next; - int delimiter; int first; + char delimiter; } Field_t; typedef union @@ -72,9 +73,9 @@ getfield(Field_t* f, int restore) { char* s; int n; - int c; - int lp; - int rp; + char c; + char lp; + char rp; char* b; if (!f->delimiter) @@ -150,9 +151,9 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) NOT_USED(sp); fp->level++; - if (fp->fmt.t_str && fp->fmt.n_str > 0 && (v = fmtbuf(fp->fmt.n_str + 1))) + if (fp->fmt.t_str && fp->fmt.n_str > 0 && (v = fmtbuf((size_t)(fp->fmt.n_str + 1)))) { - memcpy(v, fp->fmt.t_str, fp->fmt.n_str); + memcpy(v, fp->fmt.t_str, (size_t)fp->fmt.n_str); v[fp->fmt.n_str] = 0; b = v; for (;;) @@ -190,7 +191,7 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) x = FMT_case; else if (streq(a, "edit")) x = FMT_edit; - *(a + 4) = d; + *(a + 4) = (char)d; if (x) a = 0; } @@ -203,7 +204,7 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) h = (*fp->lookup)(fp->handle, &fp->fmt, a, &s, &n); fp->fmt.t_str = t; if (i) - *v++ = i; + *v++ = (char)i; } else { @@ -214,7 +215,7 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) switch (fp->fmt.fmt) { case 'c': - value->c = s ? *s : n; + value->c = s ? *s : (char)n; break; case 'd': case 'i': @@ -262,20 +263,20 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) fmt = *fp; fmt.fmt.form = v; - for (h = 0; h < elementsof(fmt.tmp); h++) + for (h = 0; h < (ssize_t)elementsof(fmt.tmp); h++) fmt.tmp[h] = 0; if (!fp->tmp[0] && !(fp->tmp[0] = sfstropen()) || sfprintf(fp->tmp[0], "%!", &fmt) <= 0 || !(s = sfstruse(fp->tmp[0]))) s = ""; - *(v - 1) = d; + *(v - 1) = (char)d; if (f.delimiter) - *f.next = d; - for (h = 0; h < elementsof(fmt.tmp); h++) + *f.next = (char)d; + for (h = 0; h < (ssize_t)elementsof(fmt.tmp); h++) if (fmt.tmp[h]) sfclose(fmt.tmp[h]); h = 1; break; } - *(v - 1) = d; + *(v - 1) = (char)d; } break; case FMT_edit: @@ -317,7 +318,7 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) value->s = "\n"; break; case '.': - value->i = n; + value->i = (int)n; break; default: if ((!fp->convert || !(value->s = (*fp->convert)(fp->handle, &fp->fmt, a, s, n))) && (!fp->tmp[0] && !(fp->tmp[0] = sfstropen()) || sfprintf(fp->tmp[0], "%%%c", fp->fmt.fmt) <= 0 || !(value->s = sfstruse(fp->tmp[0])))) @@ -328,49 +329,11 @@ getfmt(Sfio_t* sp, void* vp, Sffmt_t* dp) return 0; } -/* - * this is the original interface - */ - -#undef sfkeyprintf - -int +ssize_t sfkeyprintf(Sfio_t* sp, void* handle, const char* format, Sf_key_lookup_t lookup, Sf_key_convert_t convert) { - int i; - int r; - Fmt_t fmt; - - memset(&fmt, 0, sizeof(fmt)); - fmt.fmt.version = SFIO_VERSION; - fmt.fmt.form = (char*)format; - fmt.fmt.extf = getfmt; - fmt.handle = handle; - fmt.lookup = lookup; - fmt.convert = convert; - r = sfprintf(sp, "%!", &fmt) - fmt.invisible; - for (i = 0; i < elementsof(fmt.tmp); i++) - if (fmt.tmp[i]) - sfclose(fmt.tmp[i]); - for (i = 0; i < elementsof(fmt.re); i++) - if (fmt.re[i]) - regfree(fmt.re[i]); - return r; -} - -#undef _AST_API_H - -#include - -/* - * Sffmt_t* callback args - */ - -int -sfkeyprintf_20000308(Sfio_t* sp, void* handle, const char* format, Sf_key_lookup_t lookup, Sf_key_convert_t convert) -{ - int i; - int r; + size_t i; + ssize_t r; Fmt_t fmt; memset(&fmt, 0, sizeof(fmt)); diff --git a/src/lib/libast/features/api b/src/lib/libast/features/api index 830f0f281feb..5d92a9ae63fd 100644 --- a/src/lib/libast/features/api +++ b/src/lib/libast/features/api @@ -6,10 +6,6 @@ api ast 20120528 regexec regnexec regsubexec api ast 20120411 cmdopen -api ast 20110505 cmdopen - api ast 20100601 pathaccess pathcanon pathcat pathpath pathrepl -api ast 20000308 sfkeyprintf - print #define _AST_VERSION AST_VERSION /* pre-20100601 compatibility */ diff --git a/src/lib/libast/include/ast.h b/src/lib/libast/include/ast.h index 5768c2031cc9..d167f1334876 100644 --- a/src/lib/libast/include/ast.h +++ b/src/lib/libast/include/ast.h @@ -327,7 +327,7 @@ extern char* fmtesq(const char*, const char*); extern char* fmtident(const char*); extern char* fmtip4(uint32_t, int); extern char* fmtfmt(const char*); -extern char* fmtgid(int); +extern char* fmtgid(gid_t); extern char* fmtint(intmax_t, int); extern char* fmtmatch(const char*); extern char* fmtmode(mode_t, int); @@ -339,7 +339,7 @@ extern char* fmtre(const char*); extern char* fmtscale(Sfulong_t, unsigned int); extern char* fmtsignal(int); extern char* fmttime(const char*, time_t); -extern char* fmtuid(int); +extern char* fmtuid(uid_t); extern void* memdup(const void*, size_t); extern size_t memhash(const void*, int); extern unsigned long memsum(const void*, int, unsigned long); @@ -369,8 +369,8 @@ extern char* setenviron(const char*); extern pid_t spawnveg(const char*, char* const[], char* const[], pid_t, int); extern char* strcopy(char*, const char*); extern unsigned long strelapsed(const char*, char**, int); -extern int stresc(char*); -extern int strexp(char*, int); +extern ptrdiff_t stresc(char*); +extern ptrdiff_t strexp(char*, int); extern long streval(const char*, char**, long(*)(const char*, char**)); extern long strexpr(const char*, char**, long(*)(const char*, char**, void*), void*); extern int strgid(const char*); diff --git a/src/lib/libast/include/cmdarg.h b/src/lib/libast/include/cmdarg.h index 8ab85a048df2..3dbf1d638fa8 100644 --- a/src/lib/libast/include/cmdarg.h +++ b/src/lib/libast/include/cmdarg.h @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -31,20 +31,20 @@ #define CMD_VERSION 20120411L -#define CMD_CHECKED (1<<9) /* cmdopen() argv[0] ok */ -#define CMD_EMPTY (1<<0) /* run once, even if no args */ -#define CMD_EXACT (1<<1) /* last command must have argmax*/ -#define CMD_EXIT (1<<11) /* fatal error_info.exit() */ -#define CMD_IGNORE (1<<2) /* ignore EXIT_QUIT exit */ -#define CMD_INSERT (1<<3) /* argpat for insertion */ -#define CMD_MINIMUM (1<<4) /* argmax is a minimum */ -#define CMD_NEWLINE (1<<5) /* echo separator is newline */ -#define CMD_POST (1<<6) /* argpat is post arg position */ -#define CMD_QUERY (1<<7) /* trace and query each command */ -#define CMD_SILENT (1<<10) /* no error messages */ -#define CMD_TRACE (1<<8) /* trace each command */ +#define CMD_CHECKED (1U<<9) /* cmdopen() argv[0] ok */ +#define CMD_EMPTY (1U<<0) /* run once, even if no args */ +#define CMD_EXACT (1U<<1) /* last command must have argmax*/ +#define CMD_EXIT (1U<<11) /* fatal error_info.exit() */ +#define CMD_IGNORE (1U<<2) /* ignore EXIT_QUIT exit */ +#define CMD_INSERT (1U<<3) /* argpat for insertion */ +#define CMD_MINIMUM (1U<<4) /* argmax is a minimum */ +#define CMD_NEWLINE (1U<<5) /* echo separator is newline */ +#define CMD_POST (1U<<6) /* argpat is post arg position */ +#define CMD_QUERY (1U<<7) /* trace and query each command */ +#define CMD_SILENT (1U<<10) /* no error messages */ +#define CMD_TRACE (1U<<8) /* trace each command */ -#define CMD_USER (1<<12) +#define CMD_USER (1U<<12) #define CMDDISC(d,f,e) (memset(d,0,sizeof(*(d))),(d)->version=CMD_VERSION,(d)->flags=(f),(d)->errorf=(e)) @@ -72,10 +72,9 @@ typedef struct Cmdarg_s /* cmdopen() handle */ } Cmdarg_t; #ifndef cmdopen -extern Cmdarg_t* cmdopen(char**, int, int, const char*, int); +extern Cmdarg_t* cmdopen(char**, int, ssize_t, const char*, uint32_t); #endif -extern Cmdarg_t* cmdopen_20110505(char**, int, int, const char*, int, Error_f); -extern Cmdarg_t* cmdopen_20120411(char**, int, int, const char*, Cmddisc_t*); +extern Cmdarg_t* cmdopen_20120411(char**, int, ssize_t, const char*, Cmddisc_t*); extern int cmdflush(Cmdarg_t*); extern int cmdarg(Cmdarg_t*, const char*, int); extern int cmdclose(Cmdarg_t*); diff --git a/src/lib/libast/include/sfdisc.h b/src/lib/libast/include/sfdisc.h index 787953e5c644..06bcb7e62182 100644 --- a/src/lib/libast/include/sfdisc.h +++ b/src/lib/libast/include/sfdisc.h @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -38,8 +39,7 @@ typedef int (*Sf_key_lookup_t)(void*, Sffmt_t*, const char*, char**, Sflong_t*); typedef char* (*Sf_key_convert_t)(void*, Sffmt_t*, const char*, char*, Sflong_t); -extern int sfkeyprintf(Sfio_t*, void*, const char*, Sf_key_lookup_t, Sf_key_convert_t); -extern int sfkeyprintf_20000308(Sfio_t*, void*, const char*, Sf_key_lookup_t, Sf_key_convert_t); +extern ssize_t sfkeyprintf(Sfio_t*, void*, const char*, Sf_key_lookup_t, Sf_key_convert_t); /* * pure sfio read and/or write disciplines diff --git a/src/lib/libast/include/swap.h b/src/lib/libast/include/swap.h index e7b054b412f4..c337a37c7bbf 100644 --- a/src/lib/libast/include/swap.h +++ b/src/lib/libast/include/swap.h @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -36,8 +37,8 @@ #define SWAPOP(n) (((n)&int_swap)^(n)) extern void* swapmem(int, const void*, void*, size_t); -extern intmax_t swapget(int, const void*, int); -extern void* swapput(int, void*, int, intmax_t); -extern int swapop(const void*, const void*, int); +extern intmax_t swapget(int, const void*, size_t); +extern void* swapput(int, void*, size_t, intmax_t); +extern ssize_t swapop(const void*, const void*, ssize_t); #endif diff --git a/src/lib/libast/man/fmt.3 b/src/lib/libast/man/fmt.3 index 3870170e7397..45641950fa09 100644 --- a/src/lib/libast/man/fmt.3 +++ b/src/lib/libast/man/fmt.3 @@ -49,14 +49,14 @@ char* fmtdev(struct stat* \fIst\fP); char* fmtelapsed(unsigned long \fIcount\fP, unsigned long \fIpersec\fP) char* fmtesc(const char* \fIstring\fP); char* fmtfs(struct stat* \fIst\fP); -char* fmtgid(int \fIgid\fP); +char* fmtgid(gid_t \fIgid\fP); char* fmtmatch(const char* \fIre\fP); char* fmtmode(mode_t \fImode\fP, int \fIexternal\fP); char* fmtperm(mode_t \fIperm\fP); char* fmtre(const char* \fIpattern\fP); char* fmtsignal(int \fIsig\fP); char* fmttime(const char* \fIformat\fP, time_t \fItm\fP); -char* fmtuid(int \fIuid\fP); +char* fmtuid(uid_t \fIuid\fP); .EE .SH DESCRIPTION These routines return a pointer to a formatted string for various numeric diff --git a/src/lib/libast/man/regex.3 b/src/lib/libast/man/regex.3 index ea8907f70eff..d1663e41b737 100644 --- a/src/lib/libast/man/regex.3 +++ b/src/lib/libast/man/regex.3 @@ -50,7 +50,7 @@ void regfree(regex_t* \fIre\fP); regclass_t regclass(const char* \fIstr\fP, char** \fIend\fP); int regaddclass(const char* \fIname\fP, regclass_t \fIclassf\fP); -int regcollate(const char* \fIstr\fP, char** \fIend\fP, char* \fIbuf\fP, int \fIsize\fP); +int regcollate(const char* \fIstr\fP, char** \fIend\fP, char* \fIbuf\fP, size_t \fIsize\fP, wchar_t* \fIwchar\fP); regstat_t* regstat(const regex_t* \fIre\fP); diff --git a/src/lib/libast/man/stresc.3 b/src/lib/libast/man/stresc.3 index 971cec5f66c5..5930e8bbad56 100644 --- a/src/lib/libast/man/stresc.3 +++ b/src/lib/libast/man/stresc.3 @@ -40,7 +40,7 @@ .SH NAME stresc \- convert character constants in string .SH SYNOPSIS -.L "int stresc(char* s)" +.L "ptrdiff_t stresc(char* s)" .SH DESCRIPTION .I stresc converts diff --git a/src/lib/libast/man/swap.3 b/src/lib/libast/man/swap.3 index 28db4c2bcabe..ecddb99a8a04 100644 --- a/src/lib/libast/man/swap.3 +++ b/src/lib/libast/man/swap.3 @@ -42,11 +42,11 @@ swap \- integral representation conversion routines .SH SYNOPSIS .L "#include " .sp -.L "int swapop(const void* internal, const void* external, int width); +.L "ssize_t swapop(const void* internal, const void* external, ssize_t width); .br -.L "int_max swapget(int op, const void* from, int width);" +.L "intmax_t swapget(int op, const void* from, size_t width);" .br -.L "void* swapput(int op, void* to, int width, int_max value);" +.L "void* swapput(int op, void* to, size_t width, intmax_t value);" .br .L "void* swapmem(int op, const void* from, void* to, size_t n);" .SH DESCRIPTION diff --git a/src/lib/libast/misc/cmdarg.c b/src/lib/libast/misc/cmdarg.c index af70dd98ae8c..9e66f2b6f8ed 100644 --- a/src/lib/libast/misc/cmdarg.c +++ b/src/lib/libast/misc/cmdarg.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -41,7 +41,7 @@ cmdrun(int argc, char** argv, Cmddisc_t* disc) } Cmdarg_t* -cmdopen(char** argv, int argmax, int size, const char* argpat, int flags) +cmdopen(char** argv, int argmax, ssize_t size, const char* argpat, uint32_t flags) { Cmddisc_t disc; @@ -72,18 +72,6 @@ cmdopen(char** argv, int argmax, int size, const char* argpat, int flags) static const char* echo[] = { "echo", 0 }; -Cmdarg_t* -cmdopen_20110505(char** argv, int argmax, int size, const char* argpat, int flags, Error_f errorf) -{ - Cmddisc_t disc; - - memset(&disc, 0, sizeof(disc)); - disc.version = CMD_VERSION; - disc.flags = flags; - disc.errorf = errorf; - return cmdopen_20120411(argv, argmax, size, argpat, &disc); -} - /* * open a cmdarg stream * initialize the command for execution @@ -91,22 +79,22 @@ cmdopen_20110505(char** argv, int argmax, int size, const char* argpat, int flag */ Cmdarg_t* -cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_t* disc) +cmdopen_20120411(char** argv, int argmax, ssize_t size, const char* argpat, Cmddisc_t* disc) { Cmdarg_t* cmd; - int n; + ssize_t n; char** p; char* s; char* sh; char* exe; - int c; - int m; + ssize_t c; + ssize_t m; int argc; - long x; + ssize_t x; char** post = 0; - n = sizeof(char**); + n = (ssize_t)sizeof(char**); if (*argv) { for (p = argv + 1; *p; p++) @@ -120,23 +108,23 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ else n += strlen(*p) + 1; } - argc = p - argv; + argc = (int)(p - argv); } else argc = 0; for (p = environ; *p; p++) - n += sizeof(char**) + strlen(*p) + 1; - if ((x = astconf_long(CONF_ARG_MAX)) <= 0) + n += (ssize_t)(sizeof(char**) + strlen(*p) + 1); + if ((x = (ssize_t)astconf_long(CONF_ARG_MAX)) <= 0) x = ARG_MAX; if (size <= 0 || size > x) size = x; sh = astconf("SH", NULL, NULL); - m = n + (argc + 4) * sizeof(char**) + strlen(sh) + 1; - m = roundof(m, sizeof(char**)); + m = n + (argc + 4) * (ssize_t)sizeof(char**) + (ssize_t)strlen(sh) + 1; + m = (ssize_t)roundof((size_t)m, sizeof(char**)); if (size < m) { if (disc->errorf) - (*disc->errorf)(NULL, sh, 2, "size must be at least %d", m); + (*disc->errorf)(NULL, sh, 2, "size must be at least %jd", (intmax_t)m); return NULL; } if ((m = x / 10) > 2048) @@ -144,8 +132,8 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ if (size > (x - m)) size = x - m; n = size - n; - m = ((disc->flags & CMD_INSERT) && argpat) ? (strlen(argpat) + 1) : 0; - if (!(cmd = newof(0, Cmdarg_t, 1, n + m))) + m = ((disc->flags & CMD_INSERT) && argpat) ? ((ssize_t)strlen(argpat) + 1) : 0; + if (!(cmd = newof(0, Cmdarg_t, 1, (size_t)(n + m)))) { if (disc->errorf) (*disc->errorf)(NULL, sh, ERROR_SYSTEM|2, "out of memory"); @@ -156,9 +144,9 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ cmd->errorf = disc->errorf; if (!(cmd->runf = disc->runf)) cmd->runf = cmdrun; - c = n / sizeof(char**); + c = n / (ssize_t)sizeof(char**); if (argmax <= 0 || argmax > c) - argmax = c; + argmax = (int)c; s = cmd->buf; if (!(exe = argv[0])) { @@ -172,13 +160,13 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ } else if (!(disc->flags & CMD_CHECKED)) { - if (!pathpath(exe, NULL, PATH_REGULAR|PATH_EXECUTE, s, n + m)) + if (!pathpath(exe, NULL, PATH_REGULAR|PATH_EXECUTE, s, (size_t)(n + m))) { - n = EXIT_NOTFOUND; + int ret = EXIT_NOTFOUND; if (cmd->errorf) (*cmd->errorf)(NULL, cmd, ERROR_SYSTEM|2, "%s: command not found", exe); if (disc->flags & CMD_EXIT) - (*error_info.exit)(n); + (*error_info.exit)(ret); free(cmd); return NULL; } @@ -188,10 +176,10 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ if (m) { cmd->insert = strcpy(s, argpat); - cmd->insertlen = m - 1; + cmd->insertlen = (size_t)m - 1; s += m; } - s += sizeof(char**) - (s - cmd->buf) % sizeof(char**); + s += sizeof(char**) - (size_t)(s - cmd->buf) % sizeof(char**); p = (char**)s; n -= strlen(*p++ = sh) + 1; cmd->argv = p; @@ -207,7 +195,7 @@ cmdopen_20120411(char** argv, int argmax, int size, const char* argpat, Cmddisc_ c = *cmd->insert; while (s = *argv) { - while ((s = strchr(s, c)) && strncmp(cmd->insert, s, cmd->insertlen)) + while ((s = strchr(s, (int)c)) && strncmp(cmd->insert, s, cmd->insertlen)) s++; *p++ = s ? *argv : NULL; argv++; @@ -243,7 +231,7 @@ cmdflush(Cmdarg_t* cmd) (*cmd->errorf)(NULL, cmd, 2, "%d arg command would be too long", cmd->argcount); return -1; } - cmd->total.args += cmd->argcount; + cmd->total.args += (size_t)cmd->argcount; cmd->total.commands++; cmd->argcount = 0; if (p = cmd->postarg) @@ -258,7 +246,7 @@ cmdflush(Cmdarg_t* cmd) char* t; char* u; int c; - int m; + size_t m; a = cmd->firstarg[0]; b = (char*)&cmd->nextarg[1]; @@ -273,12 +261,12 @@ cmdflush(Cmdarg_t* cmd) { if (!(u = strchr(t, c))) { - b += sfsprintf(b, e - b, "%s", t); + b += sfsprintf(b, (size_t)(e - b), "%s", t); break; } if (!strncmp(s, u, m)) { - b += sfsprintf(b, e - b, "%-.*s%s", u - t, t, a); + b += sfsprintf(b, (size_t)(e - b), "%-.*s%s", u - t, t, a); t = u + m; } else if (b >= e) @@ -375,7 +363,7 @@ cmdarg(Cmdarg_t* cmd, const char* file, int len) } } *cmd->nextarg++ = cmd->nextstr; - memcpy(cmd->nextstr, file, len); + memcpy(cmd->nextstr, file, (size_t)len); cmd->nextstr[len] = 0; cmd->argcount++; if (cmd->argcount >= cmd->argmax && (i = cmdflush(cmd)) > r) diff --git a/src/lib/libast/regex/regcache.c b/src/lib/libast/regex/regcache.c index 8b251cfc90ba..b1c7f2e765de 100644 --- a/src/lib/libast/regex/regcache.c +++ b/src/lib/libast/regex/regcache.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -38,12 +38,12 @@ typedef struct Cache_s unsigned long serial; regflags_t reflags; int keep; - int size; + size_t size; } Cache_t; typedef struct State_s { - unsigned int size; + size_t size; unsigned long serial; char* locale; Cache_t** cache; @@ -58,9 +58,9 @@ static State_t matchstate; static void flushcache(void) { - int i; + ssize_t i; - for (i = matchstate.size; i--;) + for (i = (ssize_t)matchstate.size; i--;) if (matchstate.cache[i] && matchstate.cache[i]->keep) { matchstate.cache[i]->keep = 0; @@ -76,11 +76,12 @@ regex_t* regcache(const char* pattern, regflags_t reflags, int* status) { Cache_t* cp; - int i; + ssize_t i; + int j; char* s; - int empty; - int unused; - int old; + ssize_t empty; + ssize_t unused; + ssize_t old; Key_t key; /* @@ -90,7 +91,7 @@ regcache(const char* pattern, regflags_t reflags, int* status) if (!pattern) { flushcache(); - i = 0; + j = 0; if (reflags > matchstate.size) { if (matchstate.cache = newof(matchstate.cache, Cache_t*, reflags, 0)) @@ -98,11 +99,11 @@ regcache(const char* pattern, regflags_t reflags, int* status) else { matchstate.size = 0; - i = 1; + j = 1; } } if (status) - *status = i; + *status = j; return NULL; } if (!matchstate.cache) @@ -128,13 +129,13 @@ regcache(const char* pattern, regflags_t reflags, int* status) * check if the pattern is in the cache */ - for (i = 0; i < sizeof(key) && pattern[i]; i++) + for (i = 0; i < (ssize_t)sizeof(key) && pattern[i]; i++) ((char*)&key)[i] = pattern[i]; - for (; i < sizeof(key); i++) + for (; i < (ssize_t)sizeof(key); i++) ((char*)&key)[i] = 0; empty = unused = -1; old = 0; - for (i = matchstate.size; i--;) + for (i = (ssize_t)matchstate.size; i--;) if (!matchstate.cache[i]) empty = i; else if (!matchstate.cache[i]->keep) @@ -163,9 +164,9 @@ regcache(const char* pattern, regflags_t reflags, int* status) cp->keep = 0; regfree(&cp->re); } - if ((i = strlen(pattern) + 1) > cp->size) + if ((i = (ssize_t)strlen(pattern) + 1) > (ssize_t)cp->size) { - cp->size = roundof(i, ROUND); + cp->size = (size_t)roundof(i, ROUND); if (!(cp->pattern = newof(cp->pattern, char, cp->size, 0))) { if (status) @@ -174,13 +175,13 @@ regcache(const char* pattern, regflags_t reflags, int* status) } } strcpy(cp->pattern, pattern); - while (++i < sizeof(Key_t)) + while (++i < (ssize_t)sizeof(Key_t)) cp->pattern[i] = 0; pattern = (const char*)cp->pattern; - if (i = regcomp(&cp->re, pattern, reflags)) + if (j = regcomp(&cp->re, pattern, reflags)) { if (status) - *status = i; + *status = j; return NULL; } cp->keep = 1; diff --git a/src/lib/libast/regex/regclass.c b/src/lib/libast/regex/regclass.c index 24c5ffd27d41..3f619dff6a39 100644 --- a/src/lib/libast/regex/regclass.c +++ b/src/lib/libast/regex/regclass.c @@ -62,29 +62,29 @@ _reg_iswblank(wint_t wc) #endif -static int Isalnum(int c) { return iswalnum(c); } +static int Isalnum(int c) { return iswalnum((wint_t)c); } static int Isalpha(int c) { return iswalpha(c); } -static int Isblank(int c) { return iswblank(c); } -static int Iscntrl(int c) { return iswcntrl(c); } -static int Isdigit(int c) { return iswdigit(c); } -static int Notdigit(int c) { return !iswdigit(c); } -static int Isgraph(int c) { return iswgraph(c); } -static int Islower(int c) { return iswlower(c); } -static int Isprint(int c) { return iswprint(c); } +static int Isblank(int c) { return iswblank((wint_t)c); } +static int Iscntrl(int c) { return iswcntrl((wint_t)c); } +static int Isdigit(int c) { return iswdigit((wint_t)c); } +static int Notdigit(int c) { return !iswdigit((wint_t)c); } +static int Isgraph(int c) { return iswgraph((wint_t)c); } +static int Islower(int c) { return iswlower((wint_t)c); } +static int Isprint(int c) { return iswprint((wint_t)c); } static int Ispunct(int c) { #if _iswpunct_broken /* workaround assumes ASCII */ if (c < 128) return ispunct(c); #endif - return iswpunct(c); + return iswpunct((wint_t)c); } -static int Isspace(int c) { return iswspace(c); } -static int Notspace(int c) { return !iswspace(c); } -static int Isupper(int c) { return iswupper(c); } -static int Isword(int c) { return iswalnum(c) || c == '_'; } -static int Notword(int c) { return !iswalnum(c) && c != '_'; } -static int Isxdigit(int c) { return iswxdigit(c);} +static int Isspace(int c) { return iswspace((wint_t)c); } +static int Notspace(int c) { return !iswspace((wint_t)c); } +static int Isupper(int c) { return iswupper((wint_t)c); } +static int Isword(int c) { return iswalnum((wint_t)c) || c == '_'; } +static int Notword(int c) { return !iswalnum((wint_t)c) && c != '_'; } +static int Isxdigit(int c) { return iswxdigit((wint_t)c);} #if _lib_wctype @@ -156,22 +156,22 @@ static Ctype_t ctype[] = #if _lib_wctype -static int Is_wc_1(int c) { return iswctype(c, ctype[CTYPES+0].wtype); } -static int Is_wc_2(int c) { return iswctype(c, ctype[CTYPES+1].wtype); } -static int Is_wc_3(int c) { return iswctype(c, ctype[CTYPES+2].wtype); } -static int Is_wc_4(int c) { return iswctype(c, ctype[CTYPES+3].wtype); } -static int Is_wc_5(int c) { return iswctype(c, ctype[CTYPES+4].wtype); } -static int Is_wc_6(int c) { return iswctype(c, ctype[CTYPES+5].wtype); } -static int Is_wc_7(int c) { return iswctype(c, ctype[CTYPES+6].wtype); } -static int Is_wc_8(int c) { return iswctype(c, ctype[CTYPES+7].wtype); } -static int Is_wc_9(int c) { return iswctype(c, ctype[CTYPES+8].wtype); } -static int Is_wc_10(int c) { return iswctype(c, ctype[CTYPES+9].wtype); } -static int Is_wc_11(int c) { return iswctype(c, ctype[CTYPES+10].wtype); } -static int Is_wc_12(int c) { return iswctype(c, ctype[CTYPES+11].wtype); } -static int Is_wc_13(int c) { return iswctype(c, ctype[CTYPES+12].wtype); } -static int Is_wc_14(int c) { return iswctype(c, ctype[CTYPES+13].wtype); } -static int Is_wc_15(int c) { return iswctype(c, ctype[CTYPES+14].wtype); } -static int Is_wc_16(int c) { return iswctype(c, ctype[CTYPES+15].wtype); } +static int Is_wc_1(int c) { return iswctype((wint_t)c, ctype[CTYPES+0].wtype); } +static int Is_wc_2(int c) { return iswctype((wint_t)c, ctype[CTYPES+1].wtype); } +static int Is_wc_3(int c) { return iswctype((wint_t)c, ctype[CTYPES+2].wtype); } +static int Is_wc_4(int c) { return iswctype((wint_t)c, ctype[CTYPES+3].wtype); } +static int Is_wc_5(int c) { return iswctype((wint_t)c, ctype[CTYPES+4].wtype); } +static int Is_wc_6(int c) { return iswctype((wint_t)c, ctype[CTYPES+5].wtype); } +static int Is_wc_7(int c) { return iswctype((wint_t)c, ctype[CTYPES+6].wtype); } +static int Is_wc_8(int c) { return iswctype((wint_t)c, ctype[CTYPES+7].wtype); } +static int Is_wc_9(int c) { return iswctype((wint_t)c, ctype[CTYPES+8].wtype); } +static int Is_wc_10(int c) { return iswctype((wint_t)c, ctype[CTYPES+9].wtype); } +static int Is_wc_11(int c) { return iswctype((wint_t)c, ctype[CTYPES+10].wtype); } +static int Is_wc_12(int c) { return iswctype((wint_t)c, ctype[CTYPES+11].wtype); } +static int Is_wc_13(int c) { return iswctype((wint_t)c, ctype[CTYPES+12].wtype); } +static int Is_wc_14(int c) { return iswctype((wint_t)c, ctype[CTYPES+13].wtype); } +static int Is_wc_15(int c) { return iswctype((wint_t)c, ctype[CTYPES+14].wtype); } +static int Is_wc_16(int c) { return iswctype((wint_t)c, ctype[CTYPES+15].wtype); } #endif @@ -199,7 +199,7 @@ regclass(const char* s, char** e) if (!(c = *s++)) return NULL; for (t = s; *t && (*t != c || *(t + 1) != ']'); t++); - if (*t != c || !(n = t - s)) + if (*t != c || !(n = (size_t)(t - s))) return NULL; for (cp = ctypes; cp; cp = cp->next) if (n == cp->size && strneq(s, cp->name, n)) diff --git a/src/lib/libast/regex/regcoll.c b/src/lib/libast/regex/regcoll.c index aaea43895eef..9fbdd05adc2b 100644 --- a/src/lib/libast/regex/regcoll.c +++ b/src/lib/libast/regex/regcoll.c @@ -38,19 +38,19 @@ int regcollate(const char* s, char** e, char* buf, size_t size, wchar_t* wc) { - int c; + char c; + char term; char* b; char* x; const char* t; - int r; - int term; + ptrdiff_t r; wchar_t w; if (size < 2 || (term = *s) != '.' && term != '=' || !*++s || *s == term && *(s + 1) == ']') goto nope; t = s; w = mbchar(s); - if ((r = (s - t)) > 1) + if ((r = s - t) > 1) { if (*s++ != term || *s++ != ']') goto oops; @@ -90,9 +90,9 @@ regcollate(const char* s, char** e, char* buf, size_t size, wchar_t* wc) if(!ast.locale.transform) goto nope; { - char tmp[256]; - int i; - for (i = 0; i < r && i < sizeof(tmp) - 1; i++) + char tmp[256]; + ssize_t i; + for (i = 0; i < r && i < (ssize_t)sizeof(tmp) - 1; i++) tmp[i] = '0'; tmp[i] = 0; if (ast.locale.transform(NULL, buf, 0) >= ast.locale.transform(NULL, tmp, 0)) @@ -100,17 +100,17 @@ regcollate(const char* s, char** e, char* buf, size_t size, wchar_t* wc) } t = (const char*)buf; done: - if (r <= size && (char*)t != buf) + if (r <= (ssize_t)size && (char*)t != buf) { - memcpy(buf, t, r); - if (r < size) + memcpy(buf, t, (size_t)r); + if (r < (ssize_t)size) buf[r] = 0; } if (wc) *wc = w; if (e) *e = (char*)s; - return r; + return (int)r; oops: s--; nope: diff --git a/src/lib/libast/regex/regcomp.c b/src/lib/libast/regex/regcomp.c index fc6473c01093..cadc981d04c1 100644 --- a/src/lib/libast/regex/regcomp.c +++ b/src/lib/libast/regex/regcomp.c @@ -73,6 +73,7 @@ typedef struct Stats_s unsigned long k; /* min length to left of y */ unsigned long m; /* min length */ unsigned long n; /* max length */ + unsigned long t; /* number of tries */ unsigned short a; /* number of alternations */ unsigned short b; /* number of backrefs */ unsigned short c; /* number of closures */ @@ -80,7 +81,6 @@ typedef struct Stats_s unsigned short i; /* number of negations */ unsigned short p; /* number of named subexpressions */ unsigned short s; /* number of simple closures */ - unsigned short t; /* number of tries */ unsigned short u; /* number of unnamed subexpressions */ Rex_t* x; /* max length REX_STRING */ Rex_t* y; /* max length REX_TRIE */ @@ -90,9 +90,9 @@ typedef struct Token_s { unsigned long min; unsigned long max; + ptrdiff_t len; + ptrdiff_t esc; short lex; - short len; - short esc; short att; short push; } Token_t; @@ -133,11 +133,11 @@ typedef struct Cenv_s #endif static Rex_t* -node(Cenv_t* env, int type, int lo, int hi, size_t extra) +node(Cenv_t* env, unsigned char type, ptrdiff_t lo, ptrdiff_t hi, size_t extra) { Rex_t* e; - DEBUG_TEST(0x0800,(sfprintf(sfstdout, "node(%d,%d,%d,%u)\n", type, lo, hi, sizeof(Rex_t) + extra)),(0)); + DEBUG_TEST(0x0800,(sfprintf(sfstdout, "node(%u,%td,%td,%zu)\n", (unsigned int)type, lo, hi, sizeof(Rex_t) + extra)),(0)); if (e = (Rex_t*)alloc(env->disc, 0, sizeof(Rex_t) + extra)) { memset(e, 0, sizeof(Rex_t) + extra); @@ -321,8 +321,8 @@ cat(Cenv_t* env, Rex_t* e, Rex_t* f) } else if (e->type == REX_DOT && f->type == REX_DOT) { - unsigned int m = e->lo + f->lo; - unsigned int n = e->hi + f->hi; + ptrdiff_t m = e->lo + f->lo; + ptrdiff_t n = e->hi + f->hi; if (m <= RE_DUP_MAX) { @@ -366,8 +366,8 @@ stats(Cenv_t* env, Rex_t* e) Rex_t* q; Rex_t* x; Rex_t* y; - unsigned char c; - unsigned char b; + unsigned short c; + unsigned short b; do { @@ -420,12 +420,12 @@ stats(Cenv_t* env, Rex_t* e) case REX_DOT: case REX_ONECHAR: n = env->stats.m; - if ((env->stats.m += e->lo) < n) + if ((env->stats.m += (size_t)e->lo) < n) return 1; if (e->hi != RE_DUP_INF) { n = env->stats.n; - if ((env->stats.n += e->hi) < n) + if ((env->stats.n += (size_t)e->hi) < n) return 1; } if (e->lo != e->hi) @@ -579,7 +579,7 @@ stats(Cenv_t* env, Rex_t* e) else { m = env->stats.m; - if ((env->stats.m *= e->lo) > 0 && env->stats.m < m) + if ((env->stats.m *= (size_t)e->lo) > 0 && env->stats.m < m) return 1; m = env->stats.m; if ((env->stats.m += cm) < m) @@ -610,10 +610,10 @@ stats(Cenv_t* env, Rex_t* e) if (++env->stats.s <= 0) return 1; cm = env->stats.m; - if ((env->stats.m += e->re.trie.min) < cm) + if ((env->stats.m += (size_t)e->re.trie.min) < cm) return 1; cn = env->stats.n; - if ((env->stats.n += e->re.trie.max) < cn) + if ((env->stats.n += (size_t)e->re.trie.max) < cn) return 1; env->stats.t++; if (!env->stats.y || env->stats.y->re.trie.min < e->re.trie.min) @@ -636,7 +636,7 @@ magic(Cenv_t* env, int c, int escaped) int n; int o = c; int e = env->error; - int l = env->token.len; + ptrdiff_t l = env->token.len; short* mp; char* ep; @@ -673,7 +673,7 @@ magic(Cenv_t* env, int c, int escaped) env->error = REG_BADBR; goto bad; } - env->token.min = n; + env->token.min = (unsigned long)n; if (*sp == ',') { n = 0; @@ -689,13 +689,13 @@ magic(Cenv_t* env, int c, int escaped) } if (sp == ep) n = RE_DUP_INF; - else if (n < env->token.min) + else if ((unsigned)n < env->token.min) { env->error = REG_BADBR; goto bad; } } - env->token.max = n; + env->token.max = (unsigned long)n; switch (*sp) { case 0: @@ -748,7 +748,7 @@ magic(Cenv_t* env, int c, int escaped) env->token.len += ep - sp; if (c >= T_META) { - env->token.lex = c; + env->token.lex = (short)c; c = C_ESC; } return c; @@ -810,13 +810,13 @@ magic(Cenv_t* env, int c, int escaped) case T_AT: break; case T_PERCENT: - env->token.lex = c; + env->token.lex = (short)c; goto group; case T_TILDE: env->token.lex = 0; goto group; default: - env->token.lex = c; + env->token.lex = (short)c; break; } c = T_OPEN; @@ -1052,7 +1052,7 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in cc = -1; } } - *k++ = c; + *k++ = (unsigned char)c; } else if (bw < COLL_KEY_MAX) { @@ -1060,14 +1060,14 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in if (ic) { c = mbchar(s); - if (iswupper(c)) + if (iswupper((wint_t)c)) { - c = towlower(c); + c = (int)towlower((wint_t)c); cc = 1; } - else if (iswlower(c)) + else if (iswlower((wint_t)c)) { - c = towupper(c); + c = (int)towupper((wint_t)c); cc = 1; } } @@ -1077,7 +1077,7 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in k += mbconv((char*)k, c); } else - for (e = k + bw; k < e; *k++ = *s++); + for (e = k + bw; k < e; *k++ = (unsigned char)*s++); } *k = 0; ast.locale.transform((char*)ce->beg, (const char*)key, COLL_KEY_MAX); @@ -1085,9 +1085,9 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in { k = key; c = mbchar(k); - if (iswupper(c)) + if (iswupper((wint_t)c)) bt = COLL_range_uc; - else if (iswlower(c)) + else if (iswlower((wint_t)c)) bt = COLL_range_lc; else bt = COLL_range; @@ -1108,7 +1108,7 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in cc = -1; } } - *k++ = c; + *k++ = (unsigned char)c; } else if (ew < COLL_KEY_MAX) { @@ -1116,14 +1116,14 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in if (ic) { c = mbchar(s); - if (iswupper(c)) + if (iswupper((wint_t)c)) { - c = towlower(c); + c = (int)towlower((wint_t)c); cc = 1; } - else if (iswlower(c)) + else if (iswlower((wint_t)c)) { - c = towupper(c); + c = (int)towupper((wint_t)c); cc = 1; } } @@ -1133,19 +1133,19 @@ col(Celt_t* ce, int ic, unsigned char* bp, int bw, int bc, unsigned char* ep, in k += mbconv((char*)k, c); } else - for (e = k + ew; k < e; *k++ = *s++); + for (e = k + ew; k < e; *k++ = (unsigned char)*s++); } *k = 0; ast.locale.transform((char*)ce->end, (const char*)key, COLL_KEY_MAX); k = key; c = mbchar(k); - if (iswupper(c)) + if (iswupper((wint_t)c)) et = COLL_range_uc; - else if (iswlower(c)) + else if (iswlower((wint_t)c)) et = COLL_range_lc; else et = COLL_range; - ce->typ = bt == et ? bt : COLL_range; + ce->typ = bt == et ? (short)bt : COLL_range; } else ce->typ = COLL_char; @@ -1162,14 +1162,14 @@ bra(Cenv_t* env) { Rex_t* e; int c; - int i; + size_t i; int w; int neg; int last; int inrange; int complicated; int collate; - int elements; + size_t elements; unsigned char* first; unsigned char* start; unsigned char* begin; @@ -1308,25 +1308,26 @@ bra(Cenv_t* env) while (*++s && *s != ':'); if (*s == ':' && *(s + 1) == ']' && *(s + 2) == ']') { - if ((i = (s - start)) == 1) + if (s - start == 1) { + unsigned char rex; switch (c) { case '<': - i = REX_WBEG; + rex = REX_WBEG; break; case '>': - i = REX_WEND; + rex = REX_WEND; break; default: - i = 0; + rex = 0; break; } - if (i) + if (rex) { env->cursor = s + 3; drop(env->disc, e); - return node(env, i, 0, 0, 0); + return node(env, rex, 0, 0, 0); } } } @@ -1385,8 +1386,9 @@ bra(Cenv_t* env) { if (last <= c) { - for (i = last; i <= c; i++) - setadd(e->re.charclass, i); + int j; + for (j = last; j <= c; j++) + setadd(e->re.charclass, j); inrange = env->type >= SRE || (env->flags & (REG_LENIENT|REG_REGEXP)); elements += 2; } @@ -1437,12 +1439,12 @@ bra(Cenv_t* env) { for (i = 0; i < elementsof(primary) - 1; i++, cc++) { - cc->nam[0] = primary[i]; + cc->nam[0] = (unsigned char)primary[i]; ast.locale.transform((char*)cc->key, (const char*)cc->nam, COLL_KEY_MAX); dtinsert(dt, cc); } for (i = 0; i < elementsof(cc->key); i++) - cc->key[i] = ~0; + cc->key[i] = (unsigned char)~0; dtinsert(dt, cc); LCINFO(AST_LC_COLLATE)->data = dt; } @@ -1558,23 +1560,24 @@ bra(Cenv_t* env) { if (env->cursor == start && (c = *(env->cursor + 1)) && *(env->cursor + 2) == ':' && *(env->cursor + 3) == ']' && *(env->cursor + 4) == ']') { + unsigned char rex; switch (c) { case '<': - i = REX_WBEG; + rex = REX_WBEG; break; case '>': - i = REX_WEND; + rex = REX_WEND; break; default: - i = 0; + rex = 0; break; } - if (i) + if (rex) { env->cursor += 5; drop(env->disc, e); - return node(env, i, 0, 0, 0); + return node(env, rex, 0, 0, 0); } } env->error = REG_ECTYPE; @@ -1599,13 +1602,13 @@ bra(Cenv_t* env) c = 0; if (ic) { - if (iswupper(wc)) + if (iswupper((wint_t)wc)) { - wc = towlower(wc); + wc = (wchar_t)towlower((wint_t)wc); rw = mbconv((char*)pp, wc); c = 'u'; } - else if (iswlower(wc)) + else if (iswlower((wint_t)wc)) c = 'l'; } i = 1; @@ -1647,12 +1650,12 @@ bra(Cenv_t* env) break; if (c == 'u') { - wc = towlower(wc); + wc = (wchar_t)towlower((wint_t)wc); c = 'L'; } else { - wc = towupper(wc); + wc = (wchar_t)towupper((wint_t)wc); c = 'U'; } rw = mbconv((char*)pp, wc); @@ -1709,10 +1712,10 @@ bra(Cenv_t* env) for (i = 0; i <= UCHAR_MAX; i++) if (settst(e->re.charclass, i)) { - if (isupper(i)) - c = tolower(i); - else if (islower(i)) - c = toupper(i); + if (isupper((int)i)) + c = tolower((int)i); + else if (islower((int)i)) + c = toupper((int)i); else continue; setadd(e->re.charclass, c); @@ -1789,7 +1792,7 @@ rep(Cenv_t* env, Rex_t* e, int number, int last) { case T_BANG: eat(env); - if (!(f = node(env, REX_NEG, m, n, 0))) + if (!(f = node(env, REX_NEG, (ptrdiff_t)m, (ptrdiff_t)n, 0))) { drop(env->disc, e); return NULL; @@ -1835,8 +1838,8 @@ rep(Cenv_t* env, Rex_t* e, int number, int last) case REX_CLASS: case REX_COLL_CLASS: case REX_ONECHAR: - e->lo = m; - e->hi = n; + e->lo = (ptrdiff_t)m; + e->hi = (ptrdiff_t)n; if (minimal >= 0) mark(e, minimal); return e; @@ -1857,7 +1860,7 @@ rep(Cenv_t* env, Rex_t* e, int number, int last) mark(e, minimal); return e; } - if (!(f = node(env, REX_REP, m, n, 0))) + if (!(f = node(env, REX_REP, (ptrdiff_t)m, (ptrdiff_t)n, 0))) { drop(env->disc, e); return NULL; @@ -1890,7 +1893,7 @@ isstring(Rex_t* e) } static Trie_node_t* -trienode(Cenv_t* env, int c) +trienode(Cenv_t* env, unsigned char c) { Trie_node_t* t; @@ -1908,7 +1911,7 @@ insert(Cenv_t* env, Rex_t* f, Rex_t* g) unsigned char* s; unsigned char* e; Trie_node_t* t; - int len; + ssize_t len; unsigned char tmp[2]; switch (f->type) @@ -1990,7 +1993,7 @@ trie(Cenv_t* env, Rex_t* e, Rex_t* f) static Rex_t* alt(Cenv_t*, int, int); static int -chr(Cenv_t* env, int* escaped) +chr(Cenv_t* env, ptrdiff_t* escaped) { unsigned char* p; int c; @@ -2027,13 +2030,13 @@ grp(Cenv_t* env, int parno) Rex_t* e; Rex_t* f; int c; - int g; + regflags_t g; int i; int n; int x; - int esc; int typ; int beg; + ptrdiff_t esc; unsigned char* p; g = env->flags; @@ -2281,7 +2284,7 @@ grp(Cenv_t* env, int parno) goto invalid; if (e->re.nest.type[i] & ~x) goto invalid; - e->re.nest.type[i] = x; + e->re.nest.type[i] = (unsigned short)x; continue; case 'E': x = REX_NEST_escape; @@ -2307,7 +2310,7 @@ grp(Cenv_t* env, int parno) goto invalid; if (e->re.nest.type[i] & ~x) goto invalid; - e->re.nest.type[i] = x|REX_NEST_open|REX_NEST_close|(i<re.nest.type[i] = (unsigned short)(x|REX_NEST_open|REX_NEST_close|(i<disc, e); return NULL; } - if (parno < elementsof(env->paren)) + if (parno < (ssize_t)elementsof(env->paren)) env->paren[parno] = f; f->re.group.back = 0; f->re.group.number = parno; @@ -2465,7 +2468,7 @@ grp(Cenv_t* env, int parno) if (!(e = node(env, REX_EXEC, 0, 0, 0))) return NULL; e->re.exec.text = (const char*)p; - e->re.exec.size = env->cursor - p - 2; + e->re.exec.size = (size_t)(env->cursor - p - 2); if (!env->disc->re_compf) e->re.exec.data = 0; else @@ -2529,7 +2532,7 @@ grp(Cenv_t* env, int parno) env->type = typ; return NULL; } - if (!(f = node(env, x, 0, 0, 0))) + if (!(f = node(env, (unsigned char)x, 0, 0, 0))) { drop(env->disc, e); goto nope; @@ -2544,7 +2547,7 @@ grp(Cenv_t* env, int parno) env->error = REG_ECOUNT; goto nope; } - f->re.group.size = env->stats.m; + f->re.group.size = (ssize_t)env->stats.m; memset(&env->stats, 0, sizeof(env->stats)); } switch (x) @@ -2569,10 +2572,10 @@ seq(Cenv_t* env) Rex_t* e; Rex_t* f; Token_t tok; - int c; - int i; - int n = 1; - int x = 0; + ssize_t c; + ptrdiff_t n = 1; + ssize_t x = 0; + ptrdiff_t j; int parno; int type; regflags_t flags; @@ -2585,24 +2588,24 @@ seq(Cenv_t* env) for (;;) { s = buf; - while ((c = token(env)) < T_META && s < &buf[sizeof(buf) - env->token.len]) + while ((c = token(env)) < T_META && s < &buf[sizeof(buf) - (size_t)env->token.len]) { x = c; p = env->cursor; if (c >= 0) { n = 1; - *s++ = (env->flags & REG_ICASE) ? toupper(c) : c; + *s++ = (unsigned char)((env->flags & REG_ICASE) ? toupper((int)c) : c); } else if (c == C_ESC || (env->flags & REG_ICASE)) { c = (c == C_ESC) ? env->token.lex : mbchar(p); if (env->flags & REG_ICASE) - c = towupper(c); - if ((&buf[sizeof(buf)] - s) < MB_CUR_MAX) + c = (ssize_t)towupper((wint_t)c); + if ((size_t)(&buf[sizeof(buf)] - s) < MB_CUR_MAX) break; - if ((n = mbconv((char*)s, c)) < 0) - *s++ = c; + if ((n = mbconv((char*)s, (wchar_t)c)) < 0) + *s++ = (unsigned char)c; else if (n) s += n; else @@ -2632,11 +2635,11 @@ seq(Cenv_t* env) e = 0; else { - i = s - buf; - if (!(e = node(env, REX_STRING, 0, 0, i))) + j = s - buf; + if (!(e = node(env, REX_STRING, 0, 0, (size_t)j))) return NULL; - memcpy((char*)(e->re.string.base = (unsigned char*)e->re.data), (char*)buf, i); - e->re.string.size = i; + memcpy((char*)(e->re.string.base = (unsigned char*)e->re.data), (char*)buf, (size_t)j); + e->re.string.size = (size_t)j; } if (x >= 0) { @@ -2645,14 +2648,14 @@ seq(Cenv_t* env) drop(env->disc, e); return NULL; } - f->re.onechar = (env->flags & REG_ICASE) ? toupper(x) : x; + f->re.onechar = (unsigned char)((env->flags & REG_ICASE) ? toupper((int)x) : x); } else { - if (!(f = node(env, REX_STRING, 0, 0, n))) + if (!(f = node(env, REX_STRING, 0, 0, (size_t)n))) return NULL; - memcpy((char*)(f->re.string.base = (unsigned char*)f->re.data), (char*)p, n); - f->re.string.size = n; + memcpy((char*)(f->re.string.base = (unsigned char*)f->re.data), (char*)p, (size_t)n); + f->re.string.size = (size_t)n; } if (!(f = rep(env, f, 0, 0)) || !(f = cat(env, f, seq(env)))) { @@ -2663,11 +2666,11 @@ seq(Cenv_t* env) f = cat(env, e, f); return f; default: - c = s - buf; - if (!(e = node(env, REX_STRING, 0, 0, c))) + j = s - buf; + if (!(e = node(env, REX_STRING, 0, 0, (size_t)j))) return NULL; - memcpy((char*)(e->re.string.base = (unsigned char*)e->re.data), (char*)buf, c); - e->re.string.size = c; + memcpy((char*)(e->re.string.base = (unsigned char*)e->re.data), (char*)buf, (size_t)j); + e->re.string.size = (size_t)j; return cat(env, e, seq(env)); } else if (c > T_BACK) @@ -2680,7 +2683,7 @@ seq(Cenv_t* env) return NULL; } env->paren[c]->re.group.back = 1; - e = rep(env, node(env, REX_BACK, c, 0, 0), 0, 0); + e = rep(env, node(env, REX_BACK, (ptrdiff_t)c, 0, 0), 0, 0); } else switch (c) @@ -2731,7 +2734,7 @@ seq(Cenv_t* env) drop(env->disc, e); return NULL; } - if (parno < elementsof(env->paren)) + if (parno < (ssize_t)elementsof(env->paren)) env->paren[parno] = f; f->re.group.back = 0; f->re.group.number = parno; @@ -2750,7 +2753,7 @@ seq(Cenv_t* env) drop(env->disc, e); return NULL; } - if (--parno < elementsof(env->paren)) + if (--parno < (ssize_t)elementsof(env->paren)) env->paren[parno] = f; f->re.group.back = 0; f->re.group.number = parno; @@ -2788,7 +2791,7 @@ seq(Cenv_t* env) case T_SPACE: case T_SPACE_NOT: eat(env); - if (e = ccl(env, c)) + if (e = ccl(env, (int)c)) e = rep(env, e, 0, 0); break; case T_LT: @@ -2931,6 +2934,7 @@ regcomp(regex_t* p, const char* pattern, regflags_t flags) regdisc_t* disc; unsigned char* fold; int i; + size_t j; Cenv_t env; if (!p) @@ -2950,15 +2954,15 @@ regcomp(regex_t* p, const char* pattern, regflags_t flags) if (!state.initialized) { state.initialized = 1; - for (i = 0; i < elementsof(state.escape); i++) - state.magic[state.escape[i].key] = state.escape[i].val; + for (j = 0; j < elementsof(state.escape); j++) + state.magic[state.escape[j].key] = state.escape[j].val; } if (!(fold = (unsigned char*)LCINFO(AST_LC_CTYPE)->data)) { if (!(fold = newof(0, unsigned char, UCHAR_MAX, 1))) return fatal(disc, REG_ESPACE, pattern); for (i = 0; i <= UCHAR_MAX; i++) - fold[i] = toupper(i); + fold[i] = (unsigned char)toupper(i); LCINFO(AST_LC_CTYPE)->data = fold; } again: @@ -3076,9 +3080,9 @@ regcomp(regex_t* p, const char* pattern, regflags_t flags) p->env->stats.re_min = p->env->stats.re_max = -1; else { - if (!(p->env->stats.re_min = env.stats.m)) + if (!(p->env->stats.re_min = (ssize_t)env.stats.m)) p->env->stats.re_min = -1; - if (!(p->env->stats.re_max = env.stats.n)) + if (!(p->env->stats.re_max = (ssize_t)env.stats.n)) p->env->stats.re_max = -1; } serialize(&env, p->env->rex, 1); @@ -3087,7 +3091,7 @@ regcomp(regex_t* p, const char* pattern, regflags_t flags) p->re_nsub /= 2; if (env.flags & REG_DELIMITED) { - p->re_npat = env.cursor - (unsigned char*)pattern + 1; + p->re_npat = (size_t)(env.cursor - (unsigned char*)pattern + 1); if (*env.cursor == env.delimiter) p->re_npat++; else if (env.flags & REG_MUSTDELIM) diff --git a/src/lib/libast/regex/regerror.c b/src/lib/libast/regex/regerror.c index bb055b688d24..3210412f6f60 100644 --- a/src/lib/libast/regex/regerror.c +++ b/src/lib/libast/regex/regerror.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -60,7 +60,7 @@ regerror(int code, const regex_t* p, char* buf, size_t size) NoP(p); if (code++ == REG_VERSIONID) s = (const char*)fmtident(&id[1]); - else if (code >= 0 && code < elementsof(reg_error)) + else if (code >= 0 && code < (ssize_t)elementsof(reg_error)) s = reg_error[code]; else s = (const char*)"unknown error"; diff --git a/src/lib/libast/regex/regexec.c b/src/lib/libast/regex/regexec.c index 2a9280c13d0c..3ad83b8956e6 100644 --- a/src/lib/libast/regex/regexec.c +++ b/src/lib/libast/regex/regexec.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -35,10 +35,10 @@ regexec_20120528(const regex_t* p, const char* s, size_t nmatch, regmatch_t* mat if (flags & REG_STARTEND) { int r; - int m = match->rm_so; + regoff_t m = match->rm_so; regmatch_t* e; - if (!(r = regnexec(p, s + m, match->rm_eo - m, nmatch, match, flags)) && m > 0) + if (!(r = regnexec(p, s + m, (size_t)(match->rm_eo - m), nmatch, match, flags)) && m > 0) for (e = match + nmatch; match < e; match++) if (match->rm_so >= 0) { @@ -71,8 +71,8 @@ regexec(const regex_t* p, const char* s, size_t nmatch, oldregmatch_t* oldmatch, if (!(r = regexec_20120528(p, s, nmatch, match, flags))) for (i = 0; i < nmatch; i++) { - oldmatch[i].rm_so = match[i].rm_so; - oldmatch[i].rm_eo = match[i].rm_eo; + oldmatch[i].rm_so = (int)match[i].rm_so; + oldmatch[i].rm_eo = (int)match[i].rm_eo; } free(match); return r; diff --git a/src/lib/libast/regex/reglib.h b/src/lib/libast/regex/reglib.h index 53b29a9af871..5c33f661ac31 100644 --- a/src/lib/libast/regex/reglib.h +++ b/src/lib/libast/regex/reglib.h @@ -38,11 +38,15 @@ #define fatal _reg_fatal #define state _reg_state +#include +#include +#include + typedef struct regsubop_s { int op; /* REG_SUB_LOWER,REG_SUB_UPPER */ - int off; /* re_rhs or match[] offset */ - int len; /* re_rhs len or len==0 match[] */ + ptrdiff_t off; /* re_rhs or match[] offset */ + ptrdiff_t len; /* re_rhs len or len==0 match[] */ } regsubop_t; #define _REG_SUB_PRIVATE_ \ @@ -51,10 +55,6 @@ typedef struct regsubop_s regsubop_t* re_ops; /* rhs ops */ \ char re_rhs[1]; /* substitution rhs */ -#include -#include -#include - #include #if _AST_release #define NDEBUG @@ -297,7 +297,7 @@ typedef struct Celt_s typedef struct Stk_pos_s { - off_t offset; + ptrdiff_t offset; char* base; } Stk_pos_t; @@ -305,8 +305,8 @@ typedef struct Vector_s { Stk_t* stk; /* stack pointer */ char* vec; /* the data */ - int inc; /* growth increment */ - int siz; /* element size */ + ssize_t inc; /* growth increment */ + size_t siz; /* element size */ ssize_t max; /* max index */ ssize_t cur; /* current index -- user domain */ } Vector_t; @@ -365,7 +365,7 @@ typedef struct Group_s { int number; /* group number */ int last; /* last contained group number */ - int size; /* lookbehind size */ + ssize_t size; /* lookbehind size */ int back; /* backreferenced */ regflags_t flags; /* group flags */ union @@ -471,8 +471,8 @@ typedef struct Trie_node_s typedef struct Trie_s { Trie_node_t** root; - int min; - int max; + ssize_t min; + ssize_t max; } Trie_t; /* @@ -483,12 +483,12 @@ typedef struct Rex_s { unsigned char type; /* node type */ unsigned char marked; /* already marked */ - short serial; /* subpattern number */ + int serial; /* subpattern number */ regflags_t flags; /* scoped flags */ int explicit; /* scoped explicit match*/ struct Rex_s* next; /* remaining parts */ - int lo; /* lo dup count */ - int hi; /* hi dup count */ + ptrdiff_t lo; /* lo dup count */ + ptrdiff_t hi; /* hi dup count */ unsigned char* map; /* fold and/or ccode map*/ union { diff --git a/src/lib/libast/regex/regnexec.c b/src/lib/libast/regex/regnexec.c index 8d6bbb7ef4fc..e64401a25f67 100644 --- a/src/lib/libast/regex/regnexec.c +++ b/src/lib/libast/regex/regnexec.c @@ -130,16 +130,16 @@ typedef struct { unsigned char* p; /* where in string */ size_t length; /* length in string */ - short serial; /* preorder subpattern number */ + int serial; /* preorder subpattern number */ short be; /* which end of pair */ } Pos_t; /* ===== begin library support ===== */ -#define vector(t,v,i) (((i)<(v)->max)?(t*)((v)->vec+(i)*(v)->siz):(t*)vecseek(&(v),i)) +#define vector(t,v,i) (((i)<(v)->max)?(t*)((v)->vec+(size_t)(i)*(v)->siz):(t*)vecseek(&(v),i)) static Vector_t* -vecopen(int inc, int siz) +vecopen(ssize_t inc, size_t siz) { Vector_t* v; Stk_t* sp; @@ -148,7 +148,7 @@ vecopen(int inc, int siz) inc = 16; if (!(sp = stkopen(STK_SMALL|STK_NULL))) return NULL; - if (!(v = stkseek(sp, sizeof(Vector_t) + inc * siz))) + if (!(v = stkseek(sp, (ptrdiff_t)(sizeof(Vector_t) + (size_t)inc * siz)))) { stkclose(sp); return NULL; @@ -162,19 +162,19 @@ vecopen(int inc, int siz) } static void* -vecseek(Vector_t** p, int index) +vecseek(Vector_t** p, ssize_t index) { Vector_t* v = *p; if (index >= v->max) { while ((v->max += v->inc) <= index); - if (!(v = stkseek(v->stk, sizeof(Vector_t) + v->max * v->siz))) + if (!(v = stkseek(v->stk, (ptrdiff_t)(sizeof(Vector_t) + (size_t)v->max * v->siz)))) return NULL; *p = v; v->vec = (char*)v + sizeof(Vector_t); } - return v->vec + index * v->siz; + return v->vec + (size_t)index * v->siz; } static void @@ -246,16 +246,16 @@ _matchpush(Env_t* env, Rex_t* rex) regmatch_t* m; regmatch_t* e; regmatch_t* s; - int num; + ssize_t num; if (rex->re.group.number <= 0 || (num = rex->re.group.last - rex->re.group.number + 1) <= 0) num = 0; - if (!(f = stkpush(env->mst, sizeof(Match_frame_t) + (num - 1) * sizeof(regmatch_t)))) + if (!(f = stkpush(env->mst, sizeof(Match_frame_t) + (size_t)(num > 0 ? num - 1 : 0) * sizeof(regmatch_t)))) { env->error = REG_ESPACE; return 1; } - f->size = num * sizeof(regmatch_t); + f->size = (size_t)num * sizeof(regmatch_t); f->match = m = env->match + rex->re.group.number; e = m + num; s = f->save; @@ -272,7 +272,7 @@ _matchpush(Env_t* env, Rex_t* rex) */ static int -pospush(Env_t* env, Rex_t* rex, unsigned char* p, int be) +pospush(Env_t* env, Rex_t* rex, unsigned char* p, short be) { Pos_t* pos; @@ -574,7 +574,7 @@ parsetrie(Env_t* env, Trie_node_t* x, Rex_t* rex, Rex_t* cont, unsigned char* s) } static int -collelt(Celt_t* ce, char* key, int c, int x) +collelt(Celt_t* ce, char* key, int c, ptrdiff_t x) { Ckey_t elt; @@ -597,11 +597,11 @@ collelt(Celt_t* ce, char* key, int c, int x) return 1; continue; case COLL_range_lc: - if (strcmp((char*)ce->beg, (char*)elt) <= ce->min && strcmp((char*)elt, (char*)ce->end) <= ce->max && (iswlower(c) || !iswupper(c))) + if (strcmp((char*)ce->beg, (char*)elt) <= ce->min && strcmp((char*)elt, (char*)ce->end) <= ce->max && (iswlower((wint_t)c) || !iswupper((wint_t)c))) return 1; continue; case COLL_range_uc: - if (strcmp((char*)ce->beg, (char*)elt) <= ce->min && strcmp((char*)elt, (char*)ce->end) <= ce->max && (iswupper(c) || !iswlower(c))) + if (strcmp((char*)ce->beg, (char*)elt) <= ce->min && strcmp((char*)elt, (char*)ce->end) <= ce->max && (iswupper((wint_t)c) || !iswlower((wint_t)c))) return 1; continue; } @@ -611,16 +611,16 @@ collelt(Celt_t* ce, char* key, int c, int x) } static int -collic(Celt_t* ce, char* key, char* nxt, int c, int x) +collic(Celt_t* ce, char* key, char* nxt, int c, ptrdiff_t x) { if (!x) { if (collelt(ce, key, c, x)) return 1; - if (iswlower(c)) - c = towupper(c); - else if (iswupper(c)) - c = towlower(c); + if (iswlower((wint_t)c)) + c = (int)towupper((wint_t)c); + else if (iswupper((wint_t)c)) + c = (int)towlower((wint_t)c); else return 0; x = mbconv(key, c); @@ -632,9 +632,9 @@ collic(Celt_t* ce, char* key, char* nxt, int c, int x) if (collic(ce, key, nxt + 1, c, x)) return 1; if (islower(*nxt)) - *nxt = toupper(*nxt); + *nxt = (char)toupper(*nxt); else if (isupper(*nxt)) - *nxt = tolower(*nxt); + *nxt = (char)tolower(*nxt); else return 0; nxt++; @@ -647,9 +647,9 @@ collmatch(Rex_t* rex, unsigned char* s, unsigned char* e, unsigned char** p) { unsigned char* t; wchar_t c; - int w; int r; - int x; + ptrdiff_t w; + ptrdiff_t x; int ic; Ckey_t key; Ckey_t elt; @@ -658,7 +658,7 @@ collmatch(Rex_t* rex, unsigned char* s, unsigned char* e, unsigned char** p) ic = (rex->flags & REG_ICASE); if ((w = MBSIZE(s)) > 1) { - memcpy((char*)key, (char*)s, w); + memcpy((char*)key, (char*)s, (size_t)w); key[w] = 0; t = s; c = mbchar(t); @@ -672,7 +672,7 @@ collmatch(Rex_t* rex, unsigned char* s, unsigned char* e, unsigned char** p) c = s[0]; if (ic && isupper(c)) c = tolower(c); - key[0] = c; + key[0] = (unsigned char)c; key[1] = 0; if (isalpha(c)) { @@ -681,15 +681,16 @@ collmatch(Rex_t* rex, unsigned char* s, unsigned char* e, unsigned char** p) x = COLL_KEY_MAX; while (w < x) { + size_t z; c = s[w]; if (!isalpha(c)) break; - r = ast.locale.transform((char*)elt, (const char*)key, COLL_KEY_MAX); + z = ast.locale.transform((char*)elt, (const char*)key, COLL_KEY_MAX); if (ic && isupper(c)) c = tolower(c); - key[w] = c; + key[w] = (unsigned char)c; key[w + 1] = 0; - if (ast.locale.transform((char*)elt, (const char*)key, COLL_KEY_MAX) != r) + if (ast.locale.transform((char*)elt, (const char*)key, COLL_KEY_MAX) != z) break; w++; } @@ -795,10 +796,9 @@ parse(Env_t* env, Rex_t* rex, Rex_t* cont, unsigned char* s) { int c; int d; - int m; int r; - ssize_t i; - ssize_t n; + ptrdiff_t n; + ptrdiff_t m; unsigned char* p; unsigned char* t; unsigned char* b; @@ -809,6 +809,9 @@ parse(Env_t* env, Rex_t* rex, Rex_t* cont, unsigned char* s) Rex_t* q; Rex_t catcher; Rex_t next; + ssize_t cur_save; + regoff_t rf; + ptrdiff_t j; for (;;) { @@ -833,7 +836,7 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI ((Pos_t*)env->pos->vec + env->pos->cur - 1)->serial = catcher.serial = rex->re.group.expr.binary.serial; n = parse(env, rex->re.group.expr.binary.right, &catcher, s); if (n != NONE) - r = n; + r = (int)n; } pospop(env); matchpop(env, rex); @@ -856,8 +859,8 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI o = &env->match[rex->lo]; if (o->rm_so < 0) return NONE; - i = o->rm_eo - o->rm_so; - e = s + i; + rf = o->rm_eo - o->rm_so; + e = s + rf; if (e > env->end) return NONE; t = env->beg + o->rm_so; @@ -879,7 +882,7 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI { c = mbchar(s); d = mbchar(t); - if (towupper(c) != towupper(d)) + if (towupper((wint_t)c) != towupper((wint_t)d)) return NONE; } } @@ -900,10 +903,11 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI r = NONE; if (!(rex->flags & REG_MINIMAL)) { + intmax_t i; for (i = 0; i < n; i++) if (!settst(rex->re.charclass, s[i])) { - n = i; + n = (ptrdiff_t)i; break; } for (s += n; n-- >= m; s--) @@ -957,14 +961,15 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI e = env->end; if (!(rex->flags & REG_MINIMAL)) { - if (!(b = stkpush(env->mst, n))) + intmax_t i; + if (!(b = stkpush(env->mst, (size_t)n))) { env->error = REG_ESPACE; return BAD; } for (i = 0; s < e && i < n && collmatch(rex, s, e, &t); i++) { - b[i] = t - s; + b[i] = (unsigned char)(t - s); s = t; } for (; i-- >= rex->lo; s -= b[i]) @@ -987,6 +992,7 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI } else { + intmax_t i; for (i = 0; i < m && s < e; i++, s = t) if (!collmatch(rex, s, e, &t)) return r; @@ -1034,21 +1040,21 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI if (!env->stack) return BEST; n = s - env->beg; - r = env->nsub; + r = (int)env->nsub; DEBUG_TEST(0x0100,(sfprintf(sfstdout,"AHA#%04d 0x%04x %s (%z,%z)(%z,%z)(%z,%z)(%z,%z) (%z,%z)(%z,%z)\n", __LINE__, debug_flag, rexname(rex), env->best[0].rm_so, env->best[0].rm_eo, env->best[1].rm_so, env->best[1].rm_eo, env->best[2].rm_so, env->best[2].rm_eo, env->best[3].rm_so, env->best[3].rm_eo, env->match[0].rm_so, env->match[0].rm_eo, env->match[1].rm_so, env->match[1].rm_eo)),(0)); - if ((i = env->best[0].rm_eo) >= 0) + if ((rf = env->best[0].rm_eo) >= 0) { if (rex->flags & REG_MINIMAL) { - if (n > i) + if (n > rf) return GOOD; } else { - if (n < i) + if (n < rf) return GOOD; } - if (n == i && better(env, + if (n == rf && better(env, (Pos_t*)env->bestpos->vec, (Pos_t*)env->pos->vec, (Pos_t*)env->bestpos->vec+env->bestpos->cur, @@ -1056,17 +1062,17 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI 0) <= 0) return GOOD; } - env->best[0].rm_eo = n; - memcpy(&env->best[1], &env->match[1], r * sizeof(regmatch_t)); - n = env->pos->cur; - pos = vector(Pos_t, env->bestpos, n); + env->best[0].rm_eo = (regoff_t)n; + memcpy(&env->best[1], &env->match[1], (size_t)r * sizeof(regmatch_t)); + cur_save = env->pos->cur; + pos = vector(Pos_t, env->bestpos, cur_save); if (!pos) { env->error = REG_ESPACE; return BAD; } - env->bestpos->cur = n; - memcpy(env->bestpos->vec, env->pos->vec, n * sizeof(Pos_t)); + env->bestpos->cur = cur_save; + memcpy(env->bestpos->vec, env->pos->vec, (size_t)cur_save * sizeof(Pos_t)); DEBUG_TEST(0x0100,(sfprintf(sfstdout,"AHA#%04d 0x%04x %s (%z,%z)(%z,%z)(%z,%z)(%z,%z) (%z,%z)(%z,%z)\n", __LINE__, debug_flag, rexname(rex), env->best[0].rm_so, env->best[0].rm_eo, env->best[1].rm_so, env->best[1].rm_eo, env->best[2].rm_so, env->best[2].rm_eo, env->best[3].rm_so, env->best[3].rm_eo, env->match[0].rm_so, env->match[0].rm_eo, env->match[1].rm_so, env->match[1].rm_eo)),(0)); return GOOD; } @@ -1080,12 +1086,15 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI if (m > n) return NONE; if ((c = rex->explicit) >= 0 && !mbwide()) + { + intmax_t i; for (i = 0; i < n; i++) if (s[i] == c) { - n = i; + n = (ptrdiff_t)i; break; } + } r = NONE; if (!(rex->flags & REG_MINIMAL)) { @@ -1107,14 +1116,15 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI } else { - if (!(b = stkpush(env->mst, n))) + intmax_t i; + if (!(b = stkpush(env->mst, (size_t)n))) { env->error = REG_ESPACE; return BAD; } e = env->end; for (i = 0; s < e && i < n && *s != c; i++) - s += b[i] = MBSIZE(s); + s += b[i] = (unsigned char)MBSIZE(s); for (; i-- >= m; s -= b[i]) switch (follow(env, rex, cont, s)) { @@ -1153,6 +1163,7 @@ DEBUG_TEST(0x0008,(sfprintf(sfstdout, "AHA#%04d 0x%04x parse %s `%-.*s'\n", __LI } else { + intmax_t i; e = env->end; for (i = 0; s < e && i < m && *s != c; i++) s += MBSIZE(s); @@ -1346,23 +1357,23 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ case REX_NEG: if (LEADING(env, rex, s)) return NONE; - i = env->end - s; - n = ((i + 7) >> 3) + 1; + j = env->end - s; + n = ((j + 7) >> 3) + 1; catcher.type = REX_NEG_CATCH; catcher.re.neg_catch.beg = s; - if (!(p = stkpush(env->mst, n))) + if (!(p = stkpush(env->mst, (size_t)n))) return BAD; - memset(catcher.re.neg_catch.index = p, 0, n); + memset(catcher.re.neg_catch.index = p, 0, (size_t)n); catcher.next = rex->next; if (parse(env, rex->re.group.expr.rex, &catcher, s) == BAD) r = BAD; else { r = NONE; - for (; i >= 0; i--) - if (!bittst(p, i)) + for (; j >= 0; j--) + if (!bittst(p, j)) { - switch (follow(env, rex, cont, s + i)) + switch (follow(env, rex, cont, s + j)) { case BAD: r = BAD; @@ -1419,6 +1430,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ c = rex->re.onechar; if (!(rex->flags & REG_MINIMAL)) { + intmax_t i; if (!mbwide()) { if (p = rex->map) @@ -1449,7 +1461,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ } else { - if (!(b = stkpush(env->mst, n))) + if (!(b = stkpush(env->mst, (size_t)n))) { env->error = REG_ESPACE; return BAD; @@ -1462,7 +1474,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ t = s; if (mbchar(t) != c) break; - b[i] = t - s; + b[i] = (unsigned char)(t - s); } } else @@ -1470,9 +1482,9 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ for (i = 0; s < e && i < n; i++, s = t) { t = s; - if (towupper(mbchar(t)) != c) + if (towupper((wint_t)mbchar(t)) != (wint_t)c) break; - b[i] = t - s; + b[i] = (unsigned char)(t - s); } } for (; i-- >= m; s -= b[i]) @@ -1546,6 +1558,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ } else { + intmax_t i; e = env->end; if (!(rex->flags & REG_ICASE)) { @@ -1578,7 +1591,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ for (i = 0; i < m && s < e; i++, s = t) { t = s; - if (towupper(mbchar(t)) != c) + if (towupper((wint_t)mbchar(t)) != (wint_t)c) return r; } while (i++ <= n) @@ -1595,7 +1608,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s=>%s `%-.*s'\n", _ } if (s >= e) break; - if (towupper(mbchar(s)) != c) + if (towupper((wint_t)mbchar(s)) != (wint_t)c) break; } } @@ -1637,7 +1650,7 @@ DEBUG_TEST(0x0002,(sfprintf(sfstdout, "AHA#%04d %p re.group.back=%d re.group.exp return r; case REX_STRING: DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s \"%-.*s\" `%-.*s'\n", __LINE__, debug_flag, rexname(rex), rex->re.string.size, rex->re.string.base, env->end - s, s)),(0)); - if (rex->re.string.size > (env->end - s)) + if (rex->re.string.size > (size_t)(env->end - s)) return NONE; t = rex->re.string.base; e = t + rex->re.string.size; @@ -1659,7 +1672,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s \"%-.*s\" `%-.*s' { c = mbchar(s); d = mbchar(t); - if (towupper(c) != d) + if (towupper((wint_t)c) != (wint_t)d) return NONE; } } @@ -1670,7 +1683,7 @@ DEBUG_TEST(0x0200,(sfprintf(sfstdout,"AHA#%04d 0x%04x parse %s \"%-.*s\" `%-.*s' return parsetrie(env, x, rex, cont, s); case REX_EXEC: u = 0; - r = (*env->disc->re_execf)(env->regex, rex->re.exec.data, rex->re.exec.text, rex->re.exec.size, (const char*)s, env->end - s, &u, env->disc); + r = (*env->disc->re_execf)(env->regex, rex->re.exec.data, rex->re.exec.text, rex->re.exec.size, (const char*)s, (size_t)(env->end - s), &u, env->disc); e = (unsigned char*)u; if (e >= s && e <= env->end) s = e; @@ -1782,9 +1795,9 @@ regnexec_20120528(const regex_t* p, const char* s, size_t len, size_t nmatch, re { ssize_t n = 0; int i; - int j; + size_t j; int k; - int m; + size_t m; int advance; Env_t* env; @@ -1808,8 +1821,8 @@ regnexec_20120528(const regex_t* p, const char* s, size_t len, size_t nmatch, re stknew(env->mst, &env->stk); if (env->stack = env->hard || !(env->flags & REG_NOSUB) && nmatch) { - n = env->nsub; - if (!(env->match = stkpush(env->mst, 2 * (n + 1) * sizeof(regmatch_t))) || + n = (ssize_t)env->nsub; + if (!(env->match = stkpush(env->mst, 2 * (size_t)(n + 1) * sizeof(regmatch_t))) || !env->pos && !(env->pos = vecopen(16, sizeof(Pos_t))) || !env->bestpos && !(env->bestpos = vecopen(16, sizeof(Pos_t)))) { @@ -1828,7 +1841,7 @@ regnexec_20120528(const regex_t* p, const char* s, size_t len, size_t nmatch, re DEBUG_TEST(0x1000,(list(env,env->rex)),(0)); k = REG_NOMATCH; j = env->once || (flags & REG_LEFT); - DEBUG_TEST(0x0080,(sfprintf(sfstdout, "AHA#%04d parse once=%d\n", __LINE__, j)),(0)); + DEBUG_TEST(0x0080,(sfprintf(sfstdout, "AHA#%04d parse once=%zu\n", __LINE__, j)),(0)); while ((i = parse(env, env->rex, &env->done, (unsigned char*)s)) == NONE || advance && !env->best[0].rm_eo && !(advance = 0)) { if (j) @@ -1919,7 +1932,7 @@ regnexec(const regex_t* p, const char* s, size_t len, size_t nmatch, oldregmatch if (oldmatch) { regmatch_t* match; - ssize_t i; + size_t i; int r; if (!(match = oldof(0, regmatch_t, nmatch, 0))) @@ -1927,8 +1940,8 @@ regnexec(const regex_t* p, const char* s, size_t len, size_t nmatch, oldregmatch if (!(r = regnexec_20120528(p, s, len, nmatch, match, flags))) for (i = 0; i < nmatch; i++) { - oldmatch[i].rm_so = match[i].rm_so; - oldmatch[i].rm_eo = match[i].rm_eo; + oldmatch[i].rm_so = (int)match[i].rm_so; + oldmatch[i].rm_eo = (int)match[i].rm_eo; } free(match); return r; diff --git a/src/lib/libast/regex/regsubcomp.c b/src/lib/libast/regex/regsubcomp.c index cdb7312ddc94..1d262cd34806 100644 --- a/src/lib/libast/regex/regsubcomp.c +++ b/src/lib/libast/regex/regsubcomp.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -71,7 +71,7 @@ regsubflags(regex_t* p, const char* s, char** e, int delim, const regflags_t* ma else { for (m = map; *m; m++) - if (*m++ == c) + if ((signed)*m++ == c) { if (flags & *m) { @@ -115,8 +115,8 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl int sre; int f; int g; - int n; - int nops; + ptrdiff_t n; + size_t nops; const char* o; regdisc_t* disc; @@ -179,11 +179,12 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl } if (*s) { - if (n = regsubflags(p, s, &e, d, map, &minmatch, &flags)) - return n; + int ret; + if (ret = regsubflags(p, s, &e, d, map, &minmatch, &flags)) + return ret; s = (const char*)e; } - p->re_npat = s - o; + p->re_npat = (size_t)(s - o); s = r; } else @@ -195,7 +196,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl again: if (!c) { - p->re_npat = s - o - 1; + p->re_npat = (size_t)(s - o - 1); break; } else if (c == '\\') @@ -214,7 +215,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl } if (c == '&') { - *t++ = c; + *t++ = (char)c; continue; } } @@ -222,7 +223,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl { if (sre) { - *t++ = c; + *t++ = (char)c; continue; } } @@ -245,7 +246,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl c = toupper(c); break; } - *t++ = c; + *t++ = (char)c; continue; } switch (c) @@ -268,7 +269,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl s++; if (isupper(c)) c = tolower(c); - *t++ = c; + *t++ = (char)c; } continue; case 'u': @@ -277,13 +278,13 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl s++; if (islower(c)) c = toupper(c); - *t++ = c; + *t++ = (char)c; } continue; case 'E': f = g; set: - if ((op->len = (t - sub->re_rhs) - op->off) && (n = ++op - sub->re_ops) >= nops) + if ((op->len = (t - sub->re_rhs) - op->off) && (n = ++op - sub->re_ops) >= (ssize_t)nops) { if (!(sub->re_ops = (regsubop_t*)alloc(p->env->disc, sub->re_ops, (nops *= 2) * sizeof(regsubop_t)))) { @@ -306,7 +307,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl default: if (!sre) { - *t++ = chresc(s - 2, &e); + *t++ = (char)chresc(s - 2, &e); s = (const char*)e; continue; } @@ -314,12 +315,12 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl c = -1; break; } - if (c > p->re_nsub) + if (c > (ssize_t)p->re_nsub) { regfree(p); return fatal(disc, REG_ESUBREG, s - 1); } - if ((n = op - sub->re_ops) >= (nops - 2)) + if ((n = op - sub->re_ops) >= ((ssize_t)nops - 2)) { if (!(sub->re_ops = (regsubop_t*)alloc(p->env->disc, sub->re_ops, (nops *= 2) * sizeof(regsubop_t)))) { @@ -337,7 +338,7 @@ regsubcomp(regex_t* p, const char* s, const regflags_t* map, int minmatch, regfl op->op = f; op->off = t - sub->re_rhs; } - if ((op->len = (t - sub->re_rhs) - op->off) && (n = ++op - sub->re_ops) >= nops) + if ((op->len = (t - sub->re_rhs) - op->off) && (n = ++op - sub->re_ops) >= (ssize_t)nops) { if (!(sub->re_ops = (regsubop_t*)alloc(p->env->disc, sub->re_ops, (nops *= 2) * sizeof(regsubop_t)))) { diff --git a/src/lib/libast/regex/regsubexec.c b/src/lib/libast/regex/regsubexec.c index 0d8c1dc5a6ab..abfa915def02 100644 --- a/src/lib/libast/regex/regsubexec.c +++ b/src/lib/libast/regex/regsubexec.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -29,10 +29,10 @@ { \ if (((b)->re_end - (b)->re_cur) < (n)) \ { \ - size_t o = (b)->re_cur - (b)->re_buf; \ - size_t a = ((b)->re_end - (b)->re_buf); \ - if (a < n) \ - a = roundof(n, 128); \ + size_t o = ((size_t)((b)->re_cur - (b)->re_buf)); \ + size_t a = ((size_t)((b)->re_end - (b)->re_buf)); \ + if (a < (size_t)(n)) \ + a = (size_t)roundof(n, 128); \ a *= 2; \ if (!((b)->re_buf = alloc(p->env->disc, (b)->re_buf, a))) \ { \ @@ -56,7 +56,7 @@ do if (z) \ { \ NEED(p, b, z, r); \ - memcpy((b)->re_cur, x, z); \ + memcpy((b)->re_cur, x, (size_t)(z)); \ (b)->re_cur += (z); \ } while (0) @@ -78,12 +78,12 @@ sub(const regex_t* p, regsub_t* b, const char* ss, regsubop_t* op, size_t nmatch case -1: break; case 0: - if (op->off >= nmatch) + if ((size_t)op->off >= nmatch) return REG_ESUBREG; - if ((c = match[op->off].rm_so) < 0) + if ((c = (int)match[op->off].rm_so) < 0) continue; s = (char*)ss + c; - if ((c = match[op->off].rm_eo) < 0) + if ((c = (int)match[op->off].rm_eo) < 0) continue; e = (char*)ss + c; NEED(p, b, e - s, return c); @@ -95,7 +95,7 @@ sub(const regex_t* p, regsub_t* b, const char* ss, regsubop_t* op, size_t nmatch c = *s++; if (islower(c)) c = toupper(c); - *b->re_cur++ = c; + *b->re_cur++ = (char)c; } break; case REG_SUB_LOWER: @@ -104,7 +104,7 @@ sub(const regex_t* p, regsub_t* b, const char* ss, regsubop_t* op, size_t nmatch c = *s++; if (isupper(c)) c = tolower(c); - *b->re_cur++ = c; + *b->re_cur++ = (char)c; } break; case REG_SUB_UPPER|REG_SUB_LOWER: @@ -115,7 +115,7 @@ sub(const regex_t* p, regsub_t* b, const char* ss, regsubop_t* op, size_t nmatch c = tolower(c); else if (islower(c)) c = toupper(c); - *b->re_cur++ = c; + *b->re_cur++ = (char)c; } break; default: @@ -147,7 +147,7 @@ regsubexec(const regex_t* p, const char* s, size_t nmatch, regmatch_t* match) int c; regsub_t* b; const char* e; - int m; + ssize_t m; if (!p->env->sub || (p->env->flags & REG_NOSUB) || !nmatch) return fatal(p->env->disc, REG_BADPAT, NULL); @@ -169,7 +169,7 @@ regsubexec(const regex_t* p, const char* s, size_t nmatch, regmatch_t* match) s += match->rm_eo; if (m <= 0 && !(b->re_flags & REG_SUB_ALL) || !*s) break; - if (c = regnexec(p, s, e - s, nmatch, match, p->env->flags|(match->rm_so == match->rm_eo ? REG_ADVANCE : 0))) + if (c = regnexec(p, s, (size_t)(e - s), nmatch, match, p->env->flags|(match->rm_so == match->rm_eo ? REG_ADVANCE : 0))) { if (c != REG_NOMATCH) return fatal(p->env->disc, c, NULL); @@ -184,11 +184,11 @@ regsubexec(const regex_t* p, const char* s, size_t nmatch, regmatch_t* match) while (s < e) { c = *s++; - PUTC(p, b, c, return fatal(p->env->disc, c, NULL)); + PUTC(p, b, (char)c, return fatal(p->env->disc, c, NULL)); } NEED(p, b, 1, return fatal(p->env->disc, c, NULL)); *b->re_cur = 0; - b->re_len = b->re_cur - b->re_buf; + b->re_len = (size_t)(b->re_cur - b->re_buf); return 0; } @@ -205,7 +205,7 @@ regsubexec(const regex_t* p, const char* s, size_t nmatch, oldregmatch_t* oldmat if (oldmatch) { regmatch_t* match; - ssize_t i; + size_t i; int r; if (!(match = oldof(0, regmatch_t, nmatch, 0))) @@ -218,8 +218,8 @@ regsubexec(const regex_t* p, const char* s, size_t nmatch, oldregmatch_t* oldmat if (!(r = regsubexec_20120528(p, s, nmatch, match))) for (i = 0; i < nmatch; i++) { - oldmatch[i].rm_so = match[i].rm_so; - oldmatch[i].rm_eo = match[i].rm_eo; + oldmatch[i].rm_so = (int)match[i].rm_so; + oldmatch[i].rm_eo = (int)match[i].rm_eo; } free(match); return r; diff --git a/src/lib/libast/string/base64.c b/src/lib/libast/string/base64.c index 66dfe7414030..08b7b08c9d9e 100644 --- a/src/lib/libast/string/base64.c +++ b/src/lib/libast/string/base64.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -92,12 +93,12 @@ base64encode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t *fn = fp; if (tn) *tn = tp; - n = tp - (unsigned char*)tb + 1; + n = (size_t)(tp - (unsigned char*)tb + 1); tp = tmp; te = tp + sizeof(tmp) - B64_EC + 1; } - b = *fp++ << 16; - b |= *fp++ << 8; + b = (unsigned long)(*fp++ << 16); + b |= (unsigned long)(*fp++ << 8); b |= *fp++; *tp++ = m[b >> 18]; *tp++ = m[(b >> 12) & 077]; @@ -106,7 +107,7 @@ base64encode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t } while (tp < tc); if (n) { - n += tp - tmp + (fp < fe); + n += (size_t)(tp - tmp + (fp < fe)); tp = tmp; } else @@ -121,33 +122,33 @@ base64encode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t *fn = fp; if (tn) *tn = tp; - n = tp - (unsigned char*)tb + 1; + n = (size_t)(tp - (unsigned char*)tb + 1); tp = tmp; te = tp + sizeof(tmp) - B64_EC + 1; } - b = *fp++ << 16; + b = (unsigned long)(*fp++ << 16); if (fz == 2) - b |= *fp++ << 8; + b |= (unsigned long)(*fp++ << 8); *tp++ = m[b >> 18]; *tp++ = m[(b >> 12) & 077]; *tp++ = (fz == 2) ? m[(b >> 6) & 077] : PAD; *tp++ = PAD; } if (n) - n += (tp - tmp) - 1; + n += (size_t)(tp - tmp) - 1; else { if (tp > (unsigned char*)tb && *(tp - 1) == '\n') tp--; if (tp < te) *tp = 0; - n = tp - (unsigned char*)tb; + n = (size_t)(tp - (unsigned char*)tb); if (tn) *tn = tp; if (fn) *fn = fp; } - return n; + return (ssize_t)n; } /* @@ -173,7 +174,7 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t { memset(m, B64_IGN, sizeof(map)); for (tp = (unsigned char*)alp; c = *tp; tp++) - m[c] = tp - (unsigned char*)alp; + m[c] = (unsigned char)(tp - (unsigned char*)alp); m[PAD] = B64_PAD; m[' '] = m['\t'] = m['\n'] = B64_SPC; } @@ -201,7 +202,7 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t { if ((c = m[*fp++]) < 64) { - v = (v << 6) | c; + v = (v << 6) | (unsigned long)c; if (++state == 4) { if (tp >= tx) @@ -213,12 +214,12 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t n = tp - (unsigned char*)tb + 4; if (tp < te) { - *tp++ = (v >> 16); + *tp++ = (unsigned char)(v >> 16); if (tp < te) { - *tp++ = (v >> 8); + *tp++ = (unsigned char)(v >> 8); if (tp < te) - *tp++ = (v); + *tp++ = (unsigned char)(v); } } if (tn) @@ -229,9 +230,9 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t } else { - *tp++ = (v >> 16); - *tp++ = (v >> 8); - *tp++ = (v); + *tp++ = (unsigned char)(v >> 16); + *tp++ = (unsigned char)(v >> 8); + *tp++ = (unsigned char)(v); } fc = fp; state = 0; @@ -247,7 +248,7 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t goto done; case 2: if (tp < te) - *tp++ = v >> 4; + *tp++ = (unsigned char)(v >> 4); else if (n) n++; else @@ -262,9 +263,9 @@ base64decode(const void* fb, size_t fz, void** fn, void* tb, size_t tz, void** t case 3: if (tp < te) { - *tp++ = v >> 10; + *tp++ = (unsigned char)(v >> 10); if (tp < te) - *tp++ = v >> 2; + *tp++ = (unsigned char)(v >> 2); else { n = tp - (unsigned char*)tb + 2; diff --git a/src/lib/libast/string/ccmap.c b/src/lib/libast/string/ccmap.c index 785fcd9facf7..48ab0b578218 100644 --- a/src/lib/libast/string/ccmap.c +++ b/src/lib/libast/string/ccmap.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -603,7 +603,7 @@ static const unsigned char tab[] = }; #define MAP 256 -#define MAPS (sizeof(tab)/MAP) +#define MAPS ((int)sizeof(tab)/MAP) struct Map_s; typedef struct Map_s Map_t; @@ -666,7 +666,7 @@ _ccmap(int i, int o) z = (unsigned char*)tab + MAP * (2 * (i - 1) + 1); m = map->map; for (n = 0; n < MAP; n++) - m[n] = n; + m[n] = (unsigned char)n; for (n = MAP - 1; n >= 0; n--) m[n] = a[z[n]]; map->next = maps; diff --git a/src/lib/libast/string/ccmapid.c b/src/lib/libast/string/ccmapid.c index c5773ca187f2..434ec69ba774 100644 --- a/src/lib/libast/string/ccmapid.c +++ b/src/lib/libast/string/ccmapid.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -133,9 +133,9 @@ int ccmapid(const char* name) { const Ccmap_t* mp; - int c; const Ccmap_t* bp; - int n; + int c; + ssize_t n; ssize_t sub[2]; bp = 0; diff --git a/src/lib/libast/string/chresc.c b/src/lib/libast/string/chresc.c index 5d05714cf29e..7ab121132c40 100644 --- a/src/lib/libast/string/chresc.c +++ b/src/lib/libast/string/chresc.c @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -44,7 +45,7 @@ utf32towc(uint32_t utf32) /* in ASCII range: no conversion needed (we only support supersets of ASCII) */ if (utf32 <= 0x7F) - return utf32; + return (int)utf32; /* in ASCII-only locales, only ASCII (0 - 0x7F) is valid */ if (!mbwide() && (ast.locale.set & AST_LC_7bit)) return -1; @@ -53,7 +54,7 @@ utf32towc(uint32_t utf32) return -1; /* in UTF-8 locale: no conversion needed */ if (ast.locale.set & AST_LC_utf8) - return utf32; + return (int)utf32; /* open an iconv descriptor for converting from UTF-8 to the current locale -- * remember it across invocations; setlocale will close/reset it upon changing locale */ if (ast.locale.uc2wc == (void*)(-1) && (ast.locale.uc2wc = iconv_open(getcodeset(), "UTF-8")) == (void*)(-1)) @@ -65,11 +66,11 @@ utf32towc(uint32_t utf32) inbuf = tmp_in; outbuf = tmp_out; outbytesleft = sizeof(tmp_out); - if (iconv(ast.locale.uc2wc, &inbuf, &inbytesleft, &outbuf, &outbytesleft) < 0 || inbytesleft) + if (iconv(ast.locale.uc2wc, &inbuf, &inbytesleft, &outbuf, &outbytesleft) == (size_t)-1 || inbytesleft) return -1; if (!mbwide()) return *(unsigned char*)tmp_out; - if (mb2wc(wchar, tmp_out, outbuf - tmp_out) <= 0) + if (mb2wc(wchar, tmp_out, (size_t)(outbuf - tmp_out)) <= 0) return -1; return wchar; } @@ -249,7 +250,7 @@ chrexp(const char* s, char** p, int* m, int flags) w = 1; if (n <= 2 && !(flags & FMT_EXP_CHAR) || n > 2 && !(flags & FMT_EXP_WIDE) || - convert && (c = utf32towc(c)) <= 0) + convert && (c = utf32towc((uint32_t)c)) <= 0) { s = b; goto noexpand; diff --git a/src/lib/libast/string/fmtbuf.c b/src/lib/libast/string/fmtbuf.c index 5827f7f82dd4..998999fdd26b 100644 --- a/src/lib/libast/string/fmtbuf.c +++ b/src/lib/libast/string/fmtbuf.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -43,7 +43,7 @@ fmtbuf(size_t n) { if (n > bigsiz) { - bigsiz = roundof(n, 8 * 1024); + bigsiz = roundof(n, 8U * 1024U); if (!(big = newof(big, char, bigsiz, 0))) return NULL; } diff --git a/src/lib/libast/string/fmtclock.c b/src/lib/libast/string/fmtclock.c index d829748a8014..c91c27d6e486 100644 --- a/src/lib/libast/string/fmtclock.c +++ b/src/lib/libast/string/fmtclock.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -30,16 +30,16 @@ fmtclock(Sfulong_t t) { int u; char* buf; - int z; + size_t z; - static unsigned long clk_tck; + static clock_t clk_tck; if (!clk_tck) { #ifdef CLOCKS_PER_SEC - clk_tck = CLOCKS_PER_SEC; + clk_tck = (clock_t)CLOCKS_PER_SEC; #else - if (!(clk_tck = astconf_ulong(CONF_CLK_TCK))) + if (!(clk_tck = (clock_t)astconf_ulong(CONF_CLK_TCK))) clk_tck = 60; #endif /* CLOCKS_PER_SEC */ } @@ -47,13 +47,13 @@ fmtclock(Sfulong_t t) return "0"; if (t == ((Sfulong_t)~0)) return "%"; - t = (t * 1000000) / clk_tck; + t = (t * 1000000) / (Sfulong_t)clk_tck; if (t < 1000) u = 'u'; else if ((t /= 1000) < 1000) u = 'm'; else - return fmtelapsed(t / 10, 100); + return fmtelapsed((unsigned long)t / 10, 100); buf = fmtbuf(z = 7); sfsprintf(buf, z, "%I*u%cs", sizeof(t), t, u); return buf; diff --git a/src/lib/libast/string/fmtdev.c b/src/lib/libast/string/fmtdev.c index b5241a493f72..27bbe2d70ca1 100644 --- a/src/lib/libast/string/fmtdev.c +++ b/src/lib/libast/string/fmtdev.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -35,23 +35,23 @@ char* fmtdev(struct stat* st) { char* buf; - unsigned long mm; + dev_t mm; unsigned int ma; unsigned int mi; - int z; + size_t z; mm = (S_ISBLK(st->st_mode) || S_ISCHR(st->st_mode)) ? idevice(st) : st->st_dev; - ma = major(mm); - mi = minor(mm); + ma = (unsigned int)major(mm); + mi = (unsigned int)minor(mm); buf = fmtbuf(z = 17); - if (ma == '#' && isalnum(mi)) + if (ma == '#' && isalnum((int)mi)) { /* * Plan? Nein! */ - buf[0] = ma; - buf[1] = mi; + buf[0] = (char)ma; + buf[1] = (char)mi; buf[2] = 0; } else diff --git a/src/lib/libast/string/fmtesc.c b/src/lib/libast/string/fmtesc.c index 1a358cc4b471..3a9715f08dc5 100644 --- a/src/lib/libast/string/fmtesc.c +++ b/src/lib/libast/string/fmtesc.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -91,12 +91,12 @@ fmtquote(const char* as, const char* qb, const char* qe, size_t n, int flags) { #if _hdr_wchar && _hdr_wctype c = mbchar(s); - if (!spaced && !escaped && (iswspace(c) || iswcntrl(c))) + if (!spaced && !escaped && (iswspace((wint_t)c) || iswcntrl((wint_t)c))) spaced = 1; s -= m; #endif while (m--) - *b++ = *s++; + *b++ = (char)*s++; } else { @@ -176,8 +176,8 @@ fmtquote(const char* as, const char* qb, const char* qe, size_t n, int flags) { escaped = 1; *b++ = '\''; - *b++ = c; - *b++ = *s++; + *b++ = (char)c; + *b++ = (char)*s++; if (shell) { spaced = 1; @@ -188,7 +188,7 @@ fmtquote(const char* as, const char* qb, const char* qe, size_t n, int flags) else { escaped = 1; - *b++ = c; + *b++ = (char)c; c = *s++; } } diff --git a/src/lib/libast/string/fmtfmt.c b/src/lib/libast/string/fmtfmt.c index ed4e29fffe09..066b799cdbc3 100644 --- a/src/lib/libast/string/fmtfmt.c +++ b/src/lib/libast/string/fmtfmt.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -47,15 +48,15 @@ fmtfmt(const char* as) { char* s = (char*)as; char* buf; - int i; int c; int a; int q; int x; int t; - int m; int n; - int z; + ssize_t i; + ssize_t m; + ssize_t z; char formats[256]; unsigned int extra[elementsof(formats)]; @@ -175,10 +176,10 @@ fmtfmt(const char* as) i = a; else i++; - if (i < elementsof(formats)) + if (i < (ssize_t)elementsof(formats)) { - formats[i] = t; - if (extra[i] = x) + formats[i] = (char)t; + if (extra[i] = (unsigned)x) do z++; while (x /= 10); if (m < i) m = i; @@ -189,7 +190,7 @@ fmtfmt(const char* as) } break; } - s = buf = fmtbuf(m + z); + s = buf = fmtbuf((size_t)(m + z)); for (i = 1; i <= m; i++) { if (extra[i]) diff --git a/src/lib/libast/string/fmtgid.c b/src/lib/libast/string/fmtgid.c index ecbfccdc8013..e125f7ac53a7 100644 --- a/src/lib/libast/string/fmtgid.c +++ b/src/lib/libast/string/fmtgid.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -37,7 +37,7 @@ extern struct group* getgrgid(gid_t); typedef struct Id_s { Dtlink_t link; - int id; + gid_t id; char name[1]; } Id_t; @@ -46,12 +46,12 @@ typedef struct Id_s */ char* -fmtgid(int gid) +fmtgid(gid_t gid) { Id_t* ip; char* name; struct group* gr; - int z; + size_t z; static Dt_t* dict; static Dtdisc_t disc; @@ -59,7 +59,7 @@ fmtgid(int gid) if (!dict) { disc.key = offsetof(Id_t, id); - disc.size = sizeof(int); + disc.size = sizeof(gid_t); dict = dtopen(&disc, Dtset); } else if (ip = (Id_t*)dtmatch(dict, &gid)) diff --git a/src/lib/libast/string/fmtident.c b/src/lib/libast/string/fmtident.c index f0c761aac2b1..01c25e6419bd 100644 --- a/src/lib/libast/string/fmtident.c +++ b/src/lib/libast/string/fmtident.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -33,7 +34,7 @@ fmtident(const char* a) char* s = (char*)a; char* t; char* buf; - int i; + size_t i; i = 0; for (;;) @@ -63,7 +64,7 @@ fmtident(const char* a) break; while (t > s && isspace(t[-1])) t--; - i = t - s; + i = (size_t)(t - s); buf = fmtbuf(i + 1); memcpy(buf, s, i); s = buf; diff --git a/src/lib/libast/string/fmtint.c b/src/lib/libast/string/fmtint.c index f3b90e7e9f4e..e359a37e1cf7 100644 --- a/src/lib/libast/string/fmtint.c +++ b/src/lib/libast/string/fmtint.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -83,22 +84,24 @@ fmtint(intmax_t ll, int unsign) { char *buff; uintmax_t n,m; - int j=0,k=3*sizeof(ll); + int j=0; + ssize_t k=3*(ssize_t)sizeof(ll); if(unsign || ll>=0) - n = ll; + n = (uintmax_t)ll; else { - n = -ll; + n = (uintmax_t)-ll; j = 1; } if(n<10) { - buff = fmtbuf(k=3); + k = 3; + buff = fmtbuf((size_t)k); buff[--k] = 0; - buff[--k] = '0' + n; + buff[--k] = (char)('0' + n); goto skip; } - buff = fmtbuf(k); + buff = fmtbuf((size_t)k); buff[--k] = 0; do { diff --git a/src/lib/libast/string/fmtip4.c b/src/lib/libast/string/fmtip4.c index 7f59b2a4fbf2..73b0b4c75bfe 100644 --- a/src/lib/libast/string/fmtip4.c +++ b/src/lib/libast/string/fmtip4.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -28,12 +29,12 @@ char* fmtip4(uint32_t addr, int bits) { char* buf; - int z; - int i; + size_t z; + ssize_t i; buf = fmtbuf(z = 20); i = sfsprintf(buf, z, "%d.%d.%d.%d", (addr>>24)&0xff, (addr>>16)&0xff, (addr>>8)&0xff, (addr)&0xff); if (bits >= 0 && bits <= 32) - sfsprintf(buf + i, z - i, "/%d", bits); + sfsprintf(buf + i, z - (size_t)i, "/%d", bits); return buf; } diff --git a/src/lib/libast/string/fmtip6.c b/src/lib/libast/string/fmtip6.c index 750cedecd472..9c4dfd7fa5d5 100644 --- a/src/lib/libast/string/fmtip6.c +++ b/src/lib/libast/string/fmtip6.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -74,7 +74,7 @@ fmtip6(const unsigned char* addr, int bits) for (i = z; i < n; i += 2) { for (k = i; i < n - 1 && !a[i] && !a[i + 1]; i += 2); - if ((r[k] = i - k) > r[m] || r[k] == r[m] && i >= (n - 1)) + if ((r[k] = (unsigned char)(i - k)) > r[m] || r[k] == r[m] && i >= (n - 1)) m = k; } if (!m) diff --git a/src/lib/libast/string/fmtmatch.c b/src/lib/libast/string/fmtmatch.c index dd8b41a14baf..5639449e2d07 100644 --- a/src/lib/libast/string/fmtmatch.c +++ b/src/lib/libast/string/fmtmatch.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -40,12 +40,11 @@ fmtmatch(const char* as) char* z; int a; int e; - int n; + ssize_t n; char* buf; char* stack[32]; - c = 3 * (strlen(s) + 1); - buf = fmtbuf(c); + buf = fmtbuf(3 * (strlen(s) + 1)); t = b = buf + 3; p = stack; if (a = *s == '^') @@ -68,14 +67,14 @@ fmtmatch(const char* as) *t++ = *s++; *t++ = '('; *t++ = '\\'; - *t++ = c; + *t++ = (char)c; c = ')'; break; case '|': case '&': if (c == '(') { - *t++ = c; + *t++ = (char)c; c = *s++; goto logical; } @@ -87,11 +86,11 @@ fmtmatch(const char* as) *t++ = '\\'; break; } - *t++ = c; + *t++ = (char)c; continue; case '[': x = t; - *t++ = c; + *t++ = (char)c; if ((c = *s++) == '^') { *t++ = '!'; @@ -100,18 +99,18 @@ fmtmatch(const char* as) else if (c == '!') { *t++ = '\\'; - *t++ = c; + *t++ = (char)c; c = *s++; } for (;;) { - if (!(*t++ = c)) + if (!(*t++ = (char)c)) return NULL; if (c == '\\') - *t++ = c; + *t++ = (char)c; if ((c = *s++) == ']') { - *t++ = c; + *t++ = (char)c; break; } } @@ -154,7 +153,7 @@ fmtmatch(const char* as) if (p == stack) return NULL; p--; - *t++ = c; + *t++ = (char)c; switch (*s) { case 0: @@ -177,7 +176,7 @@ fmtmatch(const char* as) for (z = s; *z != '}'; z++) if (!*z) return NULL; - n = z - s; + n = (ssize_t)(z - s); if (*++z == '?') n++; x = *p + n; @@ -229,7 +228,7 @@ fmtmatch(const char* as) n = *(t - 1); if (t == b || n == '(' || n == '|') return NULL; - *(t - 1) = c; + *(t - 1) = (char)c; if (c == '{') { for (z = s; *z != '}'; z++) @@ -243,7 +242,7 @@ fmtmatch(const char* as) *t++ = '-'; } *t++ = '('; - *t++ = n; + *t++ = (char)n; *t++ = ')'; continue; case '|': @@ -258,14 +257,14 @@ fmtmatch(const char* as) *--b = '('; *--b = '@'; } - *t++ = c; + *t++ = (char)c; continue; case '$': if (e = !*s) break; /* FALLTHROUGH */ default: - *t++ = c; + *t++ = (char)c; continue; } break; diff --git a/src/lib/libast/string/fmtnum.c b/src/lib/libast/string/fmtnum.c index 05996adad756..ace98f0b8565 100644 --- a/src/lib/libast/string/fmtnum.c +++ b/src/lib/libast/string/fmtnum.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -33,14 +34,14 @@ fmtnum(unsigned long n, int m) int i; unsigned long r; char* buf; - int z; + size_t z; char suf[2]; if (m > 1) { r = n; - n /= m; + n /= (unsigned long)m; r -= n; } else diff --git a/src/lib/libast/string/fmtre.c b/src/lib/libast/string/fmtre.c index eb2e5e1f0d1b..61136161126c 100644 --- a/src/lib/libast/string/fmtre.c +++ b/src/lib/libast/string/fmtre.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -31,26 +31,26 @@ typedef struct Stack_s { char* beg; - short len; - short min; + ptrdiff_t dlen; + char min; } Stack_t; char* fmtre(const char* as) { char* s = (char*)as; - int c; + char c; + ssize_t i; char* t; Stack_t* p; char* x; - int n; - int end; + char n; + char end; char* buf; Stack_t stack[32]; end = 1; - c = 2 * strlen(s) + 1; - t = buf = fmtbuf(c); + t = buf = fmtbuf(2 * strlen(s) + 1); p = stack; if (*s != '*' || *(s + 1) == '(' || *(s + 1) == '-' && *(s + 2) == '(') *t++ = '^'; @@ -111,7 +111,7 @@ fmtre(const char* as) return NULL; p->beg = s - 1; s = x; - p->len = s - p->beg; + p->dlen = s - p->beg; if (p->min = *s == '-') s++; p++; @@ -144,14 +144,14 @@ fmtre(const char* as) for (s += 3; *t = *s; t++, s++); continue; } - p->len = 0; + p->dlen = 0; p->min = 0; *t++ = *s++; *t++ = '?'; } else { - p->len = c != '@'; + p->dlen = c != '@'; if (p->min = *s == '-') s++; *t++ = *s++; @@ -180,7 +180,7 @@ fmtre(const char* as) if (p >= &stack[elementsof(stack)]) return NULL; p->beg = s - 1; - p->len = 0; + p->dlen = 0; p->min = 0; p++; *t++ = c; @@ -190,8 +190,8 @@ fmtre(const char* as) return NULL; *t++ = c; p--; - for (c = 0; c < p->len; c++) - *t++ = p->beg[c]; + for (i = 0; i < p->dlen; i++) + *t++ = p->beg[i]; if (p->min) *t++ = '?'; continue; diff --git a/src/lib/libast/string/fmtsignal.c b/src/lib/libast/string/fmtsignal.c index aa6defbb7c0a..909fe8136e2f 100644 --- a/src/lib/libast/string/fmtsignal.c +++ b/src/lib/libast/string/fmtsignal.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -31,7 +32,7 @@ char* fmtsignal(int sig) { char* buf; - int z; + size_t z; if (sig >= 0) { diff --git a/src/lib/libast/string/fmttime.c b/src/lib/libast/string/fmttime.c index dab05a9e4791..934d8b4436e0 100644 --- a/src/lib/libast/string/fmttime.c +++ b/src/lib/libast/string/fmttime.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -29,7 +30,7 @@ char* fmttime(const char* format, time_t clock) { char* buf; - int z; + size_t z; buf = fmtbuf(z = 80); tmfmt(buf, z, format, &clock); diff --git a/src/lib/libast/string/fmttmx.c b/src/lib/libast/string/fmttmx.c index 357eb0be258f..2b6f2fb7ed1e 100644 --- a/src/lib/libast/string/fmttmx.c +++ b/src/lib/libast/string/fmttmx.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2022 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -29,7 +30,7 @@ fmttmx(const char* fmt, Time_t t) { char* b; char* e; - int z; + size_t z; z = 0; do diff --git a/src/lib/libast/string/fmtuid.c b/src/lib/libast/string/fmtuid.c index 4b41eb7e6b27..5787286ef8e3 100644 --- a/src/lib/libast/string/fmtuid.c +++ b/src/lib/libast/string/fmtuid.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -37,7 +37,7 @@ extern struct passwd* getpwuid(uid_t); typedef struct Id_s { Dtlink_t link; - int id; + uid_t id; char name[1]; } Id_t; @@ -46,12 +46,12 @@ typedef struct Id_s */ char* -fmtuid(int uid) +fmtuid(uid_t uid) { Id_t* ip; char* name; struct passwd* pw; - int z; + size_t z; static Dt_t* dict; static Dtdisc_t disc; @@ -59,7 +59,7 @@ fmtuid(int uid) if (!dict) { disc.key = offsetof(Id_t, id); - disc.size = sizeof(int); + disc.size = sizeof(uid_t); dict = dtopen(&disc, Dtset); } else if (ip = (Id_t*)dtmatch(dict, &uid)) diff --git a/src/lib/libast/string/strelapsed.c b/src/lib/libast/string/strelapsed.c index 0916c98639b7..3b70c61ee769 100644 --- a/src/lib/libast/string/strelapsed.c +++ b/src/lib/libast/string/strelapsed.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -37,10 +37,10 @@ strelapsed(const char* s, char** e, int n) int c; unsigned long v; unsigned long t = 0; - int f = 0; + unsigned long f = 0; int p = 0; int z = 1; - int m; + unsigned long m; const char* last; for (;;) @@ -60,11 +60,11 @@ strelapsed(const char* s, char** e, int n) } v = 0; while ((c = *s++) >= '0' && c <= '9') - v = v * 10 + c - '0'; - v *= n; + v = v * 10 + (unsigned long)c - '0'; + v *= (unsigned long)n; if (c == '.') - for (m = n; (c = *s++) >= '0' && c <= '9';) - f += (m /= 10) * (c - '0'); + for (m = (unsigned long)n; (c = *s++) >= '0' && c <= '9';) + f += (m /= 10) * ((unsigned long)c - '0'); if (c == '%') { t = ~t; diff --git a/src/lib/libast/string/stresc.c b/src/lib/libast/string/stresc.c index 9988d78c9987..ebeb5f10c8da 100644 --- a/src/lib/libast/string/stresc.c +++ b/src/lib/libast/string/stresc.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -27,7 +28,7 @@ #include -int +ptrdiff_t strexp(char* s, int flags) { char* t; @@ -51,13 +52,13 @@ strexp(char* s, int flags) continue; } } - *t++ = c; + *t++ = (char)c; } *t = 0; return t - b; } -int +ptrdiff_t stresc(char* s) { return strexp(s, FMT_EXP_CHAR|FMT_EXP_LINE|FMT_EXP_WIDE); diff --git a/src/lib/libast/string/strgid.c b/src/lib/libast/string/strgid.c index 27de3fcd58fa..fd829d1103f7 100644 --- a/src/lib/libast/string/strgid.c +++ b/src/lib/libast/string/strgid.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -75,28 +75,28 @@ strgid(const char* name) else if (ip = (Id_t*)dtmatch(dict, name)) return ip->id; if (gr = getgrnam(name)) - id = gr->gr_gid; + id = (int)gr->gr_gid; else if (pw = getpwnam(name)) - id = pw->pw_gid; + id = (int)pw->pw_gid; else { - id = strtol(name, &e, 0); + id = (int)strtol(name, &e, 0); #if _WINIX if (!*e) { - if (!getgrgid(id)) + if (!getgrgid((gid_t)id)) id = -1; } else if (!streq(name, "sys")) id = -1; else if (gr = getgrnam("Administrators")) - id = gr->gr_gid; + id = (int)gr->gr_gid; else if (pw = getpwnam("Administrator")) - id = pw->pw_gid; + id = (int)pw->pw_gid; else id = -1; #else - if (*e || !getgrgid(id)) + if (*e || !getgrgid((gid_t)id)) id = -1; #endif } diff --git a/src/lib/libast/string/strlcat.c b/src/lib/libast/string/strlcat.c index aaac16c5ac30..2da00c30a8fb 100644 --- a/src/lib/libast/string/strlcat.c +++ b/src/lib/libast/string/strlcat.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -66,7 +66,7 @@ strlcat(char* s, const char* t, size_t n) } if (!n) while (*t++); - return (t - o) + m - 1; + return (size_t)(t - o) + m - 1; } #endif diff --git a/src/lib/libast/string/strlcpy.c b/src/lib/libast/string/strlcpy.c index 0aab4a77acd9..1764056e393d 100644 --- a/src/lib/libast/string/strlcpy.c +++ b/src/lib/libast/string/strlcpy.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -54,7 +54,7 @@ strlcpy(char* s, const char* t, size_t n) } while (*s++ = *t++); if (!n) while (*t++); - return t - o - 1; + return (size_t)(t - o - 1); } #endif diff --git a/src/lib/libast/string/strnvcmp.c b/src/lib/libast/string/strnvcmp.c index 0b2013c19675..74906ddf5508 100644 --- a/src/lib/libast/string/strnvcmp.c +++ b/src/lib/libast/string/strnvcmp.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -48,9 +49,9 @@ strnvcmp(const char* a, const char* b, size_t n) { na = nb = 0; while (a < ae && isdigit(*a)) - na = na * 10 + *a++ - '0'; + na = na * 10 + (unsigned)*a++ - '0'; while (b < be && isdigit(*b)) - nb = nb * 10 + *b++ - '0'; + nb = nb * 10 + (unsigned)*b++ - '0'; if (na < nb) return -1; if (na > nb) diff --git a/src/lib/libast/string/stropt.c b/src/lib/libast/string/stropt.c index d859cf4bbfd3..b3bb792205b0 100644 --- a/src/lib/libast/string/stropt.c +++ b/src/lib/libast/string/stropt.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -125,23 +126,23 @@ stropt(const char* as, const void* tab, int siz, int(*f)(void*, const void*, int { if (c == '\\') { - *t++ = chresc(s - 1, &e); + *t++ = (char)chresc(s - 1, &e); s = e; } else if (c == qr) { if (qr != ql) - *t++ = c; + *t++ = (char)c; if (--qc <= 0) qr = ql = 0; } else if (c == ql) { - *t++ = c; + *t++ = (char)c; qc++; } else if (qr) - *t++ = c; + *t++ = (char)c; else if (c == ',' || isspace(c)) break; else if (c == '"' || c == '\'') @@ -151,7 +152,7 @@ stropt(const char* as, const void* tab, int siz, int(*f)(void*, const void*, int } else { - *t++ = c; + *t++ = (char)c; if (c == '{') { ql = c; @@ -174,7 +175,7 @@ stropt(const char* as, const void* tab, int siz, int(*f)(void*, const void*, int c = *s; *s++ = 0; } - n = p ? (*f)(a, p, n, v) : (*f)(a, p, v - u, u); + n = p ? (*f)(a, p, n, v) : (*f)(a, p, (int)(v - u), u); if (n || !c) break; } diff --git a/src/lib/libast/string/strpsearch.c b/src/lib/libast/string/strpsearch.c index fb8d79ff95c9..1273d169ded0 100644 --- a/src/lib/libast/string/strpsearch.c +++ b/src/lib/libast/string/strpsearch.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -66,7 +67,7 @@ strpsearch(const void* tab, size_t num, size_t siz, const char* name, char** nex c = MAP(m, *((unsigned char*)name)); while (lo <= hi) { - mid = lo + (sequential ? 0 : (((hi - lo) / siz) / 2) * siz); + mid = lo + (sequential ? 0 : (((hi - lo) / (ssize_t)siz) / 2) * (ssize_t)siz); if (!(v = c - MAP(m, *(s = *((unsigned char**)mid)))) || *s == '[' && !(v = c - MAP(m, *++s)) && (v = 1)) { t = (unsigned char*)name; diff --git a/src/lib/libast/string/strsearch.c b/src/lib/libast/string/strsearch.c index 859ab6afaa87..9fa1dfb1c4a2 100644 --- a/src/lib/libast/string/strsearch.c +++ b/src/lib/libast/string/strsearch.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -42,7 +43,7 @@ strsearch(const void* tab, size_t num, size_t siz, Strcmp_f comparf, const char* while (lo <= hi) { - mid = lo + (((hi - lo) / siz) / 2) * siz; + mid = lo + (((hi - lo) / (ssize_t)siz) / 2) * (ssize_t)siz; if (!(v = context ? (*(Strcmp_context_f)comparf)(name, *((char**)mid), context) : (*comparf)(name, *((char**)mid)))) return mid; else if (v > 0) diff --git a/src/lib/libast/string/strtoi.h b/src/lib/libast/string/strtoi.h index e8daf55d2cb1..07b6b45c29a2 100644 --- a/src/lib/libast/string/strtoi.h +++ b/src/lib/libast/string/strtoi.h @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -115,7 +115,7 @@ #endif #define ADDOVER(n,c,s) ((S2I_umax-(n))<((S2I_unumber)((c)+(s)))) -#define MPYOVER(n,c) (((S2I_unumber)(n))>(S2I_umax/(c))) +#define MPYOVER(n,c) (((S2I_unumber)(n))>(S2I_umax/(S2I_unumber)(c))) static const S2I_unumber mm[] = { @@ -256,10 +256,10 @@ S2I_function(const char* a, char** e, int base) { if (S2I_valid(p) && (c = *p++) >= '0' && c <= '9') { - n = c - '0'; + n = (S2I_unumber)(c - '0'); if (S2I_valid(p) && (c = *p) >= '0' && c <= '9') { - n = (n << 3) + (n << 1) + c - '0'; + n = (n << 3) + (n << 1) + (S2I_unumber)c - '0'; p++; } if (S2I_valid(p) && *p == '#') @@ -267,7 +267,7 @@ S2I_function(const char* a, char** e, int base) if (n >= 2 && n <= 64) { k = s = p + 1; - base = n; + base = (int)n; } } else if (base) @@ -301,7 +301,7 @@ S2I_function(const char* a, char** e, int base) else { if (basep) - *basep = base; + *basep = (char)base; m = -1; } #endif @@ -332,9 +332,9 @@ S2I_function(const char* a, char** e, int base) { n = (n << 3) + (n << 1); c -= '0'; - if (ADDOVER(n, c, negative)) + if (ADDOVER(n, (S2I_unumber)c, (S2I_unumber)negative)) overflow = 1; - n += c; + n += (S2I_unumber)c; } } else if (p && (s - p) != (3 + S2I_valid(s))) @@ -359,7 +359,7 @@ S2I_function(const char* a, char** e, int base) n = negative ? S2I_min : S2I_max; #endif } - return n; + return (S2I_type)n; } else { @@ -392,7 +392,7 @@ S2I_function(const char* a, char** e, int base) n <<= shift; if (ADDOVER(n, c, negative)) overflow = 1; - n += c; + n += (S2I_unumber)c; } } } @@ -403,10 +403,10 @@ S2I_function(const char* a, char** e, int base) overflow = 1; else { - n *= base; + n *= (S2I_unumber)base; if (ADDOVER(n, c, negative)) overflow = 1; - n += c; + n += (S2I_unumber)c; } } c = *(s - 1); @@ -502,17 +502,17 @@ S2I_function(const char* a, char** e, int base) /* pseudo-float */ if (MPYOVER(n, m)) overflow = 1; - n *= m; + n *= (S2I_unumber)m; v = 0; while (S2I_valid(s) && (c = *s++) >= '0' && c <= '9') - v += (m /= 10) * (c - '0'); - if (ADDOVER(n, v, negative)) + v += (S2I_unumber)((m /= 10) * (c - '0')); + if (ADDOVER(n, v, (S2I_unumber)negative)) overflow = 1; n += v; v = 0; } else - v = m; + v = (S2I_unumber)m; s--; shift = 0; break; @@ -551,9 +551,9 @@ S2I_function(const char* a, char** e, int base) } else #if S2I_unsigned - if (shift >= (sizeof(S2I_type) * CHAR_BIT)) + if (shift >= ((ssize_t)sizeof(S2I_type) * CHAR_BIT)) #else - if (shift >= (sizeof(S2I_type) * CHAR_BIT - 1)) + if (shift >= ((ssize_t)sizeof(S2I_type) * CHAR_BIT - 1)) #endif { v = 0; @@ -620,5 +620,5 @@ S2I_function(const char* a, char** e, int base) errno = ERANGE; return (S2I_type)S2I_max; } - return negative ? -n : n; + return negative ? (S2I_type)-n : (S2I_type)n; } diff --git a/src/lib/libast/string/strtoip4.c b/src/lib/libast/string/strtoip4.c index 90a77c46564e..ccec32bed6c6 100644 --- a/src/lib/libast/string/strtoip4.c +++ b/src/lib/libast/string/strtoip4.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -62,7 +63,7 @@ strtoip4(const char* s, char** e, uint32_t* paddr, unsigned char* pbits) { n = 0; while ((c = *s++) >= '0' && c <= '9') - n = n * 10 + (c - '0'); + n = n * 10 + ((unsigned)c - '0'); if ((c == 'x' || c == 'X') && !part) { addr = n; @@ -76,7 +77,7 @@ strtoip4(const char* s, char** e, uint32_t* paddr, unsigned char* pbits) c -= 'F' - 10; else break; - addr = addr * 16 + c; + addr = addr * 16 + (unsigned)c; } part = 4; break; @@ -101,7 +102,7 @@ strtoip4(const char* s, char** e, uint32_t* paddr, unsigned char* pbits) { n = 0; while ((c = *s++) >= '0' && c <= '9') - n = n * 10 + (c - '0'); + n = n * 10 + ((unsigned)c - '0'); z = (z << 8) | n; part++; if (c != '.') @@ -111,7 +112,7 @@ strtoip4(const char* s, char** e, uint32_t* paddr, unsigned char* pbits) if (part > 4) goto done; if (z <= 32 && (!old || part < 2)) - bits = z; + bits = (unsigned char)z; else if (z) { if (part == 4 && (z & 0x8000001) == 1) diff --git a/src/lib/libast/string/strtoip6.c b/src/lib/libast/string/strtoip6.c index 52d553f63efe..2d658d678ecb 100644 --- a/src/lib/libast/string/strtoip6.c +++ b/src/lib/libast/string/strtoip6.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -39,15 +40,16 @@ strtoip6(const char* s, char** e, unsigned char* addr, unsigned char* bits) unsigned char* b = addr; unsigned char* x = b + IP6ADDR; unsigned char* z; - int c; + int c = 0; uint32_t a; static unsigned char lex[256]; if (!lex[0]) { - for (c = 0; c < sizeof(lex); ++c) - lex[c] = END; + size_t i; + for (i = 0; i < sizeof(lex); ++i) + lex[i] = END; lex['0'] = 0; lex['1'] = 1; lex['2'] = 2; @@ -81,14 +83,14 @@ strtoip6(const char* s, char** e, unsigned char* addr, unsigned char* bits) case PFX: if ((x - b) < 2) break; - *b++ = a>>8; - *b++ = a; + *b++ = (unsigned char)(a>>8); + *b++ = (unsigned char)a; break; case COL: if ((x - b) < 2) break; - *b++ = a>>8; - *b++ = a; + *b++ = (unsigned char)(a>>8); + *b++ = (unsigned char)a; a = 0; if (*s == ':') { @@ -121,17 +123,17 @@ strtoip6(const char* s, char** e, unsigned char* addr, unsigned char* bits) case END: case PFX: if (b < x) - *b++ = a; + *b++ = (unsigned char)a; a = 0; break; case DOT: if (b >= x) break; - *b++ = a; + *b++ = (unsigned char)a; a = 0; continue; default: - a = (a * 10) + c; + a = (a * 10) + (unsigned)c; continue; } break; @@ -157,7 +159,7 @@ strtoip6(const char* s, char** e, unsigned char* addr, unsigned char* bits) } break; default: - a = (a << 4) | c; + a = (a << 4) | (unsigned)c; continue; } break; @@ -182,11 +184,11 @@ strtoip6(const char* s, char** e, unsigned char* addr, unsigned char* bits) { a = 0; while ((c = lex[*((unsigned char*)s++)]) < 10) - a = a * 10 + c; + a = a * 10 + (unsigned)c; } else a = 0xff; - *bits = a; + *bits = (unsigned char)a; } } if (e) diff --git a/src/lib/libast/string/struid.c b/src/lib/libast/string/struid.c index 21cbcaefbc0f..39bab9895f62 100644 --- a/src/lib/libast/string/struid.c +++ b/src/lib/libast/string/struid.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -69,22 +69,22 @@ struid(const char* name) else if (ip = (Id_t*)dtmatch(dict, name)) return ip->id; if (pw = getpwnam(name)) - id = pw->pw_uid; + id = (int)pw->pw_uid; else { - id = strtol(name, &e, 0); + id = (int)strtol(name, &e, 0); #if _WINIX if (!*e) { - if (!getpwuid(id)) + if (!getpwuid((uid_t)id)) id = -1; } else if (streq(name, "root") && (pw = getpwnam("Administrator"))) - id = pw->pw_uid; + id = (int)pw->pw_uid; else id = -1; #else - if (*e || !getpwuid(id)) + if (*e || !getpwuid((uid_t)id)) id = -1; #endif } diff --git a/src/lib/libast/string/struniq.c b/src/lib/libast/string/struniq.c index 65af528bf579..78bf4b462f3b 100644 --- a/src/lib/libast/string/struniq.c +++ b/src/lib/libast/string/struniq.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -40,8 +41,8 @@ struniq(char** argv, int n) { while (streq(*ao, *an)) if (++an >= ae) - return ao - argv + 1; + return (int)(ao - argv + 1); *++ao = *an; } - return ao - argv + 1; + return (int)(ao - argv + 1); } diff --git a/src/lib/libast/string/strvcmp.c b/src/lib/libast/string/strvcmp.c index 6f7d919fea4d..5297be1637d7 100644 --- a/src/lib/libast/string/strvcmp.c +++ b/src/lib/libast/string/strvcmp.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ @@ -36,9 +37,9 @@ strvcmp(const char* a, const char* b) { na = nb = 0; while (isdigit(*a)) - na = na * 10 + *a++ - '0'; + na = na * 10 + (unsigned)*a++ - '0'; while (isdigit(*b)) - nb = nb * 10 + *b++ - '0'; + nb = nb * 10 + (unsigned)*b++ - '0'; if (na < nb) return -1; if (na > nb) diff --git a/src/lib/libast/string/swapget.c b/src/lib/libast/string/swapget.c index 1b16b71f80b8..fdd0a0b3e98b 100644 --- a/src/lib/libast/string/swapget.c +++ b/src/lib/libast/string/swapget.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -31,7 +32,7 @@ */ intmax_t -swapget(int op, const void* b, int n) +swapget(int op, const void* b, size_t n) { unsigned char* p; unsigned char* d; diff --git a/src/lib/libast/string/swapmem.c b/src/lib/libast/string/swapmem.c index c8f99612bd23..58cd43ec839c 100644 --- a/src/lib/libast/string/swapmem.c +++ b/src/lib/libast/string/swapmem.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -36,9 +37,9 @@ swapmem(int op, const void* from, void* to, size_t n) { char* f = (char*)from; char* t = (char*)to; - int c; + char c; - switch (op & (n - 1)) + switch (op & (int)(n - 1)) { case 0: if (t != f) diff --git a/src/lib/libast/string/swapop.c b/src/lib/libast/string/swapop.c index 473f80894c07..f659591f463c 100644 --- a/src/lib/libast/string/swapop.c +++ b/src/lib/libast/string/swapop.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -32,20 +33,20 @@ * this is a workaround for 4 byte magic predicting 8 byte swap */ -int -swapop(const void* internal, const void* external, int size) +ssize_t +swapop(const void* internal, const void* external, ssize_t size) { int op; - int z; + ssize_t z; char tmp[sizeof(intmax_t)]; if ((z = size) < 0) z = -z; if (z <= 1) return 0; - if (z <= sizeof(intmax_t)) + if (z <= (ssize_t)sizeof(intmax_t)) for (op = 0; op < z; op++) - if (!memcmp(internal, swapmem(op, external, tmp, z), z)) + if (!memcmp(internal, swapmem(op, external, tmp, (size_t)z), (size_t)z)) { if (size < 0 && z == 4 && op == 3) op = 7; diff --git a/src/lib/libast/string/swapput.c b/src/lib/libast/string/swapput.c index 6e2b53a10bf0..40c302f90cb3 100644 --- a/src/lib/libast/string/swapput.c +++ b/src/lib/libast/string/swapput.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -31,13 +32,13 @@ */ void* -swapput(int op, void* b, int n, intmax_t v) +swapput(int op, void* b, size_t n, intmax_t v) { char* p = (char*)b + n; while (p > (char*)b) { - *--p = v; + *--p = (char)v; v >>= CHAR_BIT; } if (op) diff --git a/src/lib/libast/string/tokline.c b/src/lib/libast/string/tokline.c index 5eed4f3f45e3..6f29f16a519b 100644 --- a/src/lib/libast/string/tokline.c +++ b/src/lib/libast/string/tokline.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2024 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -57,7 +57,7 @@ spliceline(Sfio_t* s, int op, void* val, Sfdisc_t* ad) Splice_t* d = (Splice_t*)ad; char* b; int c; - int n; + ptrdiff_t n; int q; int j; char* e; @@ -77,7 +77,7 @@ spliceline(Sfio_t* s, int op, void* val, Sfdisc_t* ad) { if (!(buf = sfgetr(d->sp, '\n', 0)) && !(buf = sfgetr(d->sp, '\n', -1))) return 0; - n = sfvalue(d->sp); + n = (ptrdiff_t)sfvalue(d->sp); q = d->quote; j = 0; (*d->line)++; @@ -132,7 +132,7 @@ spliceline(Sfio_t* s, int op, void* val, Sfdisc_t* ad) } } } while (n <= 0); - sfsetbuf(s, buf, n); + sfsetbuf(s, buf, (size_t)n); d->quote = q; return 1; default: @@ -179,7 +179,7 @@ tokline(const char* arg, int flags, int* line) } else if ((p = sfreserve(f, 0, 0)) && sfvalue(f) > 11 && strmatch(p, "#!!! +([-0-9]) *([!\n]) !!!\n*") && (e = strchr(p, '\n'))) { - flags = strtol(p + 5, &p, 10); + flags = (int)strtol(p + 5, &p, 10); error(flags, "%s:%-.*s", arg, e - p - 4, p); } d->disc.exceptf = spliceline; diff --git a/src/lib/libast/string/tokscan.c b/src/lib/libast/string/tokscan.c index c3aae5e158af..4876aff29108 100644 --- a/src/lib/libast/string/tokscan.c +++ b/src/lib/libast/string/tokscan.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * -* Copyright (c) 2020-2023 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -14,6 +14,7 @@ * David Korn * * Phong Vo * * Martijn Dekker * +* Johnothan King * * * ***********************************************************************/ /* @@ -77,7 +78,7 @@ lextok(char* s, int c, char** p, int* n) if (*s == '(' && (!c || c == ' ' || c == '\n')) { - q = strtol(s + 1, &b, 10); + q = (int)strtol(s + 1, &b, 10); if (*b == ':') { if (*(t = ++b + q) == ')' || *t == '\t') @@ -252,7 +253,7 @@ tokscan(char* s, char** nxt, const char* fmt, ...) } else { - if (p_char) *p_char = c; + if (p_char) *p_char = (char)c; s++; num++; } diff --git a/src/lib/libast/string/utf32toutf8.c b/src/lib/libast/string/utf32toutf8.c index ed5402b74a17..32e5c332dec3 100644 --- a/src/lib/libast/string/utf32toutf8.c +++ b/src/lib/libast/string/utf32toutf8.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1985-2013 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -51,7 +51,7 @@ static const Utf8_t ops[] = size_t utf32toutf8(char* s, uint32_t w) { - int i; + size_t i; char* b; char tmp[UTF8_LEN_MAX]; @@ -62,20 +62,20 @@ utf32toutf8(char* s, uint32_t w) if (w < ops[i].range) { b = s; - *s++ = ops[i].prefix | (w >> ops[i].shift); + *s++ = (char)(ops[i].prefix | (w >> ops[i].shift)); switch (ops[i].shift) { - case 30: *s++ = 0x80 | ((w >> 24) & 0x3f); + case 30: *s++ = (char)(0x80 | ((w >> 24) & 0x3f)); /* FALLTHROUGH */ - case 24: *s++ = 0x80 | ((w >> 18) & 0x3f); + case 24: *s++ = (char)(0x80 | ((w >> 18) & 0x3f)); /* FALLTHROUGH */ - case 18: *s++ = 0x80 | ((w >> 12) & 0x3f); + case 18: *s++ = (char)(0x80 | ((w >> 12) & 0x3f)); /* FALLTHROUGH */ - case 12: *s++ = 0x80 | ((w >> 6) & 0x3f); + case 12: *s++ = (char)(0x80 | ((w >> 6) & 0x3f)); /* FALLTHROUGH */ - case 6: *s++ = 0x80 | (w & 0x3f); + case 6: *s++ = (char)(0x80 | (w & 0x3f)); } - return s - b; + return (size_t)(s - b); } } return 0; diff --git a/src/lib/libcmd/fold.c b/src/lib/libcmd/fold.c index 49d476fd0f79..c7f0b2975ad0 100644 --- a/src/lib/libcmd/fold.c +++ b/src/lib/libcmd/fold.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1992-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -188,7 +188,12 @@ b_fold(int argc, char** argv, Shbltin_t* context) cols['\t'] = cols[' ']; continue; case 'c': - contsize = stresc(cont = strdup(opt_info.arg)); + if(!(cont = strdup(opt_info.arg))) + { + error(ERROR_SYSTEM|ERROR_PANIC, "out of memory"); + UNREACHABLE(); + } + contsize = (size_t)stresc(cont); continue; case 'd': if (n = *opt_info.arg) diff --git a/src/lib/libcmd/paste.c b/src/lib/libcmd/paste.c index 35a8475cd0ee..4c62f02c6451 100644 --- a/src/lib/libcmd/paste.c +++ b/src/lib/libcmd/paste.c @@ -2,7 +2,7 @@ * * * This software is part of the ast package * * Copyright (c) 1992-2012 AT&T Intellectual Property * -* Copyright (c) 2020-2025 Contributors to ksh 93u+m * +* Copyright (c) 2020-2026 Contributors to ksh 93u+m * * and is licensed under the * * Eclipse Public License, Version 2.0 * * * @@ -79,10 +79,10 @@ typedef struct Delim_s * to */ -static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, const char *delim, int dsiz, int dlen, Delim_t* mp) +static int paste(ssize_t nstream,Sfio_t* streams[],Sfio_t *out, const char *delim, ssize_t dsiz, ssize_t dlen, Delim_t* mp) { const char *cp; - int d, n, i, z, more=1; + ssize_t d, n, i, z, more=1; Sfio_t *fp; do { @@ -98,11 +98,11 @@ static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, const char *delim, i else if(!more) /* first stream with output */ { if(dsiz == 1) - sfnputc(out, *delim, n); + sfnputc(out, *delim, (size_t)n); else if(dlen>0) { for(d=n; d>dlen; d-=dlen) - sfwrite(out,delim,dsiz); + sfwrite(out,delim,(size_t)dsiz); if(d) { if(mp) @@ -110,12 +110,12 @@ static int paste(int nstream,Sfio_t* streams[],Sfio_t *out, const char *delim, i z += mp[i].len; else z = d; - sfwrite(out,delim,z); + sfwrite(out,delim,(size_t)z); } } more = n+1; } - if(sfwrite(out,cp,sfvalue(fp)-((n+1) to file using delimiters */ -static int spaste(Sfio_t *in,Sfio_t* out,const char *delim,int dlen,Delim_t* mp) +static int spaste(Sfio_t *in,Sfio_t* out,const char *delim,ssize_t dlen,Delim_t* mp) { const char *cp; - int d=0; - if((cp = sfgetr(in,'\n',0)) && sfwrite(out,cp,sfvalue(in)-1) < 0) + ssize_t d=0; + if((cp = sfgetr(in,'\n',0)) && sfwrite(out,cp,(size_t)sfvalue(in)-1) < 0) return -1; while(cp=sfgetr(in, '\n',0)) { @@ -161,7 +161,7 @@ static int spaste(Sfio_t *in,Sfio_t* out,const char *delim,int dlen,Delim_t* mp) sfputc(out,c); d++; } - if(sfwrite(out,cp,sfvalue(in)-1) < 0) + if(sfwrite(out,cp,(size_t)sfvalue(in)-1) < 0) return -1; } sfputc(out,'\n'); @@ -176,7 +176,7 @@ b_paste(int argc, char** argv, Shbltin_t* context) char *cp, *delim; char *ep; Delim_t *mp; - int dlen, dsiz; + ssize_t dlen, dsiz; char defdelim[2]; cmdinit(argc, argv, context, ERROR_CATALOG, 0); @@ -218,7 +218,7 @@ b_paste(int argc, char** argv, Shbltin_t* context) error(ERROR_SYSTEM|ERROR_PANIC, "out of memory"); UNREACHABLE(); } - dlen = dsiz = stresc(delim); + dlen = dsiz = (ssize_t)stresc(delim); mp = 0; if (mbwide()) { @@ -232,7 +232,7 @@ b_paste(int argc, char** argv, Shbltin_t* context) } if(dlen < dsiz) { - if (!(mp = newof(0, Delim_t, dlen, 0))) + if (!(mp = newof(0, Delim_t, (size_t)dlen, 0))) { free(delim); error(ERROR_SYSTEM|ERROR_PANIC, "out of memory"); @@ -244,7 +244,7 @@ b_paste(int argc, char** argv, Shbltin_t* context) { mp[dlen].chr = cp; mbchar(cp); - mp[dlen].len = cp - mp[dlen].chr; + mp[dlen].len = (size_t)(cp - mp[dlen].chr); dlen++; } } @@ -258,7 +258,7 @@ b_paste(int argc, char** argv, Shbltin_t* context) n = 1; if(!sflag) { - if (!(streams = stkalloc(stkstd,n*sizeof(Sfio_t*)))) + if (!(streams = stkalloc(stkstd,(size_t)n*sizeof(Sfio_t*)))) { error(ERROR_SYSTEM|ERROR_PANIC, "out of memory"); UNREACHABLE();