summaryrefslogtreecommitdiff
path: root/Src/Modules
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2018-08-27 13:31:04 +0200
committerAxel Beckert <abe@deuxchevaux.org>2018-08-27 13:31:04 +0200
commit719a715614f2182a76b30ad27a327d70a86f34f1 (patch)
treea437eb29da8035bf7c2e30506c08fe6f15719871 /Src/Modules
parent7da8d19c224860ae4d6aa3f077fca7f734f20d88 (diff)
parentef61918398517473b9b594690a3be375f607cebe (diff)
downloadzsh-719a715614f2182a76b30ad27a327d70a86f34f1.tar.gz
zsh-719a715614f2182a76b30ad27a327d70a86f34f1.zip
Merge tag 'zsh-5.5.1-test-2' into debian
Test release: 5.5.1-test-2.
Diffstat (limited to 'Src/Modules')
-rw-r--r--Src/Modules/clone.c2
-rw-r--r--Src/Modules/datetime.c46
-rw-r--r--Src/Modules/db_gdbm.c5
-rw-r--r--Src/Modules/mathfunc.c106
-rw-r--r--Src/Modules/parameter.c1
-rw-r--r--Src/Modules/parameter.mdd2
-rw-r--r--Src/Modules/pcre.c1
-rw-r--r--Src/Modules/stat.c22
-rw-r--r--Src/Modules/system.c4
-rw-r--r--Src/Modules/termcap.c14
-rw-r--r--Src/Modules/terminfo.c14
-rw-r--r--Src/Modules/zftp.c2
-rw-r--r--Src/Modules/zpty.c2
13 files changed, 72 insertions, 149 deletions
diff --git a/Src/Modules/clone.c b/Src/Modules/clone.c
index 930429248..ef6275dcf 100644
--- a/Src/Modules/clone.c
+++ b/Src/Modules/clone.c
@@ -69,7 +69,7 @@ bin_clone(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
dup2(ttyfd,2);
if (ttyfd > 2)
close(ttyfd);
- closem(0);
+ closem(FDT_UNUSED, 0);
close(coprocin);
close(coprocout);
/* Acquire a controlling terminal */
diff --git a/Src/Modules/datetime.c b/Src/Modules/datetime.c
index 6e9047bc5..be378b347 100644
--- a/Src/Modules/datetime.c
+++ b/Src/Modules/datetime.c
@@ -180,66 +180,30 @@ getcurrentsecs(UNUSED(Param pm))
}
static double
-getcurrentrealtime(Param pm)
+getcurrentrealtime(UNUSED(Param pm))
{
-#ifdef HAVE_CLOCK_GETTIME
struct timespec now;
-
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- zwarn("%s: unable to retrieve time: %e", pm->node.nam, errno);
- return (double)0.0;
- }
-
+ zgettime(&now);
return (double)now.tv_sec + (double)now.tv_nsec * 1e-9;
-#else
- struct timeval now;
- struct timezone dummy_tz;
-
- (void)pm;
- gettimeofday(&now, &dummy_tz);
-
- return (double)now.tv_sec + (double)now.tv_usec * 1e-6;
-#endif
}
static char **
-getcurrenttime(Param pm)
+getcurrenttime(UNUSED(Param pm))
{
char **arr;
char buf[DIGBUFSIZE];
-
-#ifdef HAVE_CLOCK_GETTIME
struct timespec now;
- if (clock_gettime(CLOCK_REALTIME, &now) < 0) {
- zwarn("%s: unable to retrieve time: %e", pm->node.nam, errno);
- return NULL;
- }
-
- arr = (char **)zhalloc(3 * sizeof(*arr));
- sprintf(buf, "%ld", (long)now.tv_sec);
- arr[0] = dupstring(buf);
- sprintf(buf, "%ld", now.tv_nsec);
- arr[1] = dupstring(buf);
- arr[2] = NULL;
-
- return arr;
-#else
- struct timeval now;
- struct timezone dummy_tz;
-
- (void)pm;
- gettimeofday(&now, &dummy_tz);
+ zgettime(&now);
arr = (char **)zhalloc(3 * sizeof(*arr));
sprintf(buf, "%ld", (long)now.tv_sec);
arr[0] = dupstring(buf);
- sprintf(buf, "%ld", (long)now.tv_usec * 1000);
+ sprintf(buf, "%ld", (long)now.tv_nsec);
arr[1] = dupstring(buf);
arr[2] = NULL;
return arr;
-#endif
}
static struct builtin bintab[] = {
diff --git a/Src/Modules/db_gdbm.c b/Src/Modules/db_gdbm.c
index 5f776f407..ed702b912 100644
--- a/Src/Modules/db_gdbm.c
+++ b/Src/Modules/db_gdbm.c
@@ -359,7 +359,7 @@ gdbmsetfn(Param pm, char *val)
}
if (val) {
- pm->u.str = ztrdup(val);
+ pm->u.str = val;
pm->node.flags |= PM_UPTODATE;
}
@@ -732,6 +732,9 @@ static int remove_tied_name( const char *name ) {
p++;
}
+ if (*p)
+ zsfree(*p);
+
/* Copy x+1 to x */
while (*p) {
*p=*(p+1);
diff --git a/Src/Modules/mathfunc.c b/Src/Modules/mathfunc.c
index a7e8b294c..fc2593dca 100644
--- a/Src/Modules/mathfunc.c
+++ b/Src/Modules/mathfunc.c
@@ -65,6 +65,7 @@ MF_LGAMMA,
MF_LOG,
MF_LOG10,
MF_LOG1P,
+MF_LOG2,
MF_LOGB,
MF_NEXTAFTER,
MF_RINT,
@@ -93,22 +94,6 @@ MS_RAND48
* conversion), atan2.
*/
-/* Flags for bounds. Note these must start at 1, not 0. */
-
-enum {
- BF_POS = 1, /* must be positive */
- BF_NONNEG = 2, /* must be non-negative */
- BF_FRAC = 3, /* must be -1 <= x <= 1 */
- BF_GE1 = 4, /* must be >= 1 */
- BF_FRACO = 5, /* must be in open range -1 < x < 1 */
- BF_INTPOS = 6, /* must be non-integer or positive */
- BF_GTRM1 = 7, /* must be > -1 */
- BF_NONZ = 8, /* must be nonzero */
- BF_POS2 = 9 /* second argument must be positive */
-};
-
-#define BFLAG(x) ((x) << 8)
-
/*
* Flags for type of function: unlike the above, these must
* be individually bit-testable.
@@ -121,18 +106,18 @@ enum {
TF_NOASS = 8 /* don't assign result as double */
};
-#define TFLAG(x) ((x) << 16)
+#define TFLAG(x) ((x) << 8)
static struct mathfunc mftab[] = {
- NUMMATHFUNC("abs", math_func, 1, 1, MF_ABS | BFLAG(BF_FRAC) |
+ NUMMATHFUNC("abs", math_func, 1, 1, MF_ABS |
TFLAG(TF_NOCONV|TF_NOASS)),
- NUMMATHFUNC("acos", math_func, 1, 1, MF_ACOS | BFLAG(BF_FRAC)),
- NUMMATHFUNC("acosh", math_func, 1, 1, MF_ACOSH | BFLAG(BF_GE1)),
- NUMMATHFUNC("asin", math_func, 1, 1, MF_ASIN | BFLAG(BF_FRAC)),
+ NUMMATHFUNC("acos", math_func, 1, 1, MF_ACOS),
+ NUMMATHFUNC("acosh", math_func, 1, 1, MF_ACOSH),
+ NUMMATHFUNC("asin", math_func, 1, 1, MF_ASIN),
NUMMATHFUNC("asinh", math_func, 1, 1, MF_ASINH),
NUMMATHFUNC("atan", math_func, 1, 2, MF_ATAN),
- NUMMATHFUNC("atanh", math_func, 1, 1, MF_ATANH | BFLAG(BF_FRACO)),
+ NUMMATHFUNC("atanh", math_func, 1, 1, MF_ATANH),
NUMMATHFUNC("cbrt", math_func, 1, 1, MF_CBRT),
NUMMATHFUNC("ceil", math_func, 1, 1, MF_CEIL),
NUMMATHFUNC("copysign", math_func, 2, 2, MF_COPYSIGN),
@@ -146,20 +131,20 @@ static struct mathfunc mftab[] = {
NUMMATHFUNC("float", math_func, 1, 1, MF_FLOAT),
NUMMATHFUNC("floor", math_func, 1, 1, MF_FLOOR),
NUMMATHFUNC("fmod", math_func, 2, 2, MF_FMOD),
- NUMMATHFUNC("gamma", math_func, 1, 1, MF_GAMMA | BFLAG(BF_INTPOS)),
+ NUMMATHFUNC("gamma", math_func, 1, 1, MF_GAMMA),
NUMMATHFUNC("hypot", math_func, 2, 2, MF_HYPOT),
- NUMMATHFUNC("ilogb", math_func, 1, 1, MF_ILOGB | BFLAG(BF_NONZ) |
- TFLAG(TF_NOASS)),
+ NUMMATHFUNC("ilogb", math_func, 1, 1, MF_ILOGB | TFLAG(TF_NOASS)),
NUMMATHFUNC("int", math_func, 1, 1, MF_INT | TFLAG(TF_NOASS)),
NUMMATHFUNC("j0", math_func, 1, 1, MF_J0),
NUMMATHFUNC("j1", math_func, 1, 1, MF_J1),
NUMMATHFUNC("jn", math_func, 2, 2, MF_JN | TFLAG(TF_INT1)),
NUMMATHFUNC("ldexp", math_func, 2, 2, MF_LDEXP | TFLAG(TF_INT2)),
- NUMMATHFUNC("lgamma", math_func, 1, 1, MF_LGAMMA | BFLAG(BF_INTPOS)),
- NUMMATHFUNC("log", math_func, 1, 1, MF_LOG | BFLAG(BF_POS)),
- NUMMATHFUNC("log10", math_func, 1, 1, MF_LOG10 | BFLAG(BF_POS)),
- NUMMATHFUNC("log1p", math_func, 1, 1, MF_LOG1P | BFLAG(BF_GTRM1)),
- NUMMATHFUNC("logb", math_func, 1, 1, MF_LOGB | BFLAG(BF_NONZ)),
+ NUMMATHFUNC("lgamma", math_func, 1, 1, MF_LGAMMA),
+ NUMMATHFUNC("log", math_func, 1, 1, MF_LOG),
+ NUMMATHFUNC("log10", math_func, 1, 1, MF_LOG10),
+ NUMMATHFUNC("log1p", math_func, 1, 1, MF_LOG1P),
+ NUMMATHFUNC("log2", math_func, 1, 1, MF_LOG2),
+ NUMMATHFUNC("logb", math_func, 1, 1, MF_LOGB),
NUMMATHFUNC("nextafter", math_func, 2, 2, MF_NEXTAFTER),
#ifdef HAVE_ERAND48
STRMATHFUNC("rand48", math_string, MS_RAND48),
@@ -171,17 +156,17 @@ static struct mathfunc mftab[] = {
#endif
NUMMATHFUNC("sin", math_func, 1, 1, MF_SIN),
NUMMATHFUNC("sinh", math_func, 1, 1, MF_SINH),
- NUMMATHFUNC("sqrt", math_func, 1, 1, MF_SQRT | BFLAG(BF_NONNEG)),
+ NUMMATHFUNC("sqrt", math_func, 1, 1, MF_SQRT),
NUMMATHFUNC("tan", math_func, 1, 1, MF_TAN),
NUMMATHFUNC("tanh", math_func, 1, 1, MF_TANH),
- NUMMATHFUNC("y0", math_func, 1, 1, MF_Y0 | BFLAG(BF_POS)),
- NUMMATHFUNC("y1", math_func, 1, 1, MF_Y1 | BFLAG(BF_POS)),
- NUMMATHFUNC("yn", math_func, 2, 2, MF_YN | BFLAG(BF_POS2) | TFLAG(TF_INT1))
+ NUMMATHFUNC("y0", math_func, 1, 1, MF_Y0),
+ NUMMATHFUNC("y1", math_func, 1, 1, MF_Y1),
+ NUMMATHFUNC("yn", math_func, 2, 2, MF_YN | TFLAG(TF_INT1))
};
/**/
static mnumber
-math_func(char *name, int argc, mnumber *argv, int id)
+math_func(UNUSED(char *name), int argc, mnumber *argv, int id)
{
mnumber ret;
double argd = 0, argd2 = 0, retd = 0;
@@ -208,49 +193,6 @@ math_func(char *name, int argc, mnumber *argv, int id)
if (errflag)
return ret;
- if (id & 0xff00) {
- int rtst = 0;
-
- switch ((id >> 8) & 0xff) {
- case BF_POS:
- rtst = (argd <= 0.0);
- break;
-
- case BF_NONNEG:
- rtst = (argd < 0.0);
- break;
-
- case BF_FRAC:
- rtst = (fabs(argd) > 1.0);
- break;
-
- case BF_GE1:
- rtst = (argd < 1.0);
- break;
-
- case BF_FRACO:
- rtst = (fabs(argd) >= 1.0);
- break;
-
- case BF_INTPOS:
- rtst = (argd <= 0 && (double)(zlong)argd == argd);
- break;
-
- case BF_GTRM1:
- rtst = (argd <= -1);
- break;
-
- case BF_POS2:
- rtst = (argd2 <= 0.0);
- break;
- }
-
- if (rtst) {
- zerr("math: argument to %s out of range", name);
- return ret;
- }
- }
-
switch (id & 0xff) {
case MF_ABS:
ret.type = argv->type;
@@ -398,6 +340,14 @@ math_func(char *name, int argc, mnumber *argv, int id)
retd = log1p(argd);
break;
+ case MF_LOG2:
+#ifdef HAVE_LOG2
+ retd = log2(argd);
+#else
+ retd = log(argd) / log(2);
+#endif
+ break;
+
case MF_LOGB:
retd = logb(argd);
break;
diff --git a/Src/Modules/parameter.c b/Src/Modules/parameter.c
index 10c47d214..783c36df3 100644
--- a/Src/Modules/parameter.c
+++ b/Src/Modules/parameter.c
@@ -2190,6 +2190,7 @@ static const struct gsu_array dirs_gsu =
static const struct gsu_array historywords_gsu =
{ histwgetfn, arrsetfn, stdunsetfn };
+/* Make sure to update autofeatures in parameter.mdd if necessary */
static struct paramdef partab[] = {
SPECIALPMDEF("aliases", 0,
&pmraliases_gsu, getpmralias, scanpmraliases),
diff --git a/Src/Modules/parameter.mdd b/Src/Modules/parameter.mdd
index a91a5dc09..f71c17a72 100644
--- a/Src/Modules/parameter.mdd
+++ b/Src/Modules/parameter.mdd
@@ -2,6 +2,6 @@ name=zsh/parameter
link=either
load=yes
-autofeatures="p:parameters p:commands p:functions p:dis_functions p:funcfiletrace p:funcsourcetrace p:funcstack p:functrace p:builtins p:dis_builtins p:reswords p:dis_reswords p:patchars p:dis_patchars p:options p:modules p:dirstack p:history p:historywords p:jobtexts p:jobdirs p:jobstates p:nameddirs p:userdirs p:aliases p:dis_aliases p:galiases p:dis_galiases p:saliases p:dis_saliases"
+autofeatures="p:parameters p:commands p:functions p:dis_functions p:functions_source p:dis_functions_source p:funcfiletrace p:funcsourcetrace p:funcstack p:functrace p:builtins p:dis_builtins p:reswords p:dis_reswords p:patchars p:dis_patchars p:options p:modules p:dirstack p:history p:historywords p:jobtexts p:jobdirs p:jobstates p:nameddirs p:userdirs p:usergroups p:aliases p:dis_aliases p:galiases p:dis_galiases p:saliases p:dis_saliases"
objects="parameter.o"
diff --git a/Src/Modules/pcre.c b/Src/Modules/pcre.c
index 15ee34bc8..6289e003e 100644
--- a/Src/Modules/pcre.c
+++ b/Src/Modules/pcre.c
@@ -380,6 +380,7 @@ bin_pcre_match(char *nam, char **args, Options ops, UNUSED(int func))
if (ovec)
zfree(ovec, ovecsize*sizeof(int));
+ zsfree(plaintext);
return return_value;
}
diff --git a/Src/Modules/stat.c b/Src/Modules/stat.c
index 66baa1292..50a6a9bb2 100644
--- a/Src/Modules/stat.c
+++ b/Src/Modules/stat.c
@@ -188,7 +188,7 @@ static char *timefmt;
/**/
static void
-stattimeprint(time_t tim, char *outbuf, int flags)
+stattimeprint(time_t tim, long nsecs, char *outbuf, int flags)
{
if (flags & STF_RAW) {
sprintf(outbuf, "%ld", (unsigned long)tim);
@@ -199,7 +199,7 @@ stattimeprint(time_t tim, char *outbuf, int flags)
char *oend = outbuf + strlen(outbuf);
/* Where the heck does "40" come from? */
int len = ztrftime(oend, 40, timefmt, (flags & STF_GMT) ? gmtime(&tim) :
- localtime(&tim), 0L);
+ localtime(&tim), nsecs);
if (len > 0)
metafy(oend, len, META_NOALLOC);
if (flags & STF_RAW)
@@ -291,15 +291,27 @@ statprint(struct stat *sbuf, char *outbuf, char *fname, int iwhich, int flags)
break;
case ST_ATIM:
- stattimeprint(sbuf->st_atime, optr, flags);
+#ifdef GET_ST_ATIME_NSEC
+ stattimeprint(sbuf->st_atime, GET_ST_ATIME_NSEC(*sbuf), optr, flags);
+#else
+ stattimeprint(sbuf->st_atime, 0L, optr, flags);
+#endif
break;
case ST_MTIM:
- stattimeprint(sbuf->st_mtime, optr, flags);
+#ifdef GET_ST_MTIME_NSEC
+ stattimeprint(sbuf->st_mtime, GET_ST_MTIME_NSEC(*sbuf), optr, flags);
+#else
+ stattimeprint(sbuf->st_mtime, 0L, optr, flags);
+#endif
break;
case ST_CTIM:
- stattimeprint(sbuf->st_ctime, optr, flags);
+#ifdef GET_ST_CTIME_NSEC
+ stattimeprint(sbuf->st_ctime, GET_ST_CTIME_NSEC(*sbuf), optr, flags);
+#else
+ stattimeprint(sbuf->st_ctime, 0L, optr, flags);
+#endif
break;
case ST_BLKSIZE:
diff --git a/Src/Modules/system.c b/Src/Modules/system.c
index 9fd4d2583..7a4f4ee13 100644
--- a/Src/Modules/system.c
+++ b/Src/Modules/system.c
@@ -772,6 +772,8 @@ fillpmsysparams(Param pm, const char *name)
num = (int)getpid();
} else if (!strcmp(name, "ppid")) {
num = (int)getppid();
+ } else if (!strcmp(name, "procsubstpid")) {
+ num = (int)procsubstpid;
} else {
pm->u.str = dupstring("");
pm->node.flags |= PM_UNSET;
@@ -805,6 +807,8 @@ scanpmsysparams(UNUSED(HashTable ht), ScanFunc func, int flags)
func(&spm.node, flags);
fillpmsysparams(&spm, "ppid");
func(&spm.node, flags);
+ fillpmsysparams(&spm, "procsubstpid");
+ func(&spm.node, flags);
}
static struct mathfunc mftab[] = {
diff --git a/Src/Modules/termcap.c b/Src/Modules/termcap.c
index 60a6e138a..af4009a3a 100644
--- a/Src/Modules/termcap.c
+++ b/Src/Modules/termcap.c
@@ -345,16 +345,7 @@ int
boot_(UNUSED(Module m))
{
#ifdef HAVE_TGETENT
-# ifdef HAVE_SETUPTERM
- int errret;
-
- /*
- * Just because we can't set up the terminal doesn't
- * mean the modules hasn't booted---TERM may change,
- * and it should be handled dynamically---so ignore errors here.
- */
- (void)setupterm((char *)0, 1, &errret);
-# endif
+ zsetupterm();
#endif
return 0;
}
@@ -363,6 +354,9 @@ boot_(UNUSED(Module m))
int
cleanup_(Module m)
{
+#ifdef HAVE_TGETENT
+ zdeleteterm();
+#endif
return setfeatureenables(m, &module_features, NULL);
}
diff --git a/Src/Modules/terminfo.c b/Src/Modules/terminfo.c
index bbd325899..4596b41d2 100644
--- a/Src/Modules/terminfo.c
+++ b/Src/Modules/terminfo.c
@@ -338,16 +338,7 @@ int
boot_(UNUSED(Module m))
{
#ifdef USE_TERMINFO_MODULE
-# ifdef HAVE_SETUPTERM
- int errret;
-
- /*
- * Just because we can't set up the terminal doesn't
- * mean the modules hasn't booted---TERM may change,
- * and it should be handled dynamically---so ignore errors here.
- */
- (void)setupterm((char *)0, 1, &errret);
-# endif
+ zsetupterm();
#endif
return 0;
@@ -357,6 +348,9 @@ boot_(UNUSED(Module m))
int
cleanup_(Module m)
{
+#ifdef USE_TERMINFO_MODULE
+ zdeleteterm();
+#endif
return setfeatureenables(m, &module_features, NULL);
}
diff --git a/Src/Modules/zftp.c b/Src/Modules/zftp.c
index 24f4b4200..4aaa1f072 100644
--- a/Src/Modules/zftp.c
+++ b/Src/Modules/zftp.c
@@ -362,7 +362,7 @@ static jmp_buf zfalrmbuf;
/* The signal handler itself */
/**/
-static RETSIGTYPE
+static void
zfhandler(int sig)
{
if (sig == SIGALRM) {
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 1c93a1d02..2f83f7ce6 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -400,7 +400,7 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
dup2(slave, 1);
dup2(slave, 2);
- closem(0);
+ closem(FDT_UNUSED, 0);
close(slave);
close(master);
close(coprocin);