]> git.sur5r.net Git - freertos/blob - Demo/Common/ethernet/FreeTCPIP/apps/httpd/httpd-fs.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / Common / ethernet / FreeTCPIP / apps / httpd / httpd-fs.c
1 /*\r
2  * Copyright (c) 2001, 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 lwIP TCP/IP stack.\r
30  *\r
31  * Author: Adam Dunkels <adam@sics.se>\r
32  *\r
33  * $Id: httpd-fs.c,v 1.1 2006/06/07 09:13:08 adam Exp $\r
34  */\r
35 #include "httpd.h"\r
36 #include "httpd-fs.h"\r
37 #include "httpd-fsdata.h"\r
38 \r
39 #ifndef NULL\r
40 #define NULL    0\r
41 #endif /* NULL */\r
42 \r
43 #include "httpd-fsdata.c"\r
44 \r
45 #if HTTPD_FS_STATISTICS\r
46 static u16_t    count[HTTPD_FS_NUMFILES];\r
47 #endif /* HTTPD_FS_STATISTICS */\r
48 \r
49 /*-----------------------------------------------------------------------------------*/\r
50 static u8_t httpd_fs_strcmp( const char *str1, const char *str2 )\r
51 {\r
52         u8_t    i;\r
53         i = 0;\r
54 loop:\r
55         if( str2[i] == 0 || str1[i] == '\r' || str1[i] == '\n' )\r
56         {\r
57                 return 0;\r
58         }\r
59 \r
60         if( str1[i] != str2[i] )\r
61         {\r
62                 return 1;\r
63         }\r
64 \r
65         ++i;\r
66         goto loop;\r
67 }\r
68 \r
69 /*-----------------------------------------------------------------------------------*/\r
70 int httpd_fs_open( const char *name, struct httpd_fs_file *file )\r
71 {\r
72 #if HTTPD_FS_STATISTICS\r
73         u16_t                                                           i = 0;\r
74 #endif /* HTTPD_FS_STATISTICS */\r
75         struct httpd_fsdata_file_noconst        *f;\r
76 \r
77         for( f = ( struct httpd_fsdata_file_noconst * ) HTTPD_FS_ROOT; f != NULL; f = ( struct httpd_fsdata_file_noconst * ) f->next )\r
78         {\r
79                 if( httpd_fs_strcmp(name, f->name) == 0 )\r
80                 {\r
81                         file->data = f->data;\r
82                         file->len = f->len;\r
83 #if HTTPD_FS_STATISTICS\r
84                         ++count[i];\r
85 #endif /* HTTPD_FS_STATISTICS */\r
86                         return 1;\r
87                 }\r
88 \r
89 #if HTTPD_FS_STATISTICS\r
90                 ++i;\r
91 #endif /* HTTPD_FS_STATISTICS */\r
92         }\r
93 \r
94         return 0;\r
95 }\r
96 \r
97 /*-----------------------------------------------------------------------------------*/\r
98 void httpd_fs_init( void )\r
99 {\r
100 #if HTTPD_FS_STATISTICS\r
101         u16_t   i;\r
102         for( i = 0; i < HTTPD_FS_NUMFILES; i++ )\r
103         {\r
104                 count[i] = 0;\r
105         }\r
106 \r
107 #endif /* HTTPD_FS_STATISTICS */\r
108 }\r
109 \r
110 /*-----------------------------------------------------------------------------------*/\r
111 #if HTTPD_FS_STATISTICS\r
112 u16_t httpd_fs_count( char *name )\r
113 {\r
114         struct httpd_fsdata_file_noconst        *f;\r
115         u16_t                                                           i;\r
116 \r
117         i = 0;\r
118         for( f = ( struct httpd_fsdata_file_noconst * ) HTTPD_FS_ROOT; f != NULL; f = ( struct httpd_fsdata_file_noconst * ) f->next )\r
119         {\r
120                 if( httpd_fs_strcmp(name, f->name) == 0 )\r
121                 {\r
122                         return count[i];\r
123                 }\r
124 \r
125                 ++i;\r
126         }\r
127 \r
128         return 0;\r
129 }\r
130 \r
131 #endif /* HTTPD_FS_STATISTICS */\r
132 \r
133 /*-----------------------------------------------------------------------------------*/\r