From: "Jan D." <jan.h.d@swipnet.se>
Cc: angeloff@acm.org
Subject: Re: [angeloff@acm.org: Emacs bug with Solaris 9 (only)]
Date: Sat, 15 Feb 2003 22:59:45 +0100 (CET) [thread overview]
Message-ID: <200302152253.h1FMrw3B013807@stubby.bodenonline.com> (raw)
In-Reply-To: "from (env: jhd) at Feb 15, 2003 01:52:30 pm"
[-- Attachment #1: Type: text/plain, Size: 131 bytes --]
Hello.
Attached are the patches I think should go in, provided my observation
that p->subtty is always Qnil is correct.
Jan D.
[-- Attachment #2: emacsRC.diff --]
[-- Type: text/plain, Size: 3676 bytes --]
Index: src/process.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/process.c,v
retrieving revision 1.341.4.3
diff -c -r1.341.4.3 process.c
*** src/process.c 23 Oct 2002 17:40:15 -0000 1.341.4.3
--- src/process.c 15 Feb 2003 16:56:35 -0000
***************
*** 3571,3576 ****
--- 3571,3603 ----
return Qnil;
}
\f
+ /* Return the foreground process group for the tty/pty that
+ the process P uses. */
+ static int
+ emacs_get_tty_pgrp (p)
+ struct Lisp_Process *p;
+ {
+ int gid = -1;
+
+ #ifdef TIOCGPGRP
+ if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
+ {
+ int fd;
+ /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
+ master side. Try the slave side. */
+ fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
+
+ if (fd != -1)
+ {
+ ioctl (fd, TIOCGPGRP, &gid);
+ emacs_close (fd);
+ }
+ }
+ #endif /* defined (TIOCGPGRP ) */
+
+ return gid;
+ }
+
DEFUN ("process-running-child-p", Fprocess_running_child_p,
Sprocess_running_child_p, 0, 1, 0,
"Return t if PROCESS has given the terminal to a child.\n\
***************
*** 3581,3587 ****
{
/* Initialize in case ioctl doesn't exist or gives an error,
in a way that will cause returning t. */
! int gid = 0;
Lisp_Object proc;
struct Lisp_Process *p;
--- 3608,3614 ----
{
/* Initialize in case ioctl doesn't exist or gives an error,
in a way that will cause returning t. */
! int gid;
Lisp_Object proc;
struct Lisp_Process *p;
***************
*** 3595,3606 ****
error ("Process %s is not active",
XSTRING (p->name)->data);
! #ifdef TIOCGPGRP
! if (!NILP (p->subtty))
! ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
! else
! ioctl (XINT (p->infd), TIOCGPGRP, &gid);
! #endif /* defined (TIOCGPGRP ) */
if (gid == XFASTINT (p->pid))
return Qnil;
--- 3622,3628 ----
error ("Process %s is not active",
XSTRING (p->name)->data);
! gid = emacs_get_tty_pgrp (p);
if (gid == XFASTINT (p->pid))
return Qnil;
***************
*** 3747,3765 ****
But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
His patch indicates that if TIOCGPGRP returns an error, then
we should just assume that p->pid is also the process group id. */
- {
- int err;
! if (!NILP (p->subtty))
! err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
! else
! err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
#ifdef pfa
! if (err == -1)
! gid = - XFASTINT (p->pid);
#endif /* ! defined (pfa) */
! }
if (gid == -1)
no_pgrp = 1;
else
--- 3769,3782 ----
But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
His patch indicates that if TIOCGPGRP returns an error, then
we should just assume that p->pid is also the process group id. */
! gid = emacs_get_tty_pgrp (p);
#ifdef pfa
! if (gid == -1)
! gid = - XFASTINT (p->pid);
#endif /* ! defined (pfa) */
!
if (gid == -1)
no_pgrp = 1;
else
***************
*** 3821,3827 ****
/* gid may be a pid, or minus a pgrp's number */
#ifdef TIOCSIGSEND
if (!NILP (current_group))
! ioctl (XINT (p->infd), TIOCSIGSEND, signo);
else
{
gid = - XFASTINT (p->pid);
--- 3838,3847 ----
/* gid may be a pid, or minus a pgrp's number */
#ifdef TIOCSIGSEND
if (!NILP (current_group))
! {
! if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
! EMACS_KILLPG (-gid, signo);
! }
else
{
gid = - XFASTINT (p->pid);
[-- Attachment #3: emacsCVS.diff --]
[-- Type: text/plain, Size: 3894 bytes --]
Index: src/process.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/process.c,v
retrieving revision 1.399
diff -c -r1.399 process.c
*** src/process.c 10 Feb 2003 13:51:43 -0000 1.399
--- src/process.c 15 Feb 2003 16:57:10 -0000
***************
*** 5104,5109 ****
--- 5104,5136 ----
return Qnil;
}
\f
+ /* Return the foreground process group for the tty/pty that
+ the process P uses. */
+ static int
+ emacs_get_tty_pgrp (p)
+ struct Lisp_Process *p;
+ {
+ int gid = -1;
+
+ #ifdef TIOCGPGRP
+ if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
+ {
+ int fd;
+ /* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
+ master side. Try the slave side. */
+ fd = emacs_open (XSTRING (p->tty_name)->data, O_RDONLY, 0);
+
+ if (fd != -1)
+ {
+ ioctl (fd, TIOCGPGRP, &gid);
+ emacs_close (fd);
+ }
+ }
+ #endif /* defined (TIOCGPGRP ) */
+
+ return gid;
+ }
+
DEFUN ("process-running-child-p", Fprocess_running_child_p,
Sprocess_running_child_p, 0, 1, 0,
doc: /* Return t if PROCESS has given the terminal to a child.
***************
*** 5114,5120 ****
{
/* Initialize in case ioctl doesn't exist or gives an error,
in a way that will cause returning t. */
! int gid = 0;
Lisp_Object proc;
struct Lisp_Process *p;
--- 5141,5147 ----
{
/* Initialize in case ioctl doesn't exist or gives an error,
in a way that will cause returning t. */
! int gid;
Lisp_Object proc;
struct Lisp_Process *p;
***************
*** 5128,5139 ****
error ("Process %s is not active",
SDATA (p->name));
! #ifdef TIOCGPGRP
! if (!NILP (p->subtty))
! ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
! else
! ioctl (XINT (p->infd), TIOCGPGRP, &gid);
! #endif /* defined (TIOCGPGRP ) */
if (gid == XFASTINT (p->pid))
return Qnil;
--- 5155,5161 ----
error ("Process %s is not active",
SDATA (p->name));
! gid = emacs_get_tty_pgrp (p);
if (gid == XFASTINT (p->pid))
return Qnil;
***************
*** 5285,5303 ****
But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
His patch indicates that if TIOCGPGRP returns an error, then
we should just assume that p->pid is also the process group id. */
- {
- int err;
! if (!NILP (p->subtty))
! err = ioctl (XFASTINT (p->subtty), TIOCGPGRP, &gid);
! else
! err = ioctl (XINT (p->infd), TIOCGPGRP, &gid);
!
! if (err == -1)
! /* If we can't get the information, assume
! the shell owns the tty. */
! gid = XFASTINT (p->pid);
! }
/* It is not clear whether anything really can set GID to -1.
Perhaps on some system one of those ioctls can or could do so.
--- 5307,5319 ----
But, TIOCGPGRP does not work on E50 ;-P works fine on E60"
His patch indicates that if TIOCGPGRP returns an error, then
we should just assume that p->pid is also the process group id. */
! gid = emacs_get_tty_pgrp (p);
!
! if (gid == -1)
! /* If we can't get the information, assume
! the shell owns the tty. */
! gid = XFASTINT (p->pid);
/* It is not clear whether anything really can set GID to -1.
Perhaps on some system one of those ioctls can or could do so.
***************
*** 5359,5365 ****
/* gid may be a pid, or minus a pgrp's number */
#ifdef TIOCSIGSEND
if (!NILP (current_group))
! ioctl (XINT (p->infd), TIOCSIGSEND, signo);
else
{
gid = - XFASTINT (p->pid);
--- 5375,5384 ----
/* gid may be a pid, or minus a pgrp's number */
#ifdef TIOCSIGSEND
if (!NILP (current_group))
! {
! if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
! EMACS_KILLPG (gid, signo);
! }
else
{
gid = - XFASTINT (p->pid);
[-- Attachment #4: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel
next reply other threads:[~2003-02-15 21:59 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-15 21:59 Jan D. [this message]
-- strict thread matches above, loose matches on Subject: below --
2003-02-16 5:54 [angeloff@acm.org: Emacs bug with Solaris 9 (only)] Markus Rost
2003-02-15 12:52 Jan D.
2003-02-17 7:19 ` Richard Stallman
2003-02-17 13:21 ` Jan D.
2003-02-17 20:38 ` Richard Stallman
2003-01-23 20:01 Markus Rost
2003-01-23 8:01 Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200302152253.h1FMrw3B013807@stubby.bodenonline.com \
--to=jan.h.d@swipnet.se \
--cc=angeloff@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.