]> git.sur5r.net Git - freertos/blob - Demo/Common/ethernet/FreeRTOS-uIP/lc-addrlabels.h
Added modified uIP code.
[freertos] / Demo / Common / ethernet / FreeRTOS-uIP / lc-addrlabels.h
1 /*\r
2  * Copyright (c) 2004-2005, Swedish Institute of Computer Science.\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  * 1. Redistributions of source code must retain the above copyright\r
9  *    notice, this list of conditions and the following disclaimer.\r
10  * 2. Redistributions in binary form must reproduce the above copyright\r
11  *    notice, this list of conditions and the following disclaimer in the\r
12  *    documentation and/or other materials provided with the distribution.\r
13  * 3. Neither the name of the Institute nor the names of its contributors\r
14  *    may be used to endorse or promote products derived from this software\r
15  *    without specific prior written permission.\r
16  *\r
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
27  * SUCH DAMAGE.\r
28  *\r
29  * This file is part of the uIP TCP/IP stack\r
30  *\r
31  * Author: Adam Dunkels <adam@sics.se>\r
32  *\r
33  * $Id: lc-addrlabels.h,v 1.3 2006/06/12 08:00:30 adam Exp $\r
34  */\r
35 \r
36 /**\r
37  * \addtogroup lc\r
38  * @{\r
39  */\r
40 \r
41 /**\r
42  * \file\r
43  * Implementation of local continuations based on the "Labels as\r
44  * values" feature of gcc\r
45  * \author\r
46  * Adam Dunkels <adam@sics.se>\r
47  *\r
48  * This implementation of local continuations is based on a special\r
49  * feature of the GCC C compiler called "labels as values". This\r
50  * feature allows assigning pointers with the address of the code\r
51  * corresponding to a particular C label.\r
52  *\r
53  * For more information, see the GCC documentation:\r
54  * http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html\r
55  *\r
56  * Thanks to dividuum for finding the nice local scope label\r
57  * implementation.\r
58  */\r
59 \r
60 #ifndef __LC_ADDRLABELS_H__\r
61 #define __LC_ADDRLABELS_H__\r
62 \r
63 /** \hideinitializer */\r
64 typedef void * lc_t;\r
65 \r
66 #define LC_INIT(s) s = NULL\r
67 \r
68 \r
69 #define LC_RESUME(s)                            \\r
70   do {                                          \\r
71     if(s != NULL) {                             \\r
72       goto *s;                                  \\r
73     }                                           \\r
74   } while(0)\r
75 \r
76 #define LC_SET(s)                               \\r
77   do { ({ __label__ resume; resume: (s) = &&resume; }); }while(0)\r
78 \r
79 #define LC_END(s)\r
80 \r
81 #endif /* __LC_ADDRLABELS_H__ */\r
82 \r
83 /**  @} */\r