mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 17:24:50 +01:00
More merges: 14973,14976, and some whitespace.
This commit is contained in:
parent
cbf4467015
commit
563fbed02c
6 changed files with 361 additions and 151 deletions
10
ChangeLog
10
ChangeLog
|
@ -39,6 +39,16 @@
|
|||
* 14988 with mod suggested in 14989: Src/exec.c: avoid names of
|
||||
saved special parameters being trashed.
|
||||
|
||||
2001-06-19 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 14976: aczsh.m4: Add socklen_t to possible SOCKLEN_T types.
|
||||
|
||||
2001-06-19 Andrej Borsenkow <bor@zsh.org>
|
||||
|
||||
* 14973: acconfig.h, aczsh.m4, zshconfig.ac, Src/Modules/zftp.c:
|
||||
fix for reported problems on AIX 4.x. Still no feedback if it
|
||||
finally works (or even compiles)
|
||||
|
||||
2001-06-18 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* 14965: Src/Zle/computil.c: Silence compiler warnings.
|
||||
|
|
|
@ -50,15 +50,36 @@ union zftp_sockaddr;
|
|||
struct zftp_session;
|
||||
typedef struct zftp_session *Zftp_session;
|
||||
|
||||
#include "zftp.mdh"
|
||||
#include "zftp.pro"
|
||||
/*
|
||||
* We need to include the zsh headers later to avoid clashes with
|
||||
* the definitions on some systems, however we need the configuration
|
||||
* file to decide whether we can include netinet/in_systm.h, which
|
||||
* doesn't exist on cygwin.
|
||||
*/
|
||||
#include "../../config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in_systm.h>
|
||||
/*
|
||||
* For some reason, configure doesn't always detect netinet/in_systm.h.
|
||||
* On some systems, including linux, this seems to be because gcc is
|
||||
* throwing up a warning message about the redefinition of
|
||||
* __USE_LARGEFILE. This means the problem is somewhere in the
|
||||
* header files where we can't get at it. For now, revert to
|
||||
* not including this file only on systems where we know it's missing.
|
||||
* Currently this is just cygwin.
|
||||
*/
|
||||
#ifndef __CYGWIN__
|
||||
# include <netinet/in_systm.h>
|
||||
#endif
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "zftp.mdh"
|
||||
#include "zftp.pro"
|
||||
|
||||
/* it's a TELNET based protocol, but don't think I like doing this */
|
||||
#include <arpa/telnet.h>
|
||||
|
||||
|
@ -90,6 +111,10 @@ union zftp_sockaddr {
|
|||
#endif
|
||||
};
|
||||
|
||||
#ifdef USE_LOCAL_H_ERRNO
|
||||
int h_errno;
|
||||
#endif
|
||||
|
||||
/* We use the RFC 2553 interfaces. If the functions don't exist in the library,
|
||||
simulate them. */
|
||||
|
||||
|
@ -101,12 +126,12 @@ union zftp_sockaddr {
|
|||
# define INET6_ADDRSTRLEN 46
|
||||
#endif
|
||||
|
||||
/**/
|
||||
/**/
|
||||
#ifndef HAVE_INET_NTOP
|
||||
|
||||
/**/
|
||||
/**/
|
||||
static char const *
|
||||
inet_ntop(int af, void const *cp, char *buf, size_t len)
|
||||
zsh_inet_ntop(int af, void const *cp, char *buf, size_t len)
|
||||
{
|
||||
if(af != AF_INET) {
|
||||
errno = EAFNOSUPPORT;
|
||||
|
@ -120,7 +145,11 @@ inet_ntop(int af, void const *cp, char *buf, size_t len)
|
|||
return buf;
|
||||
}
|
||||
|
||||
/**/
|
||||
#else /* !HAVE_INET_NTOP */
|
||||
|
||||
# define zsh_inet_ntop inet_ntop
|
||||
|
||||
/**/
|
||||
#endif /* !HAVE_INET_NTOP */
|
||||
|
||||
/**/
|
||||
|
@ -134,38 +163,68 @@ inet_ntop(int af, void const *cp, char *buf, size_t len)
|
|||
# endif
|
||||
|
||||
/**/
|
||||
static int inet_aton(char const *src, struct in_addr *dst)
|
||||
static int zsh_inet_aton(char const *src, struct in_addr *dst)
|
||||
{
|
||||
return (dst->s_addr = inet_addr(src)) != INADDR_NONE;
|
||||
}
|
||||
|
||||
#else /* !HAVE_INET_ATON */
|
||||
|
||||
# define zsh_inet_aton inet_aton
|
||||
|
||||
/**/
|
||||
# endif /* !HAVE_INET_ATON */
|
||||
|
||||
/**/
|
||||
static int
|
||||
inet_pton(int af, char const *src, void *dst)
|
||||
zsh_inet_pton(int af, char const *src, void *dst)
|
||||
{
|
||||
if(af != AF_INET) {
|
||||
errno = EAFNOSUPPORT;
|
||||
return -1;
|
||||
}
|
||||
return !!inet_aton(src, dst);
|
||||
return !!zsh_inet_aton(src, dst);
|
||||
}
|
||||
|
||||
#else /* !HAVE_INET_PTON */
|
||||
|
||||
# define zsh_inet_pton inet_pton
|
||||
|
||||
/**/
|
||||
#endif /* !HAVE_INET_PTON */
|
||||
|
||||
/**/
|
||||
#ifndef HAVE_GETIPNODEBYNAME
|
||||
|
||||
/**/
|
||||
# ifndef HAVE_GETHOSTBYNAME2
|
||||
|
||||
/**/
|
||||
static struct hostent *
|
||||
zsh_gethostbyname2(char const *name, int af)
|
||||
{
|
||||
if(af != AF_INET) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return NULL;
|
||||
}
|
||||
return gethostbyname(name);
|
||||
}
|
||||
|
||||
#else /* !HAVE_GETHOSTBYNAME2 */
|
||||
|
||||
# define zsh_gethostbyname2 gethostbyname2
|
||||
|
||||
/**/
|
||||
# endif /* !HAVE_GETHOSTBYNAME2 */
|
||||
|
||||
|
||||
/* note: this is not a complete implementation. If ignores the flags,
|
||||
and does not provide the memory allocation of the standard interface.
|
||||
Each returned structure will overwrite the previous one. */
|
||||
|
||||
/**/
|
||||
static struct hostent *
|
||||
getipnodebyname(char const *name, int af, int flags, int *errorp)
|
||||
zsh_getipnodebyname(char const *name, int af, int flags, int *errorp)
|
||||
{
|
||||
static struct hostent ahe;
|
||||
static char nbuf[16];
|
||||
|
@ -176,8 +235,8 @@ getipnodebyname(char const *name, int af, int flags, int *errorp)
|
|||
static char pbuf[INET_ADDRSTRLEN];
|
||||
# endif
|
||||
struct hostent *he;
|
||||
if(inet_pton(af, name, nbuf) == 1) {
|
||||
inet_ntop(af, nbuf, pbuf, sizeof(pbuf));
|
||||
if(zsh_inet_pton(af, name, nbuf) == 1) {
|
||||
zsh_inet_ntop(af, nbuf, pbuf, sizeof(pbuf));
|
||||
ahe.h_name = pbuf;
|
||||
ahe.h_aliases = addrlist+1;
|
||||
ahe.h_addrtype = af;
|
||||
|
@ -185,35 +244,21 @@ getipnodebyname(char const *name, int af, int flags, int *errorp)
|
|||
ahe.h_addr_list = addrlist;
|
||||
return &ahe;
|
||||
}
|
||||
he = gethostbyname2(name, af);
|
||||
he = zsh_gethostbyname2(name, af);
|
||||
if(!he)
|
||||
*errorp = h_errno;
|
||||
return he;
|
||||
}
|
||||
|
||||
/**/
|
||||
# ifndef HAVE_GETHOSTBYNAME2
|
||||
|
||||
/**/
|
||||
static struct hostent *
|
||||
gethostbyname2(char const *name, int af)
|
||||
{
|
||||
if(af != AF_INET) {
|
||||
h_errno = NO_RECOVERY;
|
||||
return NULL;
|
||||
}
|
||||
return gethostbyname(name);
|
||||
}
|
||||
|
||||
/**/
|
||||
# endif /* !HAVE_GETHOSTBYNAME2 */
|
||||
|
||||
/**/
|
||||
static void
|
||||
freehostent(struct hostent *ptr)
|
||||
{
|
||||
}
|
||||
|
||||
#else /* !HAVE_GETIPNODEBYNAME */
|
||||
|
||||
# define zsh_getipnodebyname getipnodebyname
|
||||
|
||||
/**/
|
||||
#endif /* !HAVE_GETIPNODEBYNAME */
|
||||
|
||||
|
@ -838,8 +883,6 @@ zfgetmsg(void)
|
|||
|
||||
if (zfsess->cfd == -1)
|
||||
return 6;
|
||||
if (!(verbose = getsparam("ZFTP_VERBOSE")))
|
||||
verbose = "";
|
||||
zsfree(lastmsg);
|
||||
lastmsg = NULL;
|
||||
|
||||
|
@ -865,6 +908,9 @@ zfgetmsg(void)
|
|||
zfsetparam("ZFTP_CODE", ztrdup(lastcodestr), ZFPM_READONLY);
|
||||
stopit = (*ptr++ != '-');
|
||||
|
||||
queue_signals();
|
||||
if (!(verbose = getsparam("ZFTP_VERBOSE")))
|
||||
verbose = "";
|
||||
if (strchr(verbose, lastcodestr[0])) {
|
||||
/* print the whole thing verbatim */
|
||||
printing = 1;
|
||||
|
@ -874,6 +920,7 @@ zfgetmsg(void)
|
|||
printing = 2;
|
||||
fputs(ptr, stderr);
|
||||
}
|
||||
unqueue_signals();
|
||||
if (printing)
|
||||
fputc('\n', stderr);
|
||||
|
||||
|
@ -1144,7 +1191,7 @@ zfopendata(char *name, union zftp_sockaddr *zdsockp, int *is_passivep)
|
|||
if(zdsockp->a.sa_family == AF_INET6) {
|
||||
/* see RFC 2428 for explanation */
|
||||
strcpy(portcmd, "EPRT |2|");
|
||||
inet_ntop(AF_INET6, &zdsockp->in6.sin6_addr,
|
||||
zsh_inet_ntop(AF_INET6, &zdsockp->in6.sin6_addr,
|
||||
portcmd+8, INET6_ADDRSTRLEN);
|
||||
sprintf(strchr(portcmd, 0), "|%u|\r\n",
|
||||
(unsigned)ntohs(zdsockp->in6.sin6_port));
|
||||
|
@ -1195,7 +1242,8 @@ zfclosedata(void)
|
|||
static int
|
||||
zfgetdata(char *name, char *rest, char *cmd, int getsize)
|
||||
{
|
||||
int len, newfd, is_passive;
|
||||
SOCKLEN_T len;
|
||||
int newfd, is_passive;
|
||||
union zftp_sockaddr zdsock;
|
||||
|
||||
if (zfopendata(name, &zdsock, &is_passive))
|
||||
|
@ -1301,8 +1349,7 @@ zfgetdata(char *name, char *rest, char *cmd, int getsize)
|
|||
#endif
|
||||
#if defined(F_SETFD) && defined(FD_CLOEXEC)
|
||||
/* If the shell execs a program, we don't want this fd left open. */
|
||||
len = FD_CLOEXEC;
|
||||
fcntl(zfsess->dfd, F_SETFD, &len);
|
||||
fcntl(zfsess->dfd, F_SETFD, FD_CLOEXEC);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -1830,7 +1877,8 @@ zftp_open(char *name, char **args, int flags)
|
|||
struct servent *zservp;
|
||||
struct hostent *zhostp = NULL;
|
||||
char **addrp, *fname;
|
||||
int err, len, tmout;
|
||||
int err, tmout;
|
||||
SOCKLEN_T len;
|
||||
int herrno, af, salen;
|
||||
|
||||
if (!*args) {
|
||||
|
@ -1870,10 +1918,12 @@ zftp_open(char *name, char **args, int flags)
|
|||
if (setjmp(zfalrmbuf)) {
|
||||
char *hname;
|
||||
alarm(0);
|
||||
queue_signals();
|
||||
if ((hname = getsparam("ZFTP_HOST")) && *hname)
|
||||
zwarnnam(name, "timeout connecting to %s", hname, 0);
|
||||
else
|
||||
zwarnnam(name, "timeout on host name lookup", NULL, 0);
|
||||
unqueue_signals();
|
||||
zfclose(0);
|
||||
return 1;
|
||||
}
|
||||
|
@ -1889,7 +1939,7 @@ zftp_open(char *name, char **args, int flags)
|
|||
# define FAILED() do { } while(0)
|
||||
#endif
|
||||
{
|
||||
zhostp = getipnodebyname(args[0], af, 0, &herrno);
|
||||
zhostp = zsh_getipnodebyname(args[0], af, 0, &herrno);
|
||||
if (!zhostp || errflag) {
|
||||
/* should use herror() here if available, but maybe
|
||||
* needs configure test. on AIX it's present but not
|
||||
|
@ -1971,7 +2021,7 @@ zftp_open(char *name, char **args, int flags)
|
|||
char pbuf[INET_ADDRSTRLEN];
|
||||
#endif
|
||||
addrp--;
|
||||
inet_ntop(af, *addrp, pbuf, sizeof(pbuf));
|
||||
zsh_inet_ntop(af, *addrp, pbuf, sizeof(pbuf));
|
||||
zfsetparam("ZFTP_IP", ztrdup(pbuf), ZFPM_READONLY);
|
||||
}
|
||||
freehostent(zhostp);
|
||||
|
@ -1986,8 +2036,7 @@ zftp_open(char *name, char **args, int flags)
|
|||
|
||||
#if defined(F_SETFD) && defined(FD_CLOEXEC)
|
||||
/* If the shell execs a program, we don't want this fd left open. */
|
||||
len = FD_CLOEXEC;
|
||||
fcntl(zfsess->cfd, F_SETFD, &len);
|
||||
fcntl(zfsess->cfd, F_SETFD, FD_CLOEXEC);
|
||||
#endif
|
||||
|
||||
len = sizeof(zfsess->sock);
|
||||
|
@ -2055,8 +2104,7 @@ zftp_open(char *name, char **args, int flags)
|
|||
DPUTS(zfstatfd == -1, "zfstatfd not created");
|
||||
#if defined(F_SETFD) && defined(FD_CLOEXEC)
|
||||
/* If the shell execs a program, we don't want this fd left open. */
|
||||
len = FD_CLOEXEC;
|
||||
fcntl(zfstatfd, F_SETFD, &len);
|
||||
fcntl(zfstatfd, F_SETFD, FD_CLOEXEC);
|
||||
#endif
|
||||
unlink(fname);
|
||||
}
|
||||
|
@ -2824,7 +2872,7 @@ zfclose(int leaveparams)
|
|||
if (!zfnopen) {
|
||||
/* Write the final status in case this is a subshell */
|
||||
lseek(zfstatfd, zfsessno*sizeof(int), 0);
|
||||
write(zfstatfd, zfstatusp+zfsessno, sizeof(int));
|
||||
write(zfstatfd, (char *)zfstatusp+zfsessno, sizeof(int));
|
||||
|
||||
close(zfstatfd);
|
||||
zfstatfd = -1;
|
||||
|
@ -2911,10 +2959,12 @@ savesession()
|
|||
for (ps = zfparams, pd = zfsess->params; *ps; ps++, pd++) {
|
||||
if (*pd)
|
||||
zsfree(*pd);
|
||||
queue_signals();
|
||||
if ((val = getsparam(*ps)))
|
||||
*pd = ztrdup(val);
|
||||
else
|
||||
*pd = NULL;
|
||||
unqueue_signals();
|
||||
}
|
||||
*pd = NULL;
|
||||
}
|
||||
|
@ -3101,7 +3151,7 @@ bin_zftp(char *name, char **args, char *ops, int func)
|
|||
/* Get the status in case it was set by a forked process */
|
||||
int oldstatus = zfstatusp[zfsessno];
|
||||
lseek(zfstatfd, 0, 0);
|
||||
read(zfstatfd, zfstatusp, sizeof(int)*zfsesscnt);
|
||||
read(zfstatfd, (char *)zfstatusp, sizeof(int)*zfsesscnt);
|
||||
if (zfsess->cfd != -1 && (zfstatusp[zfsessno] & ZFST_CLOS)) {
|
||||
/* got closed in subshell without us knowing */
|
||||
zcfinish = 2;
|
||||
|
@ -3144,6 +3194,7 @@ bin_zftp(char *name, char **args, char *ops, int func)
|
|||
return 1;
|
||||
}
|
||||
|
||||
queue_signals();
|
||||
if ((prefs = getsparam("ZFTP_PREFS"))) {
|
||||
zfprefs = 0;
|
||||
for (ptr = prefs; *ptr; ptr++) {
|
||||
|
@ -3174,6 +3225,7 @@ bin_zftp(char *name, char **args, char *ops, int func)
|
|||
}
|
||||
}
|
||||
}
|
||||
unqueue_signals();
|
||||
|
||||
ret = (*zptr->fun)(fullname, args, zptr->flags);
|
||||
|
||||
|
@ -3190,45 +3242,13 @@ bin_zftp(char *name, char **args, char *ops, int func)
|
|||
* but only for the active session.
|
||||
*/
|
||||
lseek(zfstatfd, zfsessno*sizeof(int), 0);
|
||||
write(zfstatfd, zfstatusp+zfsessno, sizeof(int));
|
||||
write(zfstatfd, (char *)zfstatusp+zfsessno, sizeof(int));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* The load/unload routines required by the zsh library interface */
|
||||
|
||||
/**/
|
||||
int
|
||||
setup_(Module m)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**/
|
||||
int
|
||||
boot_(Module m)
|
||||
{
|
||||
int ret;
|
||||
if ((ret = addbuiltins(m->nam, bintab,
|
||||
sizeof(bintab)/sizeof(*bintab))) == 1) {
|
||||
/* if successful, set some default parameters */
|
||||
off_t tmout_def = 60;
|
||||
zfsetparam("ZFTP_VERBOSE", ztrdup("450"), ZFPM_IFUNSET);
|
||||
zfsetparam("ZFTP_TMOUT", &tmout_def, ZFPM_IFUNSET|ZFPM_INTEGER);
|
||||
zfsetparam("ZFTP_PREFS", ztrdup("PS"), ZFPM_IFUNSET);
|
||||
/* default preferences if user deletes variable */
|
||||
zfprefs = ZFPF_SNDP|ZFPF_PASV;
|
||||
|
||||
zfsessions = znewlinklist();
|
||||
newsession("default");
|
||||
}
|
||||
|
||||
return !ret;
|
||||
}
|
||||
|
||||
/**/
|
||||
int
|
||||
cleanup_(Module m)
|
||||
static void
|
||||
zftp_cleanup(void)
|
||||
{
|
||||
/*
|
||||
* There are various parameters hanging around, but they're
|
||||
|
@ -3250,7 +3270,55 @@ cleanup_(Module m)
|
|||
zfunsetparam("ZFTP_SESSION");
|
||||
freelinklist(zfsessions, (FreeFunc) freesession);
|
||||
zfree(zfstatusp, sizeof(int)*zfsesscnt);
|
||||
deletebuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab));
|
||||
deletebuiltins("zftp", bintab, sizeof(bintab)/sizeof(*bintab));
|
||||
}
|
||||
|
||||
static int
|
||||
zftpexithook(Hookdef d, void *dummy)
|
||||
{
|
||||
zftp_cleanup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The load/unload routines required by the zsh library interface */
|
||||
|
||||
/**/
|
||||
int
|
||||
setup_(Module m)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**/
|
||||
int
|
||||
boot_(Module m)
|
||||
{
|
||||
int ret;
|
||||
if ((ret = addbuiltins("zftp", bintab,
|
||||
sizeof(bintab)/sizeof(*bintab))) == 1) {
|
||||
/* if successful, set some default parameters */
|
||||
off_t tmout_def = 60;
|
||||
zfsetparam("ZFTP_VERBOSE", ztrdup("450"), ZFPM_IFUNSET);
|
||||
zfsetparam("ZFTP_TMOUT", &tmout_def, ZFPM_IFUNSET|ZFPM_INTEGER);
|
||||
zfsetparam("ZFTP_PREFS", ztrdup("PS"), ZFPM_IFUNSET);
|
||||
/* default preferences if user deletes variable */
|
||||
zfprefs = ZFPF_SNDP|ZFPF_PASV;
|
||||
|
||||
zfsessions = znewlinklist();
|
||||
newsession("default");
|
||||
|
||||
addhookfunc("exit", zftpexithook);
|
||||
}
|
||||
|
||||
return !ret;
|
||||
}
|
||||
|
||||
/**/
|
||||
int
|
||||
cleanup_(Module m)
|
||||
{
|
||||
deletehookfunc("exit", zftpexithook);
|
||||
zftp_cleanup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
12
Src/prompt.c
12
Src/prompt.c
|
@ -517,12 +517,12 @@ putpromptchar(int doprint, int endchar)
|
|||
if (*ttystrname) {
|
||||
ss = (strncmp(ttystrname, "/dev/tty", 8) ?
|
||||
ttystrname + 5 : ttystrname + 8);
|
||||
stradd(ss);
|
||||
} else
|
||||
stradd("()");
|
||||
break;
|
||||
case 'y':
|
||||
if (*ttystrname) {
|
||||
stradd(ss);
|
||||
} else
|
||||
stradd("()");
|
||||
break;
|
||||
case 'y':
|
||||
if (*ttystrname) {
|
||||
ss = (strncmp(ttystrname, "/dev/", 5) ?
|
||||
ttystrname : ttystrname + 5);
|
||||
stradd(ss);
|
||||
|
|
34
acconfig.h
34
acconfig.h
|
@ -139,6 +139,10 @@
|
|||
/* Define to be a string corresponding the vendor of the machine */
|
||||
#undef VENDOR
|
||||
|
||||
/* Define to limit job table size */
|
||||
#undef MAXJOB
|
||||
#undef NEED_LINUX_TASKS_H
|
||||
|
||||
/* Define if your system defines `struct winsize' in sys/ptem.h. */
|
||||
#undef WINSIZE_IN_PTEM
|
||||
|
||||
|
@ -169,6 +173,9 @@
|
|||
/* Define for Maildir support */
|
||||
#undef MAILDIR_SUPPORT
|
||||
|
||||
/* Define for function depth limits */
|
||||
#undef MAX_FUNCTION_DEPTH
|
||||
|
||||
/* Define if you want locale features. By default this is defined. */
|
||||
#undef CONFIG_LOCALE
|
||||
|
||||
|
@ -289,3 +296,30 @@
|
|||
|
||||
/* Define to 1 if ino_t is 64 bit (for large file support) */
|
||||
#undef INO_T_IS_64_BIT
|
||||
|
||||
/* Define to 1 if h_errno is not defined by the system */
|
||||
#undef USE_LOCAL_H_ERRNO
|
||||
|
||||
/* Define if you have the termcap boolcodes symbol. */
|
||||
#undef HAVE_BOOLCODES
|
||||
|
||||
/* Define if you have the termcap numcodes symbol. */
|
||||
#undef HAVE_NUMCODES
|
||||
|
||||
/* Define if you have the termcap strcodes symbol. */
|
||||
#undef HAVE_STRCODES
|
||||
|
||||
/* Define if you have the terminfo boolnames symbol. */
|
||||
#undef HAVE_BOOLNAMES
|
||||
|
||||
/* Define if you have the terminfo numnames symbol. */
|
||||
#undef HAVE_NUMNAMES
|
||||
|
||||
/* Define if you have the terminfo strnames symbol. */
|
||||
#undef HAVE_STRNAMES
|
||||
|
||||
/* Define if term.h chokes without curses.h */
|
||||
#undef TERM_H_NEEDS_CURSES_H
|
||||
|
||||
/* Define to the base type of the third argument of accept */
|
||||
#undef SOCKLEN_T
|
||||
|
|
173
aczsh.m4
173
aczsh.m4
|
@ -84,6 +84,7 @@ dnl specified directly as --enable-lfs="long long".
|
|||
dnl Sets the variable given in the second argument to the first argument
|
||||
dnl if the test worked, `no' otherwise. Be careful testing this, as it
|
||||
dnl may produce two words `long long' on an unquoted substitution.
|
||||
dnl Also check that the compiler does not mind it being cast to int.
|
||||
dnl This macro does not produce messages as it may be run several times
|
||||
dnl before finding the right type.
|
||||
dnl
|
||||
|
@ -97,6 +98,7 @@ AC_DEFUN(zsh_64_BIT_TYPE,
|
|||
main()
|
||||
{
|
||||
$1 foo = 0;
|
||||
int bar = (int) foo;
|
||||
return sizeof($1) != 8;
|
||||
}
|
||||
], $2="$1", $2=no,
|
||||
|
@ -109,36 +111,63 @@ main()
|
|||
|
||||
|
||||
dnl
|
||||
dnl zsh_SYS_DYNAMIC_BROKEN
|
||||
dnl Check whether static/shared library linking is broken.
|
||||
dnl zsh_SHARED_FUNCTION
|
||||
dnl
|
||||
dnl This is just a frontend to zsh_SHARED_SYMBOL
|
||||
dnl
|
||||
dnl Usage: zsh_SHARED_FUNCTION(name[,rettype[,paramtype]])
|
||||
dnl
|
||||
|
||||
AC_DEFUN(zsh_SHARED_FUNCTION,
|
||||
[zsh_SHARED_SYMBOL($1, ifelse([$2], ,[int ],[$2]) $1 [(]ifelse([$3], ,[ ],[$3])[)], $1)])
|
||||
|
||||
dnl
|
||||
dnl zsh_SHARED_VARIABLE
|
||||
dnl
|
||||
dnl This is just a frontend to zsh_SHARED_SYMBOL
|
||||
dnl
|
||||
dnl Usage: zsh_SHARED_VARIABLE(name[,type])
|
||||
dnl
|
||||
|
||||
AC_DEFUN(zsh_SHARED_VARIABLE,
|
||||
[zsh_SHARED_SYMBOL($1, ifelse([$2], ,[int ],[$2]) $1, [&$1])])
|
||||
|
||||
dnl
|
||||
dnl zsh_SHARED_SYMBOL
|
||||
dnl Check whether symbol is available in static or shared library
|
||||
dnl
|
||||
dnl On some systems, static modifiable library symbols (such as environ)
|
||||
dnl may appear only in statically linked libraries. If this is the case,
|
||||
dnl then two shared libraries that reference the same symbol, each linked
|
||||
dnl with the static library, could be given distinct copies of the symbol.
|
||||
dnl If this is the case then dynamic linking is FUBAR.
|
||||
dnl
|
||||
dnl Usage: zsh_SHARED_SYMBOL(name,declaration,address)
|
||||
dnl Sets zsh_cv_shared_$1 cache variable to yes/no
|
||||
dnl
|
||||
|
||||
AC_DEFUN(zsh_SYS_DYNAMIC_BROKEN,
|
||||
[AC_CACHE_CHECK([if static/shared library linking is broken],
|
||||
zsh_cv_sys_dynamic_broken,
|
||||
AC_DEFUN(zsh_SHARED_SYMBOL,
|
||||
[AC_CACHE_CHECK([if $1 is available in shared libraries],
|
||||
zsh_cv_shared_$1,
|
||||
[if test "$zsh_cv_func_dlsym_needs_underscore" = yes; then
|
||||
us=_
|
||||
else
|
||||
us=
|
||||
fi
|
||||
echo '
|
||||
extern char **environ;
|
||||
void *symlist1[[]] = {
|
||||
(void *)&environ,
|
||||
(void *)0
|
||||
};
|
||||
void *zsh_getaddr1()
|
||||
{
|
||||
#ifdef __CYGWIN__
|
||||
__attribute__((__dllimport__))
|
||||
#endif
|
||||
extern $2;
|
||||
return $3;
|
||||
};
|
||||
' > conftest1.c
|
||||
sed 's/symlist1/symlist2/' < conftest1.c > conftest2.c
|
||||
if $CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&5 2>&5 &&
|
||||
$CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&5 2>&5; then
|
||||
sed 's/zsh_getaddr1/zsh_getaddr2/' < conftest1.c > conftest2.c
|
||||
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AC_FD_CC); then
|
||||
AC_TRY_RUN([
|
||||
#ifdef HPUXDYNAMIC
|
||||
#include <dl.h>
|
||||
|
@ -170,25 +199,33 @@ char *zsh_gl_sym_addr ;
|
|||
main()
|
||||
{
|
||||
void *handle1, *handle2;
|
||||
void **symlist1, **symlist2;
|
||||
void *(*zsh_getaddr1)(), *(*zsh_getaddr2)();
|
||||
void *sym1, *sym2;
|
||||
handle1 = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
|
||||
if(!handle1) exit(1);
|
||||
handle2 = dlopen("./conftest2.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
|
||||
if(!handle2) exit(1);
|
||||
symlist1 = (void **) dlsym(handle1, "${us}symlist1");
|
||||
symlist2 = (void **) dlsym(handle2, "${us}symlist2");
|
||||
if(!symlist1 || !symlist2) exit(1);
|
||||
for(; *symlist1; symlist1++, symlist2++)
|
||||
if(*symlist1 != *symlist2)
|
||||
exit(1);
|
||||
zsh_getaddr1 = (void *(*)()) dlsym(handle1, "${us}zsh_getaddr1");
|
||||
zsh_getaddr2 = (void *(*)()) dlsym(handle2, "${us}zsh_getaddr2");
|
||||
sym1 = zsh_getaddr1();
|
||||
sym2 = zsh_getaddr2();
|
||||
if(!sym1 || !sym2) exit(1);
|
||||
if(sym1 != sym2) exit(1);
|
||||
dlclose(handle1);
|
||||
handle1 = dlopen("./conftest1.$DL_EXT", RTLD_LAZY | RTLD_GLOBAL);
|
||||
if(!handle1) exit(1);
|
||||
zsh_getaddr1 = (void *(*)()) dlsym(handle1, "${us}zsh_getaddr1");
|
||||
sym1 = zsh_getaddr1();
|
||||
if(!sym1) exit(1);
|
||||
if(sym1 != sym2) exit(1);
|
||||
exit(0);
|
||||
}
|
||||
], [zsh_cv_sys_dynamic_broken=no],
|
||||
[zsh_cv_sys_dynamic_broken=yes],
|
||||
[zsh_cv_sys_dynamic_broken=yes]
|
||||
], [zsh_cv_shared_$1=yes],
|
||||
[zsh_cv_shared_$1=no],
|
||||
[zsh_cv_shared_$1=no]
|
||||
)
|
||||
else
|
||||
zsh_cv_sys_dynamic_broken=yes
|
||||
zsh_cv_shared_$1=no
|
||||
fi
|
||||
])
|
||||
])
|
||||
|
@ -208,10 +245,10 @@ else
|
|||
fi
|
||||
echo 'int fred () { return 42; }' > conftest1.c
|
||||
echo 'int fred () { return 69; }' > conftest2.c
|
||||
if $CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&5 2>&5 &&
|
||||
$CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&5 2>&5; then
|
||||
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AC_FD_CC); then
|
||||
AC_TRY_RUN([
|
||||
#ifdef HPUXDYNAMIC
|
||||
#include <dl.h>
|
||||
|
@ -283,10 +320,10 @@ else
|
|||
fi
|
||||
echo 'int fred () { return 42; }' > conftest1.c
|
||||
echo 'extern int fred(); int barney () { return fred() + 27; }' > conftest2.c
|
||||
if $CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&5 2>&5 &&
|
||||
$CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&5 2>&5; then
|
||||
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest2.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest2.$DL_EXT $LDFLAGS $DLLDFLAGS conftest2.o $LIBS 1>&AC_FD_CC); then
|
||||
AC_TRY_RUN([
|
||||
#ifdef HPUXDYNAMIC
|
||||
#include <dl.h>
|
||||
|
@ -353,8 +390,8 @@ else
|
|||
us=
|
||||
fi
|
||||
echo 'extern int fred(); int barney () { return fred() + 27; }' > conftest1.c
|
||||
if $CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&5 2>&5; then
|
||||
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&AC_FD_CC); then
|
||||
save_ldflags=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS $EXTRA_LDFLAGS"
|
||||
AC_TRY_RUN([
|
||||
|
@ -426,8 +463,8 @@ elif
|
|||
us=
|
||||
fi
|
||||
echo 'extern int fred(); int barney() { return fred() + 27; }' > conftest1.c
|
||||
$CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&5 2>&5; then
|
||||
AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS conftest1.o $LIBS 1>&AC_FD_CC); then
|
||||
save_ldflags=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS $EXTRA_LDFLAGS -s"
|
||||
AC_TRY_RUN([
|
||||
|
@ -495,8 +532,8 @@ else
|
|||
us=
|
||||
fi
|
||||
echo 'int fred () { return 42; }' > conftest1.c
|
||||
if $CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&5 2>&5 &&
|
||||
$DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS -s conftest1.o $LIBS 1>&5 2>&5; then
|
||||
if AC_TRY_COMMAND($CC -c $CFLAGS $CPPFLAGS $DLCFLAGS conftest1.c 1>&AC_FD_CC) &&
|
||||
AC_TRY_COMMAND($DLLD -o conftest1.$DL_EXT $LDFLAGS $DLLDFLAGS -s conftest1.o $LIBS 1>&AC_FD_CC); then
|
||||
AC_TRY_RUN([
|
||||
#ifdef HPUXDYNAMIC
|
||||
#include <dl.h>
|
||||
|
@ -620,3 +657,57 @@ tzsh=`echo ${tzsh_name} | sed -f conftestsed`
|
|||
rm -f conftestsed
|
||||
AC_SUBST(tzsh)dnl
|
||||
])
|
||||
|
||||
AC_DEFUN(zsh_COMPILE_FLAGS,
|
||||
[AC_ARG_ENABLE(cppflags,
|
||||
[ --enable-cppflags=... specify C preprocessor flags],
|
||||
if test "$enableval" = "yes"
|
||||
then CPPFLAGS="$1"
|
||||
else CPPFLAGS="$enable_cppflags"
|
||||
fi)
|
||||
AC_ARG_ENABLE(cflags,
|
||||
[ --enable-cflags=... specify C compiler flags],
|
||||
if test "$enableval" = "yes"
|
||||
then CFLAGS="$2"
|
||||
else CFLAGS="$enable_cflags"
|
||||
fi)
|
||||
AC_ARG_ENABLE(ldflags,
|
||||
[ --enable-ldflags=... specify linker flags],
|
||||
if test "$enableval" = "yes"
|
||||
then LDFLAGS="$3"
|
||||
else LDFLAGS="$enable_ldflags"
|
||||
fi)
|
||||
AC_ARG_ENABLE(libs,
|
||||
[ --enable-libs=... specify link libraries],
|
||||
if test "$enableval" = "yes"
|
||||
then LIBS="$4"
|
||||
else LIBS="$enable_libs"
|
||||
fi)])
|
||||
|
||||
dnl
|
||||
dnl zsh_CHECK_SOCKLEN_T
|
||||
dnl
|
||||
dnl check type of third argument of some network functions; currently
|
||||
dnl tested are size_t *, unsigned long *, int *.
|
||||
dnl
|
||||
AC_DEFUN([zsh_CHECK_SOCKLEN_T],[
|
||||
AC_CACHE_CHECK(
|
||||
[base type of the third argument to accept],
|
||||
[zsh_cv_type_socklen_t],
|
||||
[zsh_cv_type_socklen_t=
|
||||
for zsh_type in socklen_t int "unsigned long" size_t ; do
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>],
|
||||
[extern int accept (int, struct sockaddr *, $zsh_type *);],
|
||||
[zsh_cv_type_socklen_t="$zsh_type"; break],
|
||||
[]
|
||||
)
|
||||
done
|
||||
if test -z "$zsh_cv_type_socklen_t"; then
|
||||
zsh_cv_type_socklen_t=int
|
||||
fi]
|
||||
)
|
||||
AC_DEFINE_UNQUOTED([SOCKLEN_T], [$zsh_cv_type_socklen_t])]
|
||||
)
|
||||
|
||||
|
|
49
zshconfig.ac
49
zshconfig.ac
|
@ -1484,6 +1484,12 @@ main() {
|
|||
fi
|
||||
|
||||
|
||||
dnl ---------------
|
||||
dnl check for the type of third argument of accept
|
||||
dnl ---------------
|
||||
|
||||
zsh_CHECK_SOCKLEN_T
|
||||
|
||||
dnl ---------------
|
||||
dnl dynamic loading
|
||||
dnl ---------------
|
||||
|
@ -1496,29 +1502,30 @@ MOD_IMPORT_VARIABLE=
|
|||
MOD_IMPORT_FUNCTION=
|
||||
aixdynamic=no
|
||||
hpuxdynamic=no
|
||||
if test "$ac_cv_func_dlopen" != yes ||
|
||||
test "$ac_cv_func_dlsym" != yes ||
|
||||
test "$ac_cv_func_dlerror" != yes; then
|
||||
if test "$ac_cv_func_load" != yes ||
|
||||
test "$ac_cv_func_unload" != yes ||
|
||||
test "$ac_cv_func_loadbind" != yes ||
|
||||
test "$ac_cv_func_loadquery" != yes; then
|
||||
if test "$ac_cv_func_shl_load" != yes ||
|
||||
test "$ac_cv_func_shl_unload" != yes ||
|
||||
test "$ac_cv_func_shl_findsym" != yes; then
|
||||
dynamic=no
|
||||
elif test "x$dynamic" = xyes; then
|
||||
hpuxdynamic=yes
|
||||
DL_EXT="${DL_EXT=sl}"
|
||||
dnl autoheader won't allow us to define anything which isn't
|
||||
dnl going into a header, and we can't undefine anything, so
|
||||
dnl just define this anyway and rely on the later tests to
|
||||
dnl define DYNAMIC or not.
|
||||
AC_DEFINE(HPUXDYNAMIC)dnl
|
||||
fi
|
||||
elif test "x$dynamic" = xyes; then
|
||||
if test "$ac_cv_func_load" = yes &&
|
||||
test "$ac_cv_func_unload" = yes &&
|
||||
test "$ac_cv_func_loadbind" = yes &&
|
||||
test "$ac_cv_func_loadquery" = yes; then
|
||||
dnl Force AIXDYNAMIC even on newer versions that have dl family
|
||||
if test "x$dynamic" = xyes; then
|
||||
aixdynamic=yes
|
||||
fi
|
||||
elif test "$ac_cv_func_dlopen" != yes ||
|
||||
test "$ac_cv_func_dlsym" != yes ||
|
||||
test "$ac_cv_func_dlerror" != yes; then
|
||||
if test "$ac_cv_func_shl_load" != yes ||
|
||||
test "$ac_cv_func_shl_unload" != yes ||
|
||||
test "$ac_cv_func_shl_findsym" != yes; then
|
||||
dynamic=no
|
||||
elif test "x$dynamic" = xyes; then
|
||||
hpuxdynamic=yes
|
||||
DL_EXT="${DL_EXT=sl}"
|
||||
dnl autoheader won't allow us to define anything which isn't
|
||||
dnl going into a header, and we can't undefine anything, so
|
||||
dnl just define this anyway and rely on the later tests to
|
||||
dnl define DYNAMIC or not.
|
||||
AC_DEFINE(HPUXDYNAMIC)dnl
|
||||
fi
|
||||
fi
|
||||
|
||||
test -n "$GCC" && LDARG=-Wl,
|
||||
|
|
Loading…
Reference in a new issue