BLOG | DOCUMENTATION | TRAC

Home --> Documentations --> PJLIB Reference

Example: Exception Handling

Below is sample program to demonstrate how to use exception handling.

1 /* $Id$ */
2 /*
3  * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  */
20 #include <pj/except.h>
21 #include <pj/rand.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 
33 static pj_exception_id_t NO_MEMORY, OTHER_EXCEPTION;
34 
35 static void randomly_throw_exception()
36 {
37  if (pj_rand() % 2)
38  PJ_THROW(OTHER_EXCEPTION);
39 }
40 
41 static void *my_malloc(size_t size)
42 {
43  void *ptr = malloc(size);
44  if (!ptr)
45  PJ_THROW(NO_MEMORY);
46  return ptr;
47 }
48 
49 static int test_exception()
50 {
52 
53  PJ_TRY {
54  void *data = my_malloc(200);
55  free(data);
56  randomly_throw_exception();
57  }
58  PJ_CATCH_ANY {
59  pj_exception_id_t x_id;
60 
61  x_id = PJ_GET_EXCEPTION();
62  printf("Caught exception %d (%s)\n",
63  x_id, pj_exception_id_name(x_id));
64  }
65  PJ_END
66  return 1;
67 }
68 
69 int main()
70 {
71  pj_status_t rc;
72 
73  // Error handling is omited for clarity.
74 
75  rc = pj_init();
76 
77  rc = pj_exception_id_alloc("No Memory", &NO_MEMORY);
78  rc = pj_exception_id_alloc("Other Exception", &OTHER_EXCEPTION);
79 
80  return test_exception();
81 }
82 
#define PJ_THROW(exception_id)
Definition: except.h:403
int pj_rand(void)
const char * pj_exception_id_name(pj_exception_id_t id)
int pj_exception_id_t
Definition: types.h:276
int pj_status_t
Definition: types.h:68
#define PJ_TRY
Definition: except.h:374
#define PJ_GET_EXCEPTION()
Definition: except.h:410
pj_status_t pj_exception_id_alloc(const char *name, pj_exception_id_t *id)
Exception Handling in C.
Random Number Generator.
#define PJ_USE_EXCEPTION
Definition: except.h:368
#define PJ_END
Definition: except.h:395
#define PJ_CATCH_ANY
Definition: except.h:389
pj_status_t pj_init(void)

 


PJLIB Open Source, high performance, small footprint, and very very portable framework
Copyright (C) 2006-2009 Teluu Inc.