[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scsh on GNU/Hurd
From: |
Niels Möller |
Subject: |
scsh on GNU/Hurd |
Date: |
23 May 2002 23:38:58 +0200 |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 |
Hi,
I've compiled scsh-0.5.3 on a current Hurd machine, which required
some minor hacking. config.guess output on this machine was
"i386-unknown-gnu0.2". The steps needed were:
1. I added
*-*-gnu* )
dir=gnu
SCSH_ELF
;;
at about line 295 in configure.in, just below the
"*-*-linux* )"-clause.
2. I copied the scsh/linux directory to a new directory scsh/gnu.
3. In syscalls1.c, I added the lines
/* MAXPATHLEN is not defined on the Hurd. */
/* FIXME: Do this properly, and get rid of the static memory as well */
#ifndef MAXPATHLEN
#define MAXPATHLEN 500
#endif
just before the definiton of scm_readlink,
/* Read the symlink into static memory. Return NULL on error. */
static char linkpath[MAXPATHLEN+1]; /* Maybe unaligned. Not reentrant. */
char const *scm_readlink(const char *path)
{
int retval = readlink(path, linkpath, MAXPATHLEN);
return (char const *)
((retval == -1) ? NULL : ( linkpath[retval] = '\0', linkpath ));
}
This is an ugly hack, but I haven't figured out how to fix
scm_readlink properly.
3. sigset_t seems to be a plain unsigned int, so I had to redefine the
macros in scsh/gnu/sigset.h, as follows:
/* On gnu, it seems a sigset_t is just an unsigned int. */
#define make_sigset(maskp, hi, lo) \
(*(maskp) = (unsigned long int) ((hi) << 24) | (lo))
#define split_sigset(mask, hip, lop)\
((*(hip) = ((mask) >> 24) & 0xff),\
(*(lop) = ((mask) & 0xffffff)))
After these steps, both make and make check succeeded.
Happy hacking,
/Niels Möller
- scsh on GNU/Hurd,
Niels Möller <=