~ubuntu-branches/ubuntu/raring/avr-libc/raring-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/stdlib/setjmp-4.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.1.7 upstream) (4.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080810095916-wwyigh3vt0e9s7ud
Tags: 1:1.6.2.cvs20080610-2
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test of setjmp()/longjmp() functions: frame pointer restoring.
 
2
   $Id: setjmp-4.c,v 1.1.2.2 2008/03/24 11:29:55 dmix Exp $     */
 
3
 
 
4
#include <setjmp.h>
 
5
#include <stdlib.h>
 
6
#include <string.h>
 
7
 
 
8
jmp_buf env;
 
9
 
 
10
/* foo_jmp() use stack. longjmp must restore frame pointer from env.    */
 
11
void foo_jmp (const char *p)
 
12
{
 
13
    char s[16];
 
14
    strcpy (s, p);
 
15
    s[0] += 1;
 
16
    longjmp (env, strtol (s, 0, 0));
 
17
}
 
18
 
 
19
/* foo() use stack. If frame pointer would be scratch, return value
 
20
   (or all program) would be another.   */
 
21
int foo (char *p)
 
22
{
 
23
    volatile char s[16];
 
24
    strcpy ((char *)s, p);
 
25
    switch (setjmp (env)) {
 
26
        case 0:     break;
 
27
        case 2:     return strtol ((const char *)s, 0, 0);
 
28
        default:    exit (__LINE__);
 
29
    }
 
30
    foo_jmp ("1");
 
31
    exit (__LINE__);
 
32
}
 
33
 
 
34
int main ()
 
35
{
 
36
    if (foo ("1234") != 1234)
 
37
        exit (__LINE__);
 
38
    if (foo ("4321") != 4321)
 
39
        exit (__LINE__);
 
40
    return 0;
 
41
}