(linenum→info "unix/slp.c:2238")

glibc/2.7/assert/test-assert.c

    1: /* Test assert().
    2:  *
    3:  * This is hairier than you'd think, involving games with
    4:  * stdio and signals.
    5:  *
    6:  */
    7: 
    8: #include <signal.h>
    9: #include <stdlib.h>
   10: #include <stdio.h>
   11: #include <string.h>
   12: #include <setjmp.h>
   13: 
   14: jmp_buf rec;
   15: char buf[160];
   16: 
   17: static void
   18: sigabrt (int unused)
   19: {
   20:   longjmp (rec, 1);  /* recover control */
   21: }
   22: 
   23: #undef NDEBUG
   24: #include <assert.h>
   25: static void
   26: assert1 (void)
   27: {
   28:   assert (1 == 2);
   29: }
   30: 
   31: static void
   32: assert2 (void)
   33: {
   34:   assert (1 == 1);
   35: }
   36: 
   37: 
   38: #define NDEBUG
   39: #include <assert.h>
   40: static void
   41: assert3 (void)
   42: {
   43:   assert (2 == 3);
   44: }
   45: 
   46: int
   47: main (void)
   48: {
   49: 
   50:   volatile int failed = 1;
   51: 
   52:   fclose (stderr);
   53:   stderr = tmpfile ();
   54:   if(!stderr)
   55:     abort ();
   56: 
   57:   signal (SIGABRT, sigabrt);
   58: 
   59:   if (!setjmp (rec))
   60:     assert1 ();
   61:   else
   62:     failed = 0;  /* should happen */
   63: 
   64:   if (!setjmp (rec))
   65:     assert2 ();
   66:   else
   67:     failed = 1; /* should not happen */
   68: 
   69:   if (!setjmp (rec))
   70:     assert3 ();
   71:   else
   72:     failed = 1; /* should not happen */
   73: 
   74:   rewind (stderr);
   75:   fgets (buf, 160, stderr);
   76:   if (!strstr (buf, "1 == 2"))
   77:     failed = 1;
   78: 
   79:   fgets (buf, 160, stderr);
   80:   if (strstr (buf, "1 == 1"))
   81:     failed = 1;
   82: 
   83:   fgets (buf, 160, stderr);
   84:   if (strstr (buf, "2 == 3"))
   85:     failed = 1;
   86: 
   87:   return failed;
   88: }
Syntax (Markdown)