* validate.h
[bpt/guile.git] / libguile / posix.c
index c8f969a..83e8bac 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,6 +48,8 @@
 #define _GNU_SOURCE
 
 #include <stdio.h>
+#include <errno.h>
+
 #include "libguile/_scm.h"
 #include "libguile/fports.h"
 #include "libguile/scmsigs.h"
@@ -184,19 +186,19 @@ SCM_SYMBOL (sym_write_pipe, "write pipe");
 
 SCM_DEFINE (scm_pipe, "pipe", 0, 0, 0,
             (),
-           "Returns a newly created pipe: a pair of ports which are linked\n"
-           "together on the local machine.  The CAR is the input port and\n"
-           "the CDR is the output port.  Data written (and flushed) to the\n"
-           "output port can be read from the input port.\n"
-           "Pipes are commonly used for communication with a newly\n"
-           "forked child process.  The need to flush the output port\n"
-           "can be avoided by making it unbuffered using @code{setvbuf}.\n\n"
-           "Writes occur atomically provided the size of the data in\n"
-           "bytes is not greater than the value of @code{PIPE_BUF}\n"
-           "Note that the output port is likely to block if too much data\n"
-           "(typically equal to @code{PIPE_BUF}) has been written but not\n"
-           "yet read from the input port\n"
-           )
+           "Return a newly created pipe: a pair of ports which are linked\n"
+           "together on the local machine.  The @emph{car} is the input\n"
+           "port and the @emph{cdr} is the output port.  Data written (and\n"
+           "flushed) to the output port can be read from the input port.\n"
+           "Pipes are commonly used for communication with a newly forked\n"
+           "child process.  The need to flush the output port can be\n"
+           "avoided by making it unbuffered using @code{setvbuf}.\n"
+           "\n"
+           "Writes occur atomically provided the size of the data in bytes\n"
+           "is not greater than the value of @code{PIPE_BUF}.  Note that\n"
+           "the output port is likely to block if too much data (typically\n"
+           "equal to @code{PIPE_BUF}) has been written but not yet read\n"
+           "from the input port.")
 #define FUNC_NAME s_scm_pipe
 {
   int fd[2], rv;
@@ -216,12 +218,13 @@ SCM_DEFINE (scm_pipe, "pipe", 0, 0, 0,
 #ifdef HAVE_GETGROUPS
 SCM_DEFINE (scm_getgroups, "getgroups", 0, 0, 0,
             (),
-           "Returns a vector of integers representing the current supplimentary group IDs.")
+           "Return a vector of integers representing the current\n"
+           "supplimentary group IDs.")
 #define FUNC_NAME s_scm_getgroups
 {
   SCM ans;
   int ngroups;
-  scm_sizet size;
+  size_t size;
   GETGROUPS_T *groups;
 
   ngroups = getgroups (0, NULL);
@@ -471,9 +474,9 @@ SCM_DEFINE (scm_waitpid, "waitpid", 1, 1, 0,
 
 SCM_DEFINE (scm_status_exit_val, "status:exit-val", 1, 0, 0, 
             (SCM status),
-           "Returns the exit status value, as would be\n"
-           "set if a process ended normally through a\n"
-           "call to @code{exit} or @code{_exit}, if any, otherwise @code{#f}.")
+           "Return the exit status value, as would be set if a process\n"
+           "ended normally through a call to @code{exit} or @code{_exit},\n"
+           "if any, otherwise @code{#f}.")
 #define FUNC_NAME s_scm_status_exit_val
 {
   int lstatus;
@@ -492,8 +495,8 @@ SCM_DEFINE (scm_status_exit_val, "status:exit-val", 1, 0, 0,
 
 SCM_DEFINE (scm_status_term_sig, "status:term-sig", 1, 0, 0, 
             (SCM status),
-           "Returns the signal number which terminated the\n"
-           "process, if any, otherwise @code{#f}.")
+           "Return the signal number which terminated the process, if any,\n"
+           "otherwise @code{#f}.")
 #define FUNC_NAME s_scm_status_term_sig
 {
   int lstatus;
@@ -510,8 +513,8 @@ SCM_DEFINE (scm_status_term_sig, "status:term-sig", 1, 0, 0,
 
 SCM_DEFINE (scm_status_stop_sig, "status:stop-sig", 1, 0, 0, 
             (SCM status),
-           "Returns the signal number which stopped the\n"
-           "process, if any, otherwise @code{#f}.")
+           "Return the signal number which stopped the process, if any,\n"
+           "otherwise @code{#f}.")
 #define FUNC_NAME s_scm_status_stop_sig
 {
   int lstatus;
@@ -528,7 +531,8 @@ SCM_DEFINE (scm_status_stop_sig, "status:stop-sig", 1, 0, 0,
 
 SCM_DEFINE (scm_getppid, "getppid", 0, 0, 0,
             (),
-           "Returns an integer representing the process ID of the parent process.")
+           "Return an integer representing the process ID of the parent\n"
+           "process.")
 #define FUNC_NAME s_scm_getppid
 {
   return SCM_MAKINUM (0L + getppid ());
@@ -539,7 +543,7 @@ SCM_DEFINE (scm_getppid, "getppid", 0, 0, 0,
 
 SCM_DEFINE (scm_getuid, "getuid", 0, 0, 0,
             (),
-           "Returns an integer representing the current real user ID.")
+           "Return an integer representing the current real user ID.")
 #define FUNC_NAME s_scm_getuid
 {
   return SCM_MAKINUM (0L + getuid ());
@@ -550,7 +554,7 @@ SCM_DEFINE (scm_getuid, "getuid", 0, 0, 0,
 
 SCM_DEFINE (scm_getgid, "getgid", 0, 0, 0,
             (),
-           "Returns an integer representing the current real group ID.")
+           "Return an integer representing the current real group ID.")
 #define FUNC_NAME s_scm_getgid
 {
   return SCM_MAKINUM (0L + getgid ());
@@ -561,10 +565,10 @@ SCM_DEFINE (scm_getgid, "getgid", 0, 0, 0,
 
 SCM_DEFINE (scm_geteuid, "geteuid", 0, 0, 0,
             (),
-           "Returns an integer representing the current effective user ID.\n"
+           "Return an integer representing the current effective user ID.\n"
            "If the system does not support effective IDs, then the real ID\n"
-           "is returned.  @code{(feature? 'EIDs)} reports whether the system\n"
-           "supports effective IDs.")
+           "is returned.  @code{(feature? 'EIDs)} reports whether the\n"
+           "system supports effective IDs.")
 #define FUNC_NAME s_scm_geteuid
 {
 #ifdef HAVE_GETEUID
@@ -579,10 +583,10 @@ SCM_DEFINE (scm_geteuid, "geteuid", 0, 0, 0,
 
 SCM_DEFINE (scm_getegid, "getegid", 0, 0, 0,
             (),
-           "Returns an integer representing the current effective group ID.\n"
+           "Return an integer representing the current effective group ID.\n"
            "If the system does not support effective IDs, then the real ID\n"
-           "is returned.  @code{(feature? 'EIDs)} reports whether the system\n"
-           "supports effective IDs.")
+           "is returned.  @code{(feature? 'EIDs)} reports whether the\n"
+           "system supports effective IDs.")
 #define FUNC_NAME s_scm_getegid
 {
 #ifdef HAVE_GETEUID
@@ -673,7 +677,7 @@ SCM_DEFINE (scm_setegid, "setegid", 1, 0, 0,
 
 SCM_DEFINE (scm_getpgrp, "getpgrp", 0, 0, 0,
             (),
-           "Returns an integer representing the current process group ID.\n"
+           "Return an integer representing the current process group ID.\n"
            "This is the POSIX definition, not BSD.")
 #define FUNC_NAME s_scm_getpgrp
 {
@@ -722,8 +726,8 @@ SCM_DEFINE (scm_setsid, "setsid", 0, 0, 0,
 
 SCM_DEFINE (scm_ttyname, "ttyname", 1, 0, 0, 
             (SCM port),
-           "Returns a string with the name of the serial terminal device underlying\n"
-           "@var{port}.")
+           "Return a string with the name of the serial terminal device\n"
+           "underlying @var{port}.")
 #define FUNC_NAME s_scm_ttyname
 {
   char *ans;
@@ -745,8 +749,8 @@ SCM_DEFINE (scm_ttyname, "ttyname", 1, 0, 0,
 #ifdef HAVE_CTERMID
 SCM_DEFINE (scm_ctermid, "ctermid", 0, 0, 0,
             (),
-           "Returns a string containing the file name of the controlling terminal\n"
-           "for the current process.")
+           "Return a string containing the file name of the controlling\n"
+           "terminal for the current process.")
 #define FUNC_NAME s_scm_ctermid
 {
   char *result = ctermid (NULL);
@@ -760,9 +764,10 @@ SCM_DEFINE (scm_ctermid, "ctermid", 0, 0, 0,
 #ifdef HAVE_TCGETPGRP
 SCM_DEFINE (scm_tcgetpgrp, "tcgetpgrp", 1, 0, 0, 
             (SCM port),
-           "Returns the process group ID of the foreground\n"
-           "process group associated with the terminal open on the file descriptor\n"
-           "underlying @var{port}.\n\n"
+           "Return the process group ID of the foreground process group\n"
+           "associated with the terminal open on the file descriptor\n"
+           "underlying @var{port}.\n"
+           "\n"
            "If there is no foreground process group, the return value is a\n"
            "number greater than 1 that does not match the process group ID\n"
            "of any existing process group.  This can happen if all of the\n"
@@ -826,7 +831,7 @@ scm_convert_exec_args (SCM args, int argn, const char *subr)
   for (i = 0; !SCM_NULLP (args); args = SCM_CDR (args), ++i)
     {
       SCM arg = SCM_CAR (args);
-      scm_sizet len;
+      size_t len;
       char *dst;
       char *src;
 
@@ -962,8 +967,8 @@ SCM_DEFINE (scm_fork, "primitive-fork", 0, 0, 0,
 #ifdef HAVE_UNAME
 SCM_DEFINE (scm_uname, "uname", 0, 0, 0,
             (),
-           "Returns an object with some information about the computer system the\n"
-           "program is running on.")
+           "Return an object with some information about the computer\n"
+           "system the program is running on.")
 #define FUNC_NAME s_scm_uname
 {
   struct utsname buf;
@@ -987,12 +992,13 @@ SCM_DEFINE (scm_uname, "uname", 0, 0, 0,
 
 SCM_DEFINE (scm_environ, "environ", 0, 1, 0, 
             (SCM env),
-           "If @var{env} is omitted, returns the current environment as a list of strings.\n"
-           "Otherwise it sets the current environment, which is also the\n"
-           "default environment for child processes, to the supplied list of strings.\n"
-           "Each member of @var{env} should be of the form\n"
-           "@code{NAME=VALUE} and values of @code{NAME} should not be duplicated.\n"
-           "If @var{env} is supplied then the return value is unspecified.")
+           "If @var{env} is omitted, return the current environment (in the\n"
+           "Unix sense) as a list of strings.  Otherwise set the current\n"
+           "environment, which is also the default environment for child\n"
+           "processes, to the supplied list of strings.  Each member of\n"
+           "@var{env} should be of the form @code{NAME=VALUE} and values of\n"
+           "@code{NAME} should not be duplicated.  If @var{env} is supplied\n"
+           "then the return value is unspecified.")
 #define FUNC_NAME s_scm_environ
 {
   if (SCM_UNBNDP (env))
@@ -1026,33 +1032,59 @@ SCM_DEFINE (scm_environ, "environ", 0, 1, 0,
 
 SCM_DEFINE (scm_tmpnam, "tmpnam", 0, 0, 0,
             (),
-           "Create a new file in the file system with a unique name.  The return\n"
-           "value is the name of the new file.  This function is implemented with\n"
-           "the @code{tmpnam} function in the system libraries.")
+           "Return a name in the file system that does not match any\n"
+           "existing file.  However there is no guarantee that another\n"
+           "process will not create the file after @code{tmpnam} is called.\n"
+           "Care should be taken if opening the file, e.g., use the\n"
+           "@code{O_EXCL} open flag or use @code{mkstemp!} instead.")
 #define FUNC_NAME s_scm_tmpnam
 {
   char name[L_tmpnam];
-  SCM_SYSCALL (tmpnam (name););
+  char *rv;
+
+  SCM_SYSCALL (rv = tmpnam (name));
+  if (rv == NULL)
+    /* not SCM_SYSERROR since errno probably not set.  */
+    SCM_MISC_ERROR ("tmpnam failed", SCM_EOL);
   return scm_makfrom0str (name);
 }
 #undef FUNC_NAME
 
 #endif
 
+SCM_DEFINE (scm_mkstemp, "mkstemp!", 1, 0, 0,
+           (SCM tmpl),
+           "Create a new unique file in the file system and returns a new\n"
+           "buffered port open for reading and writing to the file.\n"
+           "@var{tmpl} is a string specifying where the file should be\n"
+           "created: it must end with @code{XXXXXX} and will be changed in\n"
+           "place to return the name of the temporary file.")
+#define FUNC_NAME s_scm_mkstemp
+{
+  char *c_tmpl;
+  int rv;
+  
+  SCM_STRING_COERCE_0TERMINATION_X (tmpl);
+  SCM_VALIDATE_STRING_COPY (1, tmpl, c_tmpl);
+  SCM_SYSCALL (rv = mkstemp (c_tmpl));
+  if (rv == -1)
+    SCM_SYSERROR;
+  return scm_fdes_to_port (rv, "w+", tmpl);
+}
+#undef FUNC_NAME
+
 SCM_DEFINE (scm_utime, "utime", 1, 2, 0,
             (SCM pathname, SCM actime, SCM modtime),
-           "@code{utime} sets the access and modification times for\n"
-           "the file named by @var{path}.  If @var{actime} or @var{modtime}\n"
-           "is not supplied, then the current time is used.\n"
-           "@var{actime} and @var{modtime}\n"
-           "must be integer time values as returned by the @code{current-time}\n"
-           "procedure.\n\n"
-           "E.g.,\n\n"
-           "@smalllisp\n"
+           "@code{utime} sets the access and modification times for the\n"
+           "file named by @var{path}.  If @var{actime} or @var{modtime} is\n"
+           "not supplied, then the current time is used.  @var{actime} and\n"
+           "@var{modtime} must be integer time values as returned by the\n"
+           "@code{current-time} procedure.\n"
+           "@lisp\n"
            "(utime \"foo\" (- (current-time) 3600))\n"
-           "@end smalllisp\n\n"
-           "will set the access time to one hour in the past and the modification\n"
-           "time to the current time.")
+           "@end lisp\n"
+           "will set the access time to one hour in the past and the\n"
+           "modification time to the current time.")
 #define FUNC_NAME s_scm_utime
 {
   int rv;
@@ -1063,12 +1095,12 @@ SCM_DEFINE (scm_utime, "utime", 1, 2, 0,
   if (SCM_UNBNDP (actime))
     SCM_SYSCALL (time (&utm_tmp.actime));
   else
-    utm_tmp.actime = SCM_NUM2ULONG (2,actime);
+    utm_tmp.actime = SCM_NUM2ULONG (2, actime);
 
   if (SCM_UNBNDP (modtime))
     SCM_SYSCALL (time (&utm_tmp.modtime));
   else
-    utm_tmp.modtime = SCM_NUM2ULONG (3,modtime);
+    utm_tmp.modtime = SCM_NUM2ULONG (3, modtime);
 
   SCM_SYSCALL (rv = utime (SCM_STRING_CHARS (pathname), &utm_tmp));
   if (rv != 0)
@@ -1079,17 +1111,17 @@ SCM_DEFINE (scm_utime, "utime", 1, 2, 0,
 
 SCM_DEFINE (scm_access, "access?", 2, 0, 0,
             (SCM path, SCM how),
-           "Returns @code{#t} if @var{path} corresponds to an existing\n"
-           "file and the current process\n"
-           "has the type of access specified by @var{how}, otherwise \n"
-           "@code{#f}.\n"
-           "@var{how} should be specified\n"
-           "using the values of the variables listed below.  Multiple values can\n"
-           "be combined using a bitwise or, in which case @code{#t} will only\n"
-           "be returned if all accesses are granted.\n\n"
-           "Permissions are checked using the real id of the current process,\n"
-           "not the effective id, although it's the effective id which determines\n"
-           "whether the access would actually be granted.\n\n"
+           "Return @code{#t} if @var{path} corresponds to an existing file\n"
+           "and the current process has the type of access specified by\n"
+           "@var{how}, otherwise @code{#f}.  @var{how} should be specified\n"
+           "using the values of the variables listed below.  Multiple\n"
+           "values can be combined using a bitwise or, in which case\n"
+           "@code{#t} will only be returned if all accesses are granted.\n"
+           "\n"
+           "Permissions are checked using the real id of the current\n"
+           "process, not the effective id, although it's the effective id\n"
+           "which determines whether the access would actually be granted.\n"
+           "\n"
            "@defvar R_OK\n"
            "test for read permission.\n"
            "@end defvar\n"
@@ -1116,7 +1148,7 @@ SCM_DEFINE (scm_access, "access?", 2, 0, 0,
 
 SCM_DEFINE (scm_getpid, "getpid", 0, 0, 0,
             (),
-           "Returns an integer representing the current process ID.")
+           "Return an integer representing the current process ID.")
 #define FUNC_NAME s_scm_getpid
 {
   return SCM_MAKINUM ((unsigned long) getpid ());
@@ -1156,15 +1188,15 @@ SCM_DEFINE (scm_putenv, "putenv", 1, 0, 0,
 #ifdef HAVE_SETLOCALE
 SCM_DEFINE (scm_setlocale, "setlocale", 1, 1, 0,
             (SCM category, SCM locale),
-           "If @var{locale} is omitted, returns the current value of the specified\n"
-           "locale category \n"
-           "as a system-dependent string.\n"
-           "@var{category} should be specified using the values @code{LC_COLLATE},\n"
-           "@code{LC_ALL} etc.\n\n"
-           "Otherwise the specified locale category is set to\n"
-           "the string @var{locale}\n"
-           "and the new value is returned as a system-dependent string.  If @var{locale}\n"
-           "is an empty string, the locale will be set using envirionment variables.")
+           "If @var{locale} is omitted, return the current value of the\n"
+           "specified locale category as a system-dependent string.\n"
+           "@var{category} should be specified using the values\n"
+           "@code{LC_COLLATE}, @code{LC_ALL} etc.\n"
+           "\n"
+           "Otherwise the specified locale category is set to the string\n"
+           "@var{locale} and the new value is returned as a\n"
+           "system-dependent string.  If @var{locale} is an empty string,\n"
+           "the locale will be set using envirionment variables.")
 #define FUNC_NAME s_scm_setlocale
 {
   char *clocale;
@@ -1202,9 +1234,9 @@ SCM_DEFINE (scm_mknod, "mknod", 4, 0, 0,
            "to.  Its exact interpretation depends on the kind of special file\n"
            "being created.\n\n"
            "E.g.,\n"
-           "@example\n"
+           "@lisp\n"
            "(mknod \"/dev/fd0\" 'block-special #o660 (+ (* 2 256) 2))\n"
-           "@end example\n\n"
+           "@end lisp\n\n"
            "The return value is unspecified.")
 #define FUNC_NAME s_scm_mknod
 {
@@ -1540,70 +1572,70 @@ scm_init_posix ()
   scm_add_feature ("EIDs");
 #endif
 #ifdef WAIT_ANY
-  scm_sysintern ("WAIT_ANY", SCM_MAKINUM (WAIT_ANY));
+  scm_c_define ("WAIT_ANY", SCM_MAKINUM (WAIT_ANY));
 #endif
 #ifdef WAIT_MYPGRP
-  scm_sysintern ("WAIT_MYPGRP", SCM_MAKINUM (WAIT_MYPGRP));
+  scm_c_define ("WAIT_MYPGRP", SCM_MAKINUM (WAIT_MYPGRP));
 #endif
 #ifdef WNOHANG
-  scm_sysintern ("WNOHANG", SCM_MAKINUM (WNOHANG));
+  scm_c_define ("WNOHANG", SCM_MAKINUM (WNOHANG));
 #endif
 #ifdef WUNTRACED
-  scm_sysintern ("WUNTRACED", SCM_MAKINUM (WUNTRACED));
+  scm_c_define ("WUNTRACED", SCM_MAKINUM (WUNTRACED));
 #endif
 
   /* access() symbols.  */
-  scm_sysintern ("R_OK", SCM_MAKINUM (R_OK));
-  scm_sysintern ("W_OK", SCM_MAKINUM (W_OK));
-  scm_sysintern ("X_OK", SCM_MAKINUM (X_OK));
-  scm_sysintern ("F_OK", SCM_MAKINUM (F_OK));
+  scm_c_define ("R_OK", SCM_MAKINUM (R_OK));
+  scm_c_define ("W_OK", SCM_MAKINUM (W_OK));
+  scm_c_define ("X_OK", SCM_MAKINUM (X_OK));
+  scm_c_define ("F_OK", SCM_MAKINUM (F_OK));
 
 #ifdef LC_COLLATE
-  scm_sysintern ("LC_COLLATE", SCM_MAKINUM (LC_COLLATE));
+  scm_c_define ("LC_COLLATE", SCM_MAKINUM (LC_COLLATE));
 #endif
 #ifdef LC_CTYPE
-  scm_sysintern ("LC_CTYPE", SCM_MAKINUM (LC_CTYPE));
+  scm_c_define ("LC_CTYPE", SCM_MAKINUM (LC_CTYPE));
 #endif
 #ifdef LC_MONETARY
-  scm_sysintern ("LC_MONETARY", SCM_MAKINUM (LC_MONETARY));
+  scm_c_define ("LC_MONETARY", SCM_MAKINUM (LC_MONETARY));
 #endif
 #ifdef LC_NUMERIC
-  scm_sysintern ("LC_NUMERIC", SCM_MAKINUM (LC_NUMERIC));
+  scm_c_define ("LC_NUMERIC", SCM_MAKINUM (LC_NUMERIC));
 #endif
 #ifdef LC_TIME
-  scm_sysintern ("LC_TIME", SCM_MAKINUM (LC_TIME));
+  scm_c_define ("LC_TIME", SCM_MAKINUM (LC_TIME));
 #endif
 #ifdef LC_MESSAGES
-  scm_sysintern ("LC_MESSAGES", SCM_MAKINUM (LC_MESSAGES));
+  scm_c_define ("LC_MESSAGES", SCM_MAKINUM (LC_MESSAGES));
 #endif
 #ifdef LC_ALL
-  scm_sysintern ("LC_ALL", SCM_MAKINUM (LC_ALL));
+  scm_c_define ("LC_ALL", SCM_MAKINUM (LC_ALL));
 #endif
 #ifdef PIPE_BUF
-scm_sysintern ("PIPE_BUF", scm_long2num (PIPE_BUF));
+  scm_c_define ("PIPE_BUF", scm_long2num (PIPE_BUF));
 #endif
 
 #ifdef PRIO_PROCESS
-  scm_sysintern ("PRIO_PROCESS", SCM_MAKINUM (PRIO_PROCESS));
+  scm_c_define ("PRIO_PROCESS", SCM_MAKINUM (PRIO_PROCESS));
 #endif
 #ifdef PRIO_PGRP
-  scm_sysintern ("PRIO_PGRP", SCM_MAKINUM (PRIO_PGRP));
+  scm_c_define ("PRIO_PGRP", SCM_MAKINUM (PRIO_PGRP));
 #endif
 #ifdef PRIO_USER
-  scm_sysintern ("PRIO_USER", SCM_MAKINUM (PRIO_USER));
+  scm_c_define ("PRIO_USER", SCM_MAKINUM (PRIO_USER));
 #endif
 
 #ifdef LOCK_SH
-  scm_sysintern ("LOCK_SH", SCM_MAKINUM (LOCK_SH));
+  scm_c_define ("LOCK_SH", SCM_MAKINUM (LOCK_SH));
 #endif
 #ifdef LOCK_EX
-  scm_sysintern ("LOCK_EX", SCM_MAKINUM (LOCK_EX));
+  scm_c_define ("LOCK_EX", SCM_MAKINUM (LOCK_EX));
 #endif
 #ifdef LOCK_UN
-  scm_sysintern ("LOCK_UN", SCM_MAKINUM (LOCK_UN));
+  scm_c_define ("LOCK_UN", SCM_MAKINUM (LOCK_UN));
 #endif
 #ifdef LOCK_NB
-  scm_sysintern ("LOCK_NB", SCM_MAKINUM (LOCK_NB));
+  scm_c_define ("LOCK_NB", SCM_MAKINUM (LOCK_NB));
 #endif
 
 #include "libguile/cpp_sig_symbols.c"