From 6c53811b9ba0b9db5bc20d5deef149387e9e26f6 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Tue, 26 Apr 2022 00:34:19 +0300 Subject: Make all libs/ be submodules --- libs/curl | 1 + libs/curl/curl.zig | 103 ----------------------------------------------------- 2 files changed, 1 insertion(+), 103 deletions(-) create mode 160000 libs/curl delete mode 100644 libs/curl/curl.zig (limited to 'libs/curl/curl.zig') diff --git a/libs/curl b/libs/curl new file mode 160000 index 0000000..7f920ec --- /dev/null +++ b/libs/curl @@ -0,0 +1 @@ +Subproject commit 7f920ec5be3e4b336303e93bb164c33f1e440228 diff --git a/libs/curl/curl.zig b/libs/curl/curl.zig deleted file mode 100644 index 4a26eed..0000000 --- a/libs/curl/curl.zig +++ /dev/null @@ -1,103 +0,0 @@ -pub const c = @cImport(@cInclude("curl/curl.h")); - -const std = @import("std"); - -const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; -const File = std.fs.File; - -pub fn easyDownload(allocator: Allocator, url: [:0]const u8) ![]u8 { - var handle = try Easy.init(); - defer handle.deinit(); - - var buf = ArrayList(u8).init(allocator); - defer buf.deinit(); - - try handle.setopt(.url, url.ptr); - try handle.setopt(.follow_location, true); - try handle.setopt(.write_function, easyDownloadCb); - try handle.setopt(.write_data, &buf); - - try handle.perform(); - - return buf.toOwnedSlice(); -} - -fn easyDownloadCb(ptr: [*]const u8, size: usize, nmemb: usize, buf: *ArrayList(u8)) usize { - std.debug.assert(size == 1); - - const slice = ptr[0..nmemb]; - buf.appendSlice(slice) catch |err| { - std.log.err("in easyDownloadCb: {}", .{err}); - return 0; - }; - - return nmemb; -} - -pub fn easyDownloadToFile(file: *File, url: [:0]const u8) !void { - var handle = try Easy.init(); - defer handle.deinit(); - - const writer = file.writer(); - - try handle.setopt(.url, url.ptr); - try handle.setopt(.follow_location, true); - try handle.setopt(.write_function, easyDownloadToFileCb); - try handle.setopt(.write_data, &writer); - - try handle.perform(); -} - -fn easyDownloadToFileCb(ptr: [*]const u8, size: usize, nmemb: usize, writer: *const File.Writer) usize { - std.debug.assert(size == 1); - - const slice = ptr[0..nmemb]; - writer.writeAll(slice) catch |err| { - std.log.err("in easyDownloadToFileCb: {}", .{err}); - return 0; - }; - - return nmemb; -} - -pub const Easy = struct { - raw: *c.CURL, - - pub const Option = enum(c.CURLoption) { - follow_location = c.CURLOPT_FOLLOWLOCATION, - url = c.CURLOPT_URL, - write_data = c.CURLOPT_WRITEDATA, - write_function = c.CURLOPT_WRITEFUNCTION, - }; - - pub fn init() !Easy { - if (c.curl_easy_init()) |raw| { - return Easy{ .raw = raw }; - } else { - return error.CurlError; - } - } - - pub fn deinit(self: *Easy) void { - c.curl_easy_cleanup(self.raw); - self.* = undefined; - } - - pub fn perform(self: *Easy) !void { - const errc = c.curl_easy_perform(self.raw); - if (errc != c.CURLE_OK) { - std.log.err("Curl: {s}", .{c.curl_easy_strerror(errc)}); - return error.CurlError; - } - } - - pub fn setopt(self: *Easy, option: Option, param: anytype) !void { - const option_raw = @enumToInt(option); - const errc = c.curl_easy_setopt(self.raw, option_raw, param); - if (errc != c.CURLE_OK) { - std.log.err("Curl: {s}", .{c.curl_easy_strerror(errc)}); - return error.CurlError; - } - } -}; -- cgit v1.2.3