bug-hurd
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]