Commit dcf7e861 authored by Reuben Thomas's avatar Reuben Thomas

Remove support for DJGPP < 2.02

This also removes some specially-licensed files and lots of accompanying
explanation.
parent 5742859f
2014-08-09 Reuben Thomas <rrt@sc3d.org>
* make-dist (files): Remove msdos/is_exec.c and sigaction.c.
* config.bat: Require DJGPP 2.02 or later.
2014-08-09 Paul Eggert <eggert@cs.ucla.edu>
Merge from gnulib, incorporating:
......
2014-08-09 Reuben Thomas <rrt@sc3d.org>
* notes/copyright: Remove mention of msdos/is_exec.c and
sigaction.c.
* authors.el (authors-renamed-files-alist): Removed is_exec.c.
2014-08-07 Reuben Thomas <rrt@sc3d.org>
* notes/exit-value: Remove specific discussion of VMS.
......
......@@ -712,7 +712,6 @@ in the repository.")
("server.c" . "emacsserver.c")
("lib-src/etags.c" . "etags.c")
;; msdos/
("is-exec.c" . "is_exec.c")
("enriched.doc" . "enriched.txt")
("GETTING.GNU.SOFTWARE" . "FTP")
("etc/MACHINES" . "MACHINES")
......
......@@ -316,11 +316,6 @@ licensing@fsf.org starting on Thu, 07 Aug 2003 with subject:
"[gnu.org #58812] Changing license of MH-E manual"
msdos/is_exec.c, sigaction.c - these files are copyright DJ Delorie.
Leave the copyrights alone. Leave the Eli Zaretskii copyright in
is_exec.c alone. See the msdos/README file for the legal history of
these files.
msdos/sed*.inp - These files are copyright FSF and distributed under
an MIT-like license.
......@@ -563,8 +558,7 @@ oldXMenu/insque.c (rms: "We wrote that specifically for Emacs, so
definitely relicense that.").
2. The files that are copyright FSF and AIST, or AIST alone, should be
and were updated, ditto the oldXMenu files with FSF copyright, and
msdos/is_exec.c and sigaction.c.
and were updated, ditto the oldXMenu files with FSF copyright.
3. lwlib/
......
......@@ -19,13 +19,13 @@ rem You should have received a copy of the GNU General Public License
rem along with GNU Emacs. If not, see http://www.gnu.org/licenses/.
rem ----------------------------------------------------------------------
rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
rem + msdos version 3 or better.
rem + DJGPP version 2.0 or later (version 2.03 or later recommended).
rem + make utility that allows breaking of the 128 chars limit on
rem command lines. ndmake (as of version 4.5) won't work due to a
rem line length limit. The make that comes with DJGPP does work (and is
rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
rem + msdos version 3 or better.
rem + DJGPP version 2.02 or later (version 2.03 or later recommended).
rem + make utility that allows breaking of the 128 chars limit on
rem command lines. ndmake (as of version 4.5) won't work due to a
rem line length limit. The make that comes with DJGPP does work (and is
rem recommended).
rem + rm, mv, and cp (from GNU file utilities).
rem + sed (you can use the port that comes with DJGPP).
......@@ -106,13 +106,13 @@ Echo Checking what version of DJGPP is installed...
If Not "%DJGPP%" == "" goto djgppOk
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:djgppOk
echo int main() >junk.c
echo #ifdef __DJGPP__ >>junk.c
echo {return (__DJGPP__)*10;} >>junk.c
echo #else >>junk.c
echo #ifdef __GO32__ >>junk.c
echo {return 10;} >>junk.c
:djgppOk
echo int main() >junk.c
echo #ifdef __DJGPP__ >>junk.c
echo {return (__DJGPP__)*10 + (__DJGPP_MINOR__);} >>junk.c
echo #else >>junk.c
echo #ifdef __GO32__ >>junk.c
echo {return 10;} >>junk.c
echo #else >>junk.c
echo {return 0;} >>junk.c
echo #endif >>junk.c
......@@ -123,22 +123,21 @@ junk
If ErrorLevel 10 Goto go32Ok
rm -f junk.c junk junk.exe
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:go32Ok
set djgpp_ver=2
If Not ErrorLevel 20 Echo To build 'Emacs' you need DJGPP v2.0 or later!
If Not ErrorLevel 20 Goto End
rm -f junk.c junk junk.exe
rem DJECHO is used by the top-level Makefile in the v2.x build
Echo Checking whether 'djecho' is available...
Goto End
:go32Ok
set djgpp_ver=2
If Not ErrorLevel 22 Echo To build 'Emacs' you need DJGPP v2.02 or later!
If Not ErrorLevel 22 Goto End
rm -f junk.c junk junk.exe
rem DJECHO is used by the top-level Makefile in the v2.x build
Echo Checking whether 'djecho' is available...
redir -o Nul -eo djecho -o junk.$$$ foo
If Exist junk.$$$ Goto djechoOk
Echo To build 'Emacs' you need the 'djecho.exe' program!
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
Echo Then run CONFIG.BAT again with the same arguments you did now.
If Exist junk.$$$ Goto djechoOk
Echo To build 'Emacs' you need the 'djecho.exe' program!
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
Echo Then run CONFIG.BAT again with the same arguments you did now.
Goto End
:djechoOk
rm -f junk.$$$
......
2014-08-09 Reuben Thomas <rrt@sc3d.org>
* PROBLEMS: Remove msdos/is_exec.c and sigaction.c.
2014-07-21 Dmitry Antipov <dmantipov@yandex.ru>
* TODO: remove frame height remark.
......
......@@ -2850,19 +2850,6 @@ This is an unfortunate side-effect of the support for Unix-style
device names such as /dev/null in the DJGPP runtime library. A
work-around is to rename the problem directory to another name.
*** MS-DOS+DJGPP: Problems on MS-DOS if DJGPP v2.0 is used to compile Emacs.
There are two DJGPP library bugs which cause problems:
* Running `shell-command' (or `compile', or `grep') you get
`Searching for program: permission denied (EACCES), c:/command.com';
* After you shell to DOS, Ctrl-Break kills Emacs.
To work around these bugs, you can use two files in the msdos
subdirectory: `is_exec.c' and `sigaction.c'. Compile them and link
them into the Emacs executable `temacs'; then they will replace the
incorrect library functions.
*** MS-DOS: Emacs compiled for MSDOS cannot find some Lisp files, or other
run-time support files, when long filename support is enabled.
......
......@@ -414,7 +414,7 @@ echo "Making links to \`msdos'"
(cd msdos
ln ChangeLog INSTALL README emacs.ico emacs.pif ../${tempdir}/msdos
ln depfiles.bat inttypes.h ../${tempdir}/msdos
ln is_exec.c sigaction.c mainmake.v2 sed*.inp ../${tempdir}/msdos)
ln mainmake.v2 sed*.inp ../${tempdir}/msdos)
echo "Making links to \`nextstep'"
(cd nextstep
......
2014-08-09 Reuben Thomas <rrt@sc3d.org>
* sed2v2.inp: Remove support for DJGPP 2.01.
* INSTALL: Don't mention removed files msdos/is_exec.c and
sigaction.c, and increase minimum version of DJGPP to 2.02.
* README: Remove note on legal status of removed files
msdos/is_exec.c and sigaction.c.
2014-04-16 Eli Zaretskii <eliz@gnu.org>
* sedlisp.inp:
......
......@@ -11,12 +11,13 @@ Building on plain MS-DOS is supported only if long file names are
supported (e.g., with a specialized driver such as doslfn).
To build and install the DJGPP port, you need to have the DJGPP ports
of GCC (the GNU C compiler), GNU Make, rm, mv, cp, and sed. See the
remarks in CONFIG.BAT for more information about locations and
versions. The Emacs FAQ (see info/efaq.info) includes pointers to
Internet sites where you can find the necessary utilities; search for
"MS-DOS". The configuration step (see below) will test for these
utilities and will refuse to continue if any of them isn't found.
of GCC (the GNU C compiler), GNU Make, rm, mv, cp, and sed, and
version 2.03 or later of DJGPP itself. See the remarks in CONFIG.BAT
for more information about locations and versions. The Emacs FAQ (see
info/efaq.info) includes pointers to Internet sites where you can find
the necessary utilities; search for "MS-DOS". The configuration step
(see below) will test for these utilities and will refuse to continue
if any of them isn't found.
Bootstrapping Emacs or recompiling Lisp files in the `lisp'
subdirectory using the various targets in the lisp/Makefile file
......@@ -28,14 +29,13 @@ are distributed in byte-compiled form as well. As for bootstrapping
itself, you will only need that if you check-out development sources
from the Emacs source repository.
Building the DJGPP version of Emacs is currently supported only on
systems which support long file names (e.g. Windows 9X or Windows XP).
You need to unpack Emacs distribution in a way that doesn't truncate
the original long filenames to the DOS 8.3 namespace; the easiest way
to do this is to use djtar program which comes with DJGPP, since it
will behave consistently with the rest of DJGPP tools. Do _not_
disable the DJGPP long-file-name support (a.k.a. "LFN") while building
Emacs.
Building the DJGPP version of Emacs is supported only on systems which
support long file names (e.g. Windows 9X or Windows XP). You need to
unpack Emacs distribution in a way that doesn't truncate the original
long filenames to the DOS 8.3 namespace; the easiest way to do this is
to use djtar program which comes with DJGPP, since it will behave
consistently with the rest of DJGPP tools. Do _not_ disable the DJGPP
long-file-name support (a.k.a. "LFN") while building Emacs.
(By the time you read this, you have already unpacked the Emacs
distribution, but if the explanations above imply that you should have
......@@ -68,13 +68,7 @@ type these commands:
Running "config msdos" checks for several programs that are required
to configure and build Emacs; if one of those programs is not found,
CONFIG.BAT stops and prints an error message. If you have DJGPP
version 2.0 or 2.01, it will complain about a program called
DJECHO.EXE. These old versions of DJGPP shipped that program under
the name ECHO.EXE, so you can simply copy ECHO.EXE to DJECHO.EXE and
rerun CONFIG.BAT. If you have neither ECHO.EXE nor DJECHO.EXE, you
should be able to find them in your djdevNNN.zip archive (where NNN is
the DJGPP version number).
CONFIG.BAT stops and prints an error message.
On Windows NT and Windows 2000/XP/Vista/7, running "config msdos"
might print an error message like "VDM has been already loaded". This
......@@ -143,12 +137,6 @@ multitasking do not work in the DJGPP port. Synchronous subprocesses
do work, so features such as compilation, grep, and Ispell run
synchronously, unlike on other platforms.
Version 2.0 of djgpp has two bugs that affect Emacs. We've included
corrected versions of two files from djgpp in the msdos subdirectory:
is_exec.c and sigaction.c. To work around the bugs, compile these
files and link them into temacs. Djgpp versions 2.01 and later have
these bugs fixed, so upgrade if you can before building Emacs.
This file is part of GNU Emacs.
......
......@@ -24,129 +24,6 @@ reproduced here:
#
# ----------------------------------------------------------------------
NOTE ON THE LEGAL STATUS OF THE FILES IS_EXEC.C, SIGACTION.C
As distributed with GNU Emacs, the files is_exec.c and sigaction.c are
Copyright (C) 1995 DJ Delorie, and are licensed under the terms of the
GNU General Public License version 3 (see COPYING), or (at your
option) any later version.
Here we record the details of the legal history of these files.
The files is_exec.c and sigaction.c were originally part of DJGPP,
distributed by DJ Delorie. The versions of these files in DJGPP
contain the following license notice:
Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details
The contents of the file COPYING.DJ (as available at, for example, the
URL: <http://www.delorie.com/bin/cvsweb.cgi/djgpp/copying.dj>) are as
follows:
-- COPYING.DJ STARTS HERE --
This is the file "COPYING.DJ". It does NOT apply to any sources or
binaries copyrighted by UCB Berkeley, the Free Software Foundation, or
any other agency besides DJ Delorie and others who have agreed to
allow their sources to be distributed under these terms.
Copyright Information for sources and executables that are marked
Copyright (C) DJ Delorie
334 North Rd
Deerfield NH 03037-1110
This document is Copyright (C) DJ Delorie and may be distributed
verbatim, but changing it is not allowed.
Source code copyright DJ Delorie is distributed under the terms of the
GNU General Public License, with the following exceptions:
* Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and
libemu.a are distributed under the terms of the GNU Library General
Public License, rather than the GNU GPL.
* Any existing copyright or authorship information in any given source
file must remain intact. If you modify a source file, a notice to that
effect must be added to the authorship information in the source file.
* Runtime binaries, as provided by DJ in DJGPP, may be distributed
without sources ONLY if the recipient is given sufficient information
to obtain a copy of djgpp themselves. This primarily applies to
go32-v2.exe, emu387.dxe, and stubedit.exe.
* Runtime objects and libraries, as provided by DJ in DJGPP, when
linked into an application, may be distributed without sources ONLY
if the recipient is given sufficient information to obtain a copy of
djgpp themselves. This primarily applies to crt0.o and libc.a.
-----
Changes to source code copyright BSD, FSF, or others, by DJ Delorie
fall under the terms of the original copyright. Such files usually
have multiple copyright notices in them.
A copy of the files "COPYING" and "COPYING.LIB" are included with this
document. If you did not receive a copy of these files, you may
obtain one from whence this document was obtained, or by writing:
Free Software Foundation, Inc.
51 Franklin Street,
Fifth Floor,
Boston, MA 02110-1301,
USA
-- COPYING.DJ ENDS HERE --
Both is_exec.c and sigaction.c are parts of DJGPP's libc.a, therefore
according to exception 1 in the above terms their "base" license is
the GNU Library General Public License [now known as the GNU Lesser
General Public License].
The terms of the GNU LGPL, specifically clause 3, which begins:
3. You may opt to apply the terms of the ordinary GNU General
Public License instead of this License to a given copy of the
Library.
permit us to relicense the files is_exec.c and sigaction.c as used in
GNU Emacs under the terms of the GNU GPL.
COPYING.DJ, however, lists extra exceptions 2-4 to the GNU licenses.
Items 3 and 4 are not relevant in the case of GNU Emacs, since they
can only apply to copies of DJGPP [confirmed by email from DJ Delorie
to rms at gnu.org and others, 2007/01/31].
Exception 2 of COPYING.DJ, when viewed as an added restriction, rather
than as an interpretation of the GPL, leads to problems. The added
requirement makes the overall license of the file incompatible with
the GNU GPL.
As a solution to this problem, DJ Delorie has kindly granted (February
2007) GNU Emacs an exception, and permits us to license the files
is_exec.c and sigaction.c solely under the terms of the GNU GPL. This
exception applies _only_ to these files as distributed with GNU Emacs.
This solution was arrived at in an email discussion between DJ Delorie
<dj at delorie.com> and Richard Stallman <rms at gnu.org> in
January/February 2007. We record below a summary of the relevant final
email in this discussion:
From: DJ Delorie <dj at delorie.com>
To: rms at gnu.org
Subject: Re: COPYING.DJ and Emacsn
I have no problem with whatever you wish to do with those files in
emacs (as long as djgpp itself doesn't need to change).
Accordingly, in February 2007 we relicensed the files is_exec.c and
sigaction.c as used in GNU Emacs under the GNU GPL.
Copies of both the GNU General Public License and GNU Lesser (Library)
Public License may be obtained from <http://www.gnu.org/licenses/>, or:
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
This file is part of GNU Emacs.
......
/* IS_EXEC.C
*
* Copyright (C) 1995 DJ Delorie
* Copyright (C) 1994 Eli Zaretskii <eliz@is.elta.co.il>
*
* (See the README file in this directory for the copyright and license
* history of this file.)
*
* This file is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this file. If not, see <http://www.gnu.org/licenses/>.
*
* Commentary:
*
* Given a filename or a file handle, and the extension of the file,
* determine if the file is executable.
* First, the file extension is checked in case it uniquely identifies
* the file as either an executable or not. Failing this, the first
* two bytes of the file are tested for known signatures of executable
* files.
*
*/
#include <libc/stubs.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <dpmi.h>
#include <go32.h>
#include <io.h>
#include <libc/farptrgs.h>
#include <libc/dosio.h>
extern unsigned short _djstat_flags;
unsigned short _get_magic(const char *, int);
int _is_executable(const char *, int, const char *);
/*
* Read a MAGIC NUMBER from a given file. These are the first
* two bytes of the file, if we look at them as an unsigned short. */
#define _STAT_EXEC_EXT 2 /* get execute bits from file extension? */
#define _STAT_EXEC_MAGIC 4 /* get execute bits from magic signature? */
unsigned short
_get_magic(const char *s, int fh)
{
__dpmi_regs regs;
unsigned short retval;
unsigned short fpos_high = 0, fpos_low = 0;
int read_fail = 0;
/* If given a pathname, open the file. */
if (s)
{
int handle;
if((handle = _open(s,0)) == -1)
return 0;
regs.x.bx = handle;
}
/* Else file already open. Remember its current file position
and move to beginning of file. */
else
{
regs.x.ax = 0x4201; /* set pointer from current position */
regs.x.bx = fh;
regs.x.cx = regs.x.dx = 0; /* move 0 bytes (i.e., stay put) */
__dpmi_int(0x21, &regs);
if (regs.x.flags & 1)
{
errno = __doserr_to_errno(regs.x.ax);
return 0;
}
fpos_high = regs.x.dx; /* got current position */
fpos_low = regs.x.ax;
regs.x.ax = 0x4200; /* set pointer from the beginning of file */
regs.x.cx = regs.x.dx = 0; /* move to beginning of file */
__dpmi_int(0x21, &regs);
if (regs.x.flags & 1)
{
errno = __doserr_to_errno(regs.x.ax);
return 0;
}
}
regs.x.ds = __tb_segment;
regs.x.dx = __tb_offset;
/* Read 2 bytes from the file. */
regs.x.ax = 0x3f00;
regs.x.cx = 2;
__dpmi_int(0x21, &regs);
/* We can either (1) succeed, (2) read less than 2 bytes,
or (3) fail to read at all. */
if (regs.x.ax != 2)
read_fail = (regs.x.flags & 1) ? regs.x.ax : -1;
/* If called with filename, close the file. */
if (s)
{
regs.x.ax = 0x3e00;
__dpmi_int(0x21, &regs);
if (regs.x.flags & 1)
errno = __doserr_to_errno(regs.x.ax);
}
/* Else leave file pointer where we found it. */
else
{
regs.x.ax = 0x4200; /* set pointer from the beginning of file */
regs.x.bx = fh;
regs.x.cx = fpos_high;
regs.x.dx = fpos_low;
__dpmi_int(0x21, &regs);
if (regs.x.flags & 1)
{
errno = __doserr_to_errno(regs.x.ax);
return 0;
}
}
if (read_fail == 0)
retval = _farpeekw(_dos_ds, __tb);
else
{
/* The file couldn't be read: assume non-executable. If the file
*is* executable, but was passed as a file-handle, and the user
opened it in write-only mode, they lose... */
retval = 0;
if (read_fail != -1)
errno = __doserr_to_errno(read_fail);
}
return retval;
}
/* A list of extensions which designate executable files. These
are NOT tested for the magic number. */
static char executables[] = "|EXE|COM|BAT|BTM|DLL|VXD|";
/* A list of extensions which belong to files known to NEVER be
executables. These exist to minimize read()'ing files while
detecting executables by magic number. You are welcome to
add to this list, but remember: only extensions which could
NEVER be present in executables should go here. */
static char non_executables[] = "\
|A|A01|A02|A03|A04|A05|ADL|ARC|ARJ|ASC|ASM|AUX|AWK\
|BAS|BIB|BGI|BMP\
|C|CC|CFG|CGZ|CH3|CHR|CI|CLP|CMF|CPI|CPP|CXX\
|DAT|DBF|DIZ|DOC|DVI\
|E|EL|ELC\
|F77|FN3\
|GIF|GZ\
|H|HLP|HPP|HXX\
|ICO|IN|INC|INF|INI\
|JPG\
|L|LEX|LF|LIB|LOG|LST|LZH\
|M|MAK|MAP|MF|MID|MPG\
|O|OBJ\
|PAK|PAS|PBM|PCD|PCX|PDS|PIC|PIF|PN3|PRJ|PS\
|RAS|RGB|RLE\
|S|SND|SY3\
|TAR|TAZ|TEX|TGA|TGZ|TIF|TXH|TXI|TXT\
|VOC\
|WAV|WK1|WK3|WKB|WQ1|WQ3|WQ4|WQ5|WQ6|WQ!\
|XBM\
|Y\
|ZIP|ZOO|";
int
_is_executable(const char *filename, int fhandle, const char *extension)
{
if (!extension && filename)
{
const char *cp, *ep=0;
for (cp=filename; *cp; cp++)
{
if (*cp == '.')
ep = cp;
if (*cp == '/' || *cp == '\\' || *cp == ':')
ep = 0;
}
extension = ep;
}
if ((_djstat_flags & _STAT_EXEC_EXT) == 0
&& extension
&& *extension
&& strlen(extension) <= ((extension[0]=='.') ? 4 : 3))
{
/* Search the list of extensions in executables[]. */
char tmp_buf[6], *tp = tmp_buf;
*tp++ = '|';
if (*extension == '.')
extension++;
while (*extension)
*tp++ = toupper (*extension++);
*tp++ = '|';
*tp = '\0';
if (strstr(non_executables, tmp_buf))
return 0;
else if (strstr(executables, tmp_buf))
return 1;
}
/* No extension, or extension doesn't define execute
bits unambiguously. We are in for some dirty work.
Read the first two bytes of the file and see if they
are any of the known magic numbers which designate
executable files.
Unix-like shells, which have executable shell scripts
without extensions and DON'T have "#!" as their FIRST
TWO CHARACTERS, lose here. Sorry, folks. */
if ( (_djstat_flags & _STAT_EXEC_MAGIC) == 0 )
{
switch (_get_magic(filename, fhandle))
{
case 0x5a4d: /* "MZ" */
case 0x010b:
case 0x014c:
case 0x2123: /* "#!" */
return 1;
}
}
return 0;
}
......@@ -22,10 +22,6 @@
#include <sys/version.h>\
/* In DJGPP v2.x almost everything is already defined in a system header. */\
#include <sys/config.h>\
/* For those who still use DJGPP v2.01 */\
#if __DJGPP__ == 2 && __DJGPP_MINOR__ == 1\
#define NSIG 320\
#endif
/^#undef MSDOS *$/c\
#ifndef MSDOS\
......
/* sigaction.c
*
* Copyright (C) 1995 DJ Delorie
*
* (See the README file in this directory for the copyright and license
* history of this file.)
*
* This file is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this file. If not, see <http://www.gnu.org/licenses/>.
*/
#include <signal.h>
#include <errno.h>
int
sigaction(int _sig, const struct sigaction *_act, struct sigaction *_oact)
{
int retval = 0;
if (_oact)
{
void (*installed_sig)(int) = signal (_sig, SIG_IGN);
/* FIXME */
if (installed_sig == SIG_ERR)
{
retval = -1;
errno = EINVAL;