53 lines
1.1 KiB
Factor
53 lines
1.1 KiB
Factor
! Copyright (C) 2014 John Benediktsson
|
|
! See http://factorcode.org/license.txt for BSD license
|
|
|
|
USING: alien alien.c-types alien.data alien.destructors
|
|
alien.syntax command-line curl.ffi destructors io
|
|
io.encodings.string io.encodings.utf8 io.streams.c kernel math
|
|
namespaces present sequences ;
|
|
|
|
IN: curl
|
|
|
|
<PRIVATE
|
|
|
|
DESTRUCTOR: curl_easy_cleanup
|
|
|
|
DESTRUCTOR: fclose
|
|
|
|
: check-code ( code -- )
|
|
CURLE_OK assert= ;
|
|
|
|
: curl-init ( -- CURL )
|
|
curl_easy_init &curl_easy_cleanup ;
|
|
|
|
: curl-set-opt ( CURL key value -- )
|
|
curl_easy_setopt check-code ;
|
|
|
|
: curl-set-url ( CURL url -- )
|
|
CURLOPT_URL swap present curl-set-opt ;
|
|
|
|
: curl-set-file ( CURL path -- )
|
|
CURLOPT_FILE swap "wb" fopen &fclose curl-set-opt ;
|
|
|
|
: curl-perform ( CURL -- )
|
|
curl_easy_perform check-code ;
|
|
|
|
PRIVATE>
|
|
|
|
: curl-download-to ( url path -- )
|
|
[
|
|
curl-init
|
|
[ swap curl-set-file ]
|
|
[ swap curl-set-url ]
|
|
[ curl-perform ] tri
|
|
] with-destructors ;
|
|
|
|
: curl-main ( -- )
|
|
command-line get [
|
|
curl-init
|
|
[ swap curl-set-url ]
|
|
[ curl-perform ] bi
|
|
] each ;
|
|
|
|
MAIN: curl-main
|