Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to mcvs-1-0-9:||(view) (annotate)|
Improved error handling. Use of tty for user interaction, plus new global option for selecting non-interactive bail behavior. * code/mcvs-main.lisp (*global-options*): add --error-bail option. (*usage*): Describe new option. (mcvs-execute): Dynamically bind *interactive-error-io* variable to a stream formed by opening the controlling tty. Send error message to *error-output* rather than *standard-output*. * code/unix-bindings/unix.lisp (unix-funcs:ctermid): New function, FFI interface to mcvs_ctermid. * code/unix-bindings/wrap.c (mcvs_ctermid): New function. * code/chatter.lisp (chatter): Chatter now goes to *error-output* rather than *standard-output*. * code/error.lisp (*interactive-error-io*): New special variable, holds stream open to controlling tty. (mcvs-terminate): New function. (mcvs-error-handler): Use *interactive-error-io* to print menu and obtain user input. Support the :bail value of *mcvs-error-treatment* Plus some cosmetic changes. * code/options.lisp (filter-mcvs-options): Support --error-bail option. * code/filt.lisp (mcvs-filt-loop): Bugfix, (read-line t ...) should be (read-line *standard-input* ...) because t stands for *terminal-io* rather than *standard-io*, unlike in the format function! * code/rcs-utils.lisp (rcs-read-token): Read from *standard-input* rather than *terminal-io*.
* code/unix-bindings/wrap.c (mcvs_spawn): One more waitpid() bug! The SIGCHLD signal handler was being set in the child process only, so although we fixed the waitpid() behavior in the CVS child process, we did not fix it in the Meta-CVS process. The ECHILD problem was sporadically reproduced by Johannes Grødem on a fast Athlon machine; it requires CVS to exit before Meta-CVS reaches the waitpid() call.
Remove debug statement.
Fix remaining occurences of SIG_IGN action for SIGCHLD being passed to child processes. * code/unix-bindings/unix.lisp (unix-funcs:default-sigchld): New call out function. * code/clisp-unix.lisp (with-input-from-program, with-output-to-program): Call the new default-sigchild function to set SIGCHILD signal handler to SIG_DFL just before creating the pipe. * code/unix-bindings/wrap.c (mcvs_default_sigchld): New function.
* code/unix-bindings/wrap.c (mcvs-spawn): In the child process, reset the signal handler for SIGCHLD to SIG_DFL before exec-ing the new image. This is needed because CLISP set it to SIG_IGN, which causes child reaping problems in spawned programs. This should fix the ``No child processes'' problem when running CVS from Meta-CVS.
* code/unix-bindings/wrap.c (impl_spawn): Try waitpid again in a loop while it returns -1, and errno is EINTR. Reported by Johannes Grødem <firstname.lastname@example.org>.
* code/unix-bindings/wrap.c (mcvs_getcwd): If getcwd() returns NULL, it only means that the buffer is too small if errno is also set to ERANGE. This second condition was not being tested. * code/clisp-unix.lisp (getcwd-error): New condition. (initialize-instance (getcwd-error)): New method. (getcwd): Raise getcwd-error condition if unix-funcs::getcwd returns NIL.
* code/unix-bindings/impl.c: File renamed to wrap.c. (impl_null_pointer_p, impl_get_errno, impl_set_errno, impl_readdir, impl_readlink, impl_stat, impl_lstat, impl_fstat, impl_getcwd, impl_spawn): Prefix changed from ``impl_'' to ``mcvs_''. * code/unix-bindings/link.sh, code/unix-bindings/Makefile, code/unix-bindings/unix.lisp: Updated accordingly.
* code/unix-bindings/impl.c (impl_spawn): For Cygwin, re-implemented this function as a wrapper for the spawnvp function. The combination of fork + execvp + waitpid does not work because waitpid is broken; it waits for thep rocess, but then returns -1 and sets errno to ECHILD.
Add missing cast.
Discontinuing use of CLISP's ext:run-program function in favor of a new workalike which doesn't rely on the shell interpreter. * code/unix-bindings/unix.lisp (unix-funcs:spawn): New C call out function (unix-funcs:run-program): New function, implemented using spawn. * code/unix-bindings/impl.c (impl_spawn): New function; wraps up fork, execvp and waitpid. * code/clisp-unix.lisp: Switch from ext:run-program to unix-funcs:run-program.
Merging symlink-branch to main trunk.
Use getcwd to to implement mcvs-locate. * code/unix-bindings/unix.lisp (getcwd): New call out, invokes impl_getcwd. * code/unix-bindings/impl.c (impl_getcwd): New function, use getcwd() to obtain current working directory, resizing dynamic buffer if necessary to get the entire path. * code/clisp-unix.lisp (getcwd): New wrapper function. * code/dirwalk.lisp (go-up): Function removed. * code/mapping.lisp (mcvs-locate): Rewritten to obtain path using getcwd, then try looking for MCVS directory in successively shorter prefixes of that path.
Working back support for CLISP 2.27. * code/install.sh: Bogus *null-pointer* hack is no longer added to the generated mcvs script, since we have our own FFI functions for doing the test. * code/unix-bindings/unix.lisp (unix-funcs:null-pointer-p): New function, tests a C pointer for null, returns T or NIL. * code/unix-bindings/impl.c (impl_null_pointer_p): New function, C implementation of unix-funcs:null-pointer-p. * code/clisp-unix.lisp (pointer-null): New macro, uses ffi:foreign-address-null under CLISP 2.28 or greater, or unix-funcs:null-pointer-p, under an older CLISP.
Retargetting CVS with new system call bindings that are not GNU/Linux specific.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|