2 * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
4 * Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
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.
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.
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
26 #include <sys/types.h>
34 #define access(a,b) _access(a,b)
35 #define close(a) closesocket(a)
37 char *dirname ( char * dir
)
39 char *tmp
= dir
+ strlen(dir
) - 1;
40 while ( tmp
!= dir
&& *tmp
!= '\\' )
49 #include <sys/types.h>
56 static int download( const char *hostname
, const char *uri
, const char *fn
, int sendhostname
)
62 if ( access ( fn
, F_OK
) == 0 )
64 /* File exists: return */
69 char *tmp
= g_strdup ( fn
);
71 mkdir( dirname ( dirname ( tmp
) ) );
72 g_free ( tmp
); tmp
= g_strdup ( fn
);
73 mkdir( dirname ( tmp
) );
75 mkdir( dirname ( dirname ( tmp
) ), 0777 );
76 g_free ( tmp
); tmp
= g_strdup ( fn
);
77 mkdir( dirname ( tmp
), 0777 );
81 if ( ! (f
= fopen ( fn
, "w+b" )) ) /* immediately open file so other threads won't -- prevents race condition */
85 /* Call the backend function */
86 ret
= http_download_get_url ( hostname
, uri
, f
, 0, sendhostname
);
88 if (ret
== -1 || ret
== 1 || ret
== -2)
99 /* success = 0, -1 = couldn't connect, -2 HTTP error, -3 file exists, -4 couldn't write to file... */
100 /* uri: like "/uri.html?whatever" */
101 /* only reason for the "wrapper" is so we can do redirects. */
102 int a_http_download_get_url ( const char *hostname
, const char *uri
, const char *fn
)
104 return download ( hostname
, uri
, fn
, 1 );
107 int a_http_download_get_url_nohostname ( const char *hostname
, const char *uri
, const char *fn
)
109 return download ( hostname
, uri
, fn
, 0 );