summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/todayplugins/stockticker/libstocks/csv.c2
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.c b/noncore/todayplugins/stockticker/libstocks/csv.c
index f45af52..6170bed 100644
--- a/noncore/todayplugins/stockticker/libstocks/csv.c
+++ b/noncore/todayplugins/stockticker/libstocks/csv.c
@@ -1,214 +1,216 @@
1/* libstocks - Library to get current stock quotes from Yahoo Finance 1/* libstocks - Library to get current stock quotes from Yahoo Finance
2 * 2 *
3 * Copyright (C) 2000 Eric Laeuffer 3 * Copyright (C) 2000 Eric Laeuffer
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public 15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the 16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA. 18 * Boston, MA 02111-1307, USA.
19 */ 19 */
20 20
21#define __CSV_C__ 21#define __CSV_C__
22#ifndef __UNIX__
22#define __UNIX__ 23#define __UNIX__
24#endif
23 25
24#include <string.h> 26#include <string.h>
25#include <stdlib.h> 27#include <stdlib.h>
26#include <stdio.h> 28#include <stdio.h>
27 29
28#ifdef __WINDOWS__ 30#ifdef __WINDOWS__
29#include <mbstring.h> 31#include <mbstring.h>
30#endif 32#endif
31 33
32#include "csv.h" 34#include "csv.h"
33#include "stocks.h" 35#include "stocks.h"
34#include "lists.h" 36#include "lists.h"
35 37
36#define DATE_LENGTH 7 /*YYMMDD*/ 38#define DATE_LENGTH 7 /*YYMMDD*/
37 39
38const char *months[12]= 40const char *months[12]=
39{ 41{
40 "Jan", 42 "Jan",
41 "Feb", 43 "Feb",
42 "Mar", 44 "Mar",
43 "Apr", 45 "Apr",
44 "May", 46 "May",
45 "Jun", 47 "Jun",
46 "Jul", 48 "Jul",
47 "Aug", 49 "Aug",
48 "Sep", 50 "Sep",
49 "Oct", 51 "Oct",
50 "Nov", 52 "Nov",
51 "Dec" 53 "Dec"
52}; 54};
53 55
54/*****************************************************************************/ 56/*****************************************************************************/
55/* Replacement of the strtok function. This one forgets "delim" when it is */ 57/* Replacement of the strtok function. This one forgets "delim" when it is */
56/* between two commas. */ 58/* between two commas. */
57/* Thanks to Julio Lucas who has told me the bug and has proposed me a patch */ 59/* Thanks to Julio Lucas who has told me the bug and has proposed me a patch */
58/*****************************************************************************/ 60/*****************************************************************************/
59char *csv_strtok(char *s, char *delim) 61char *csv_strtok(char *s, char *delim)
60{ 62{
61 static char *next=NULL; 63 static char *next=NULL;
62 char *temp, *first; 64 char *temp, *first;
63 int comma=0; 65 int comma=0;
64 66
65 if (s!=NULL) first=s; 67 if (s!=NULL) first=s;
66 else first=next; 68 else first=next;
67 69
68 temp=first; 70 temp=first;
69 if (*temp=='\0') return NULL; 71 if (*temp=='\0') return NULL;
70 72
71 while (*temp!='\0' && ((*temp!=*delim) || comma)) 73 while (*temp!='\0' && ((*temp!=*delim) || comma))
72 { 74 {
73 if (*temp=='"') comma ^= 1; 75 if (*temp=='"') comma ^= 1;
74 temp++; 76 temp++;
75 } 77 }
76 78
77 if (*temp=='\0') next=temp; 79 if (*temp=='\0') next=temp;
78 else 80 else
79 { 81 {
80 *temp='\0'; 82 *temp='\0';
81 next=temp+1; 83 next=temp+1;
82 } 84 }
83 85
84 return first; 86 return first;
85} 87}
86 88
87/*****************************************************************************/ 89/*****************************************************************************/
88/* Parses the csv file and return a list of stocks structure. */ 90/* Parses the csv file and return a list of stocks structure. */
89/* *csv points on the csv file in memory */ 91/* *csv points on the csv file in memory */
90/* count defines the country, because csv depends on the country */ 92/* count defines the country, because csv depends on the country */
91/*****************************************************************************/ 93/*****************************************************************************/
92stock *parse_csv_file(char *csv) 94stock *parse_csv_file(char *csv)
93{ 95{
94 char *line; 96 char *line;
95 char *end_line; 97 char *end_line;
96 98
97 char *ptr; 99 char *ptr;
98 100
99 char *date; 101 char *date;
100 char *time; 102 char *time;
101 char *name; 103 char *name;
102 char *symbol; 104 char *symbol;
103 105
104 stock *StockPtr=NULL; 106 stock *StockPtr=NULL;
105 stock *LastStockPtr=NULL; 107 stock *LastStockPtr=NULL;
106 108
107 /* Used to return the pointer to the list */ 109 /* Used to return the pointer to the list */
108 stock *FirstStockPtr=NULL; 110 stock *FirstStockPtr=NULL;
109 111
110 /* used to see if symbol is valid */ 112 /* used to see if symbol is valid */
111 int valid; 113 int valid;
112 char *test; 114 char *test;
113 115
114 line = csv; 116 line = csv;
115 end_line = csv; 117 end_line = csv;
116 118
117 while ((end_line = strstr(line, "\n"))) 119 while ((end_line = strstr(line, "\n")))
118 { 120 {
119 *end_line = 0; 121 *end_line = 0;
120 122
121 /* Check if symbol valid */ 123 /* Check if symbol valid */
122 /* if 1 "N/A" then ok because Indices have N/A for volume */ 124 /* if 1 "N/A" then ok because Indices have N/A for volume */
123 /* if 4 "N/A" then ok because Mutual funds have */ 125 /* if 4 "N/A" then ok because Mutual funds have */
124 /* if 5 "N/A" then ok because currencies have */ 126 /* if 5 "N/A" then ok because currencies have */
125 /* So if >5 then stock not valid */ 127 /* So if >5 then stock not valid */
126 128
127 test = line; 129 test = line;
128 valid = 0; 130 valid = 0;
129 while ( (test = strstr(test, "N/A")) ) 131 while ( (test = strstr(test, "N/A")) )
130 { 132 {
131 valid ++; 133 valid ++;
132 test = test +3; 134 test = test +3;
133 } 135 }
134 136
135 if (valid < 6) 137 if (valid < 6)
136 { 138 {
137 /* This Symbol is valid */ 139 /* This Symbol is valid */
138 140
139 StockPtr = malloc_stock(); 141 StockPtr = malloc_stock();
140 142
141 ptr = csv_strtok(line, ","); 143 ptr = csv_strtok(line, ",");
142 if (!ptr) return 0; 144 if (!ptr) return 0;
143 145
144 symbol = (char *)malloc(strlen(ptr)+1); 146 symbol = (char *)malloc(strlen(ptr)+1);
145 if (symbol==NULL) 147 if (symbol==NULL)
146 { 148 {
147 fprintf(stderr,"Memory allocating error (%s line %d)\n" 149 fprintf(stderr,"Memory allocating error (%s line %d)\n"
148 ,__FILE__, __LINE__); 150 ,__FILE__, __LINE__);
149 exit(1); 151 exit(1);
150 } 152 }
151 strcpy((char *)(symbol), ptr); 153 strcpy((char *)(symbol), ptr);
152 StockPtr->Symbol = symbol; 154 StockPtr->Symbol = symbol;
153 155
154 ptr = csv_strtok(NULL, ","); 156 ptr = csv_strtok(NULL, ",");
155 if (!ptr) return 0; 157 if (!ptr) return 0;
156 158
157 name = (char *)malloc(strlen(ptr)+1); 159 name = (char *)malloc(strlen(ptr)+1);
158 if (name==NULL) 160 if (name==NULL)
159 { 161 {
160 fprintf(stderr,"Memory allocating error (%s line %d)\n" 162 fprintf(stderr,"Memory allocating error (%s line %d)\n"
161 ,__FILE__, __LINE__); 163 ,__FILE__, __LINE__);
162 exit(1); 164 exit(1);
163 } 165 }
164 strcpy((char *)(name), ptr); 166 strcpy((char *)(name), ptr);
165 StockPtr->Name = name; 167 StockPtr->Name = name;
166 168
167 ptr = csv_strtok(NULL, ","); 169 ptr = csv_strtok(NULL, ",");
168 if (!ptr) return 0; 170 if (!ptr) return 0;
169 sscanf(ptr,"%f",&(StockPtr->CurrentPrice)); 171 sscanf(ptr,"%f",&(StockPtr->CurrentPrice));
170 172
171 ptr = csv_strtok(NULL, ","); 173 ptr = csv_strtok(NULL, ",");
172 if (!ptr) return 0; 174 if (!ptr) return 0;
173 175
174 date = (char *)malloc(strlen(ptr)+1); 176 date = (char *)malloc(strlen(ptr)+1);
175 if (date==NULL) 177 if (date==NULL)
176 { 178 {
177 fprintf(stderr,"Memory allocating error (%s line %d)\n" 179 fprintf(stderr,"Memory allocating error (%s line %d)\n"
178 ,__FILE__, __LINE__); 180 ,__FILE__, __LINE__);
179 exit(1); 181 exit(1);
180 } 182 }
181 strcpy((char *)(date), ptr); 183 strcpy((char *)(date), ptr);
182 StockPtr->Date = date; 184 StockPtr->Date = date;
183 185
184 ptr = csv_strtok(NULL, ","); 186 ptr = csv_strtok(NULL, ",");
185 if (!ptr) return 0; 187 if (!ptr) return 0;
186 188
187 time = (char *)malloc(strlen(ptr)+1); 189 time = (char *)malloc(strlen(ptr)+1);
188 if (time==NULL) 190 if (time==NULL)
189 { 191 {
190 fprintf(stderr,"Memory allocating error (%s line %d)\n" 192 fprintf(stderr,"Memory allocating error (%s line %d)\n"
191 ,__FILE__, __LINE__); 193 ,__FILE__, __LINE__);
192 exit(1); 194 exit(1);
193 } 195 }
194 strcpy((char *)(time), ptr); 196 strcpy((char *)(time), ptr);
195 StockPtr->Time = time; 197 StockPtr->Time = time;
196 198
197 ptr = csv_strtok(NULL, ","); 199 ptr = csv_strtok(NULL, ",");
198 if (!ptr) return 0; 200 if (!ptr) return 0;
199 sscanf(ptr,"%f",&(StockPtr->Variation)); 201 sscanf(ptr,"%f",&(StockPtr->Variation));
200 202
201 StockPtr->Pourcentage = 100 * StockPtr->Variation / 203 StockPtr->Pourcentage = 100 * StockPtr->Variation /
202 (StockPtr->CurrentPrice - StockPtr->Variation); 204 (StockPtr->CurrentPrice - StockPtr->Variation);
203 205
204 StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation; 206 StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation;
205 207
206 ptr = csv_strtok(NULL, ","); 208 ptr = csv_strtok(NULL, ",");
207 if (!ptr) return 0; 209 if (!ptr) return 0;
208 sscanf(ptr,"%f",&(StockPtr->OpenPrice)); 210 sscanf(ptr,"%f",&(StockPtr->OpenPrice));
209 211
210 ptr = csv_strtok(NULL, ","); 212 ptr = csv_strtok(NULL, ",");
211 if (!ptr) return 0; 213 if (!ptr) return 0;
212 sscanf(ptr,"%f",&(StockPtr->MaxPrice)); 214 sscanf(ptr,"%f",&(StockPtr->MaxPrice));
213 215
214 ptr = csv_strtok(NULL, ","); 216 ptr = csv_strtok(NULL, ",");
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c
index 3078746..2f38f8a 100644
--- a/noncore/todayplugins/stockticker/libstocks/http.c
+++ b/noncore/todayplugins/stockticker/libstocks/http.c
@@ -1,214 +1,216 @@
1/* libstocks - Library to get current stock quotes from Yahoo Finance 1/* libstocks - Library to get current stock quotes from Yahoo Finance
2 * 2 *
3 * Copyright (C) 2000 Eric Laeuffer 3 * Copyright (C) 2000 Eric Laeuffer
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public 15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the 16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA. 18 * Boston, MA 02111-1307, USA.
19 */ 19 */
20 20
21#define __HTTP_C__ 21#define __HTTP_C__
22#ifndef __UNIX__
22#define __UNIX__ 23#define __UNIX__
24#endif
23 25
24#ifdef __UNIX__ 26#ifdef __UNIX__
25#include <sys/socket.h> 27#include <sys/socket.h>
26#include <netinet/in.h> 28#include <netinet/in.h>
27#include <arpa/inet.h> 29#include <arpa/inet.h>
28#include <netdb.h> 30#include <netdb.h>
29#include <unistd.h> 31#include <unistd.h>
30#elif __WINDOWS__ 32#elif __WINDOWS__
31#include <winsock.h> 33#include <winsock.h>
32#include <mbstring.h> 34#include <mbstring.h>
33#endif 35#endif
34 36
35#include <sys/types.h> 37#include <sys/types.h>
36#include <ctype.h> 38#include <ctype.h>
37#include <string.h> 39#include <string.h>
38#include <stdlib.h> 40#include <stdlib.h>
39#include <stdio.h> 41#include <stdio.h>
40 42
41#include "http.h" 43#include "http.h"
42#include "stocks.h" 44#include "stocks.h"
43 45
44#define BUF_SIZE 1024 46#define BUF_SIZE 1024
45#define HEADER_MAXBUF 512 47#define HEADER_MAXBUF 512
46 48
47/* pointer to proxy server name or NULL */ 49/* pointer to proxy server name or NULL */
48char *http_proxy_server=NULL; 50char *http_proxy_server=NULL;
49/* proxy server port number or 0 */ 51/* proxy server port number or 0 */
50int http_proxy_port=0; 52int http_proxy_port=0;
51 53
52/*****************************************************************************/ 54/*****************************************************************************/
53/* Gets the file from http://http_server/http_file */ 55/* Gets the file from http://http_server/http_file */
54/* This function is used to get quotes csv file from yahoo. */ 56/* This function is used to get quotes csv file from yahoo. */
55/* It allocates memory for the file and defines *pdata (the pointer of datas)*/ 57/* It allocates memory for the file and defines *pdata (the pointer of datas)*/
56/*****************************************************************************/ 58/*****************************************************************************/
57libstocks_return_code http_get(char *http_file, char *http_server, char **pdata) 59libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
58{ 60{
59 struct hostent *host; /* structs needed by socket */ 61 struct hostent *host; /* structs needed by socket */
60 struct sockaddr_in server; 62 struct sockaddr_in server;
61 int s; /* socket descriptor */ 63 int s; /* socket descriptor */
62 char header[HEADER_MAXBUF]; /* request header */ 64 char header[HEADER_MAXBUF]; /* request header */
63 int hlg; /* header length */ 65 int hlg; /* header length */
64 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */ 66 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */
65 int r; /* number of bytes read by read function */ 67 int r; /* number of bytes read by read function */
66 char *data=NULL; /* http server response */ 68 char *data=NULL; /* http server response */
67 int data_lgr; /* http server response length */ 69 int data_lgr; /* http server response length */
68 char *temp; /* pointer used to split header and csv */ 70 char *temp; /* pointer used to split header and csv */
69 int error_code; /* error code returned by http server */ 71 int error_code; /* error code returned by http server */
70 char *csv_ptr; /* pointer to the csv content */ 72 char *csv_ptr; /* pointer to the csv content */
71 int header_founded; /* test if header is founded */ 73 int header_founded; /* test if header is founded */
72 74
73#ifdef DEBUG 75#ifdef DEBUG
74 printf("*http_get\n"); 76 printf("*http_get\n");
75#endif 77#endif
76 78
77 /* get host info by name :*/ 79 /* get host info by name :*/
78 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server))) 80 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server)))
79 { 81 {
80 memset((char *) &server,0, sizeof(server)); 82 memset((char *) &server,0, sizeof(server));
81 memmove((char *) &server.sin_addr, host->h_addr, host->h_length); 83 memmove((char *) &server.sin_addr, host->h_addr, host->h_length);
82 server.sin_family = host->h_addrtype; 84 server.sin_family = host->h_addrtype;
83 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 ); 85 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 );
84 86
85 } else 87 } else
86 { 88 {
87 89
88#ifdef DEBUG 90#ifdef DEBUG
89 printf(" gethostbyname : NOK\n"); 91 printf(" gethostbyname : NOK\n");
90#endif 92#endif
91 return ERRHOST; 93 return ERRHOST;
92 } 94 }
93 95
94 /* create socket */ 96 /* create socket */
95 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) 97 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
96 { 98 {
97 99
98#ifdef DEBUG 100#ifdef DEBUG
99 printf(" create socket : NOK\n"); 101 printf(" create socket : NOK\n");
100#endif 102#endif
101 return ERRSOCK; 103 return ERRSOCK;
102 } 104 }
103 105
104 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0); 106 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0);
105 107
106 /* connect to server */ 108 /* connect to server */
107 if (connect(s, &server, sizeof(server)) < 0) 109 if (connect(s, &server, sizeof(server)) < 0)
108 { 110 {
109#ifdef DEBUG 111#ifdef DEBUG
110 printf(" connect to server : NOK\n"); 112 printf(" connect to server : NOK\n");
111#endif 113#endif
112 114
113#ifdef __UNIX__ 115#ifdef __UNIX__
114 close(s); 116 close(s);
115#elif __WINDOWS__ 117#elif __WINDOWS__
116 closesocket(s); 118 closesocket(s);
117#endif 119#endif
118 return ERRCONN; 120 return ERRCONN;
119 } 121 }
120 122
121 /* create header */ 123 /* create header */
122 if (http_proxy_server) 124 if (http_proxy_server)
123 { 125 {
124 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012", 126 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012",
125 http_server, http_file); 127 http_server, http_file);
126 } 128 }
127 else 129 else
128 { 130 {
129 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file); 131 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file);
130 } 132 }
131 133
132 hlg=strlen(header); 134 hlg=strlen(header);
133 135
134 /* send header */ 136 /* send header */
135#ifdef __UNIX__ 137#ifdef __UNIX__
136 if (write(s,header,hlg)!=hlg) 138 if (write(s,header,hlg)!=hlg)
137#elif __WINDOWS__ 139#elif __WINDOWS__
138 if (send(s,header,hlg, 0)!=hlg) 140 if (send(s,header,hlg, 0)!=hlg)
139#endif 141#endif
140 { 142 {
141#ifdef DEBUG 143#ifdef DEBUG
142 printf(" send header : NOK\n"); 144 printf(" send header : NOK\n");
143#endif 145#endif
144 return ERRWHEA; 146 return ERRWHEA;
145 } 147 }
146 148
147 data_lgr = 0; 149 data_lgr = 0;
148 r=1; 150 r=1;
149 while(r) 151 while(r)
150 { 152 {
151 /* Clear Buffer */ 153 /* Clear Buffer */
152 memset(buf,0,BUF_SIZE+1); 154 memset(buf,0,BUF_SIZE+1);
153 155
154#ifdef __UNIX__ 156#ifdef __UNIX__
155 r=read(s,buf,BUF_SIZE); 157 r=read(s,buf,BUF_SIZE);
156#elif __WINDOWS__ 158#elif __WINDOWS__
157 r=recv(s,buf,BUF_SIZE,0); 159 r=recv(s,buf,BUF_SIZE,0);
158#endif 160#endif
159 161
160 if (r) 162 if (r)
161 { 163 {
162 if(!data_lgr) 164 if(!data_lgr)
163 { 165 {
164 if((data = malloc(r+1))==NULL) 166 if((data = malloc(r+1))==NULL)
165 { 167 {
166 fprintf(stderr,"Memory allocating error (%s line %d)\n" 168 fprintf(stderr,"Memory allocating error (%s line %d)\n"
167 ,__FILE__, __LINE__); 169 ,__FILE__, __LINE__);
168 exit(1); 170 exit(1);
169 } 171 }
170 172
171 memcpy(data,buf,r); 173 memcpy(data,buf,r);
172 data_lgr = r; 174 data_lgr = r;
173 data[r]=0; 175 data[r]=0;
174 } 176 }
175 else 177 else
176 { 178 {
177 if((temp = malloc(r+data_lgr+1))==NULL) 179 if((temp = malloc(r+data_lgr+1))==NULL)
178 { 180 {
179 fprintf(stderr,"Memory allocating error (%s line %d)\n" 181 fprintf(stderr,"Memory allocating error (%s line %d)\n"
180 ,__FILE__, __LINE__); 182 ,__FILE__, __LINE__);
181 exit(1); 183 exit(1);
182 } 184 }
183 memcpy(temp, data, data_lgr); 185 memcpy(temp, data, data_lgr);
184 memcpy(temp+data_lgr, buf, r); 186 memcpy(temp+data_lgr, buf, r);
185 temp[r+data_lgr]=0; 187 temp[r+data_lgr]=0;
186 data_lgr += r; 188 data_lgr += r;
187 free(data); 189 free(data);
188 data = temp; 190 data = temp;
189 } 191 }
190 } 192 }
191 } 193 }
192 194
193 /* close socket */ 195 /* close socket */
194#ifdef __UNIX__ 196#ifdef __UNIX__
195 close(s); 197 close(s);
196#elif __WINDOWS__ 198#elif __WINDOWS__
197 closesocket(s); 199 closesocket(s);
198#endif 200#endif
199 201
200#ifdef DEBUG 202#ifdef DEBUG
201 printf("%s\n", data); 203 printf("%s\n", data);
202#endif 204#endif
203 205
204 /* get headers to test status line */ 206 /* get headers to test status line */
205 /* and to split headers and content */ 207 /* and to split headers and content */
206 208
207 temp = data; 209 temp = data;
208 header_founded = 0; 210 header_founded = 0;
209 while( !header_founded ) 211 while( !header_founded )
210 { 212 {
211 if (*temp==0) return ERRRHEA; 213 if (*temp==0) return ERRRHEA;
212 214
213 if( *temp==0x0A ) 215 if( *temp==0x0A )
214 { 216 {