-SCM_PROC (s_primitive_dup, "primitive-dup", 1, 0, 0, scm_primitive_dup);
-SCM
-scm_primitive_dup (SCM fd_or_port)
-{
- int fd, newfd;
-
- SCM_DEFER_INTS;
- if (SCM_INUMP (fd_or_port))
- fd = SCM_INUM (fd_or_port);
- else
- {
- SCM_ASSERT (SCM_NIMP (fd_or_port) && SCM_OPPORTP (fd_or_port),
- fd_or_port, SCM_ARG1, s_primitive_dup);
- fd = fileno ((FILE *)SCM_STREAM (fd_or_port));
- if (fd == -1)
- scm_syserror (s_primitive_dup);
- }
- SCM_SYSCALL (newfd = dup (fd));
- if (newfd == -1)
- scm_syserror (s_primitive_dup);
- SCM_ALLOW_INTS;
- return SCM_MAKINUM (newfd);
-}
-