From owner-man-jp-reviewer@jp.FreeBSD.org Sun Apr  7 19:06:15 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g37A6Fu61955;
	Sun, 7 Apr 2002 19:06:15 +0900 (JST)
	(envelope-from owner-man-jp-reviewer@jp.FreeBSD.org)
Received: from asahi-net.or.jp (p04-dna09urasirohat.saitama.ocn.ne.jp [210.190.196.4])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g37A68v61945
	for <man-jp-reviewer@jp.FreeBSD.org>; Sun, 7 Apr 2002 19:06:10 +0900 (JST)
	(envelope-from ht5t-fry@asahi-net.or.jp)
Received: from localhost (localhost.tf.or.jp [127.0.0.1])
	by galois.tf.or.jp (8.10.0/3.7W-Teddy-00032101) with ESMTP id g37A1x601119;
	Sun, 7 Apr 2002 19:01:59 +0900 (JST)
To: man-jp-reviewer@jp.FreeBSD.org
From: Tetsuro Teddy FURUYA
 (=?iso-2022-jp?B?GyRCOEVDKxsoQiAbJEJFL086GyhC?=) <ht5t-fry@asahi-net.or.jp>
In-Reply-To: Your message of "Sun, 07 Apr 2002 13:29:30 +0900"
	<20020407132930V.ht5t-fry@galois.tf.or.jp>
References: <20020407132930V.ht5t-fry@galois.tf.or.jp>
X-Mailer: Mew version 1.93 on Emacs 19.28 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
	boundary="--Next_Part(Sun_Apr__7_19:01:23_2002_945)--"
Content-Transfer-Encoding: 7bit
Message-Id: <20020407190158Y.ht5t-fry@galois.tf.or.jp>
Date: Sun, 07 Apr 2002 19:01:58 +0900
X-Dispatcher: imput version 980905(IM100)
Lines: 116
Reply-To: man-jp-reviewer@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020405
X-Sequence: man-jp-reviewer 4052
Subject: [man-jp-reviewer 4052] Re: (man3) setjmp.3
Errors-To: owner-man-jp-reviewer@jp.FreeBSD.org
Sender: owner-man-jp-reviewer@jp.FreeBSD.org
X-Originator: ht5t-fry@asahi-net.or.jp

----Next_Part(Sun_Apr__7_19:01:23_2002_945)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


$B8EC+(B $B$G$9!#(B

setjmp longjmp $B$N$&$^$$Nc$,$J$+$J$+$G$-$J$$$N$G$9$,!"(B
$B8r8_$K(B longjmp, _longjmp $B$9$kNc$r=q$$$F$_$^$7$?!#(B

$B%*%Z%l!<%7%g%s$O0J2<$NDL$j$G$9!#(B

tfuruya@galois$ gcc -g -lc -o multi_setjmp3 multi_setjmp3.c
tfuruya@galois$ ./multi_setjmp3
After _setjmp usr1: 3
After setjmp No.1 usr1: 3, usr2: 2, val1: 0, val2: 0
After setjmp No.2 usr1: 3, usr2: 3, val1: 0, val2: 0
Here _longjmp
After _setjmp No.1 ret1: 1, usr1: 3
After _setjmp No.2 usr1: 3, val1: 0, val2: 0
Here, longjmp
After setjmp No.3 usr1: 3, usr2: 8496, val1: 0, val2: 1
Segmentation fault
tfuruya@galois$


---
Tetsuro Teddy FURUYA ($B8EC+(B $BE/O:(B) <ht5t-fry@asahi-net.or.jp>
=====

----Next_Part(Sun_Apr__7_19:01:23_2002_945)--
Content-Type: Text/Plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename=multi_setjmp3.c

/* Example 3 of the broken value of object
 * of automatic storage invocation duration in setjmp and longjmp call.
 *
 * The value of usr2 will be broken.
 *
 * Posted to <man-jp-reviewer@jp.FreeBSD.org>
 * by Tetsuro Furuya <ht5t-fry@asahi-net.or.jp>, April 7, 2002.
 *
 */

#include <stdio.h>
#include <setjmp.h>


int flg;
jmp_buf jbuf1;
int usr1;
int val1;
int ret1;
jmp_buf jbuf2;
int val2;


main()
{

  void pr_longjmp1();
  void pr_longjmp2();

  usr1 =3D 3;
  if((ret1=3D_setjmp(jbuf1)) =3D=3D 0) {
    flg =3D 1;
    printf("After _setjmp usr1: %d\n", usr1);
  }
  else {
    printf("After _setjmp No.1 ret1: %d, usr1: %d\n", ret1, usr1);
    printf("After _setjmp No.2 usr1: %d, val1: %d, val2: %d\n",
           usr1, val1, val2);
    printf("Here, longjmp\n");
    longjmp(jbuf2, val2);
    printf("After longjmp No.3 ret1: %d, usr1: %d\n", ret1, usr1);
    printf("After longjmp No.4 usr1: %d, val1: %d, val2: %d\n",
           usr1, val1, val2);
  }

  pr_longjmp1();
}

pr_longjmp1()
{

  int ret2;
  int usr2;
 =

  usr2=3D2;
  if ((val2 =3D setjmp( jbuf2 )) =3D=3D 0){
    printf("After setjmp No.1 usr1: %d, usr2: %d, val1: %d, val2: %d\n",=

	   usr1, usr2, val1, val2);
    /* first pass */
    usr2=3D3;
    printf("After setjmp No.2 usr1: %d, usr2: %d, val1: %d, val2: %d\n",=

	   usr1, usr2, val1, val2);
  }
  else {
    printf("After setjmp No.3 usr1: %d, usr2: %d, val1: %d, val2: %d\n",=

	   usr1, usr2, val1, val2); /* usr2 is broken. */
    return; /* This statement causes Segmentation fault. */
  }

  printf("Here _longjmp\n");
  _longjmp(jbuf1, val1);
  printf("After _longjmp\n");

}


----Next_Part(Sun_Apr__7_19:01:23_2002_945)----
