all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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

             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.