From a42421a0832c7e51cef6f9c223e3f546d6313153 Mon Sep 17 00:00:00 2001 From: SuperNovaa41 Date: Mon, 24 Feb 2025 15:04:53 -0500 Subject: [PATCH] initial commit --- Makefile | 24 +++++++++++++ build/isbn-lookup | Bin 0 -> 37640 bytes build/src/curl.c.o | Bin 0 -> 26936 bytes build/src/main.c.o | Bin 0 -> 13416 bytes src/curl.c | 84 +++++++++++++++++++++++++++++++++++++++++++++ src/include/curl.h | 15 ++++++++ src/main.c | 16 +++++++++ 7 files changed, 139 insertions(+) create mode 100644 Makefile create mode 100755 build/isbn-lookup create mode 100644 build/src/curl.c.o create mode 100644 build/src/main.c.o create mode 100644 src/curl.c create mode 100644 src/include/curl.h create mode 100644 src/main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c1b4188 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +CC=gcc +CFLAGS= -c -g -Wall + +LDLIBS = -lcurl + +TARGET := isbn-lookup + +BUILD_DIR := ./build +SRC_DIRS := ./src + +SRCS := $(shell find $(SRC_DIRS) -name '*.c') + +OBJS := $(SRCS:%=$(BUILD_DIR)/%.o) + +$(BUILD_DIR)/$(TARGET): $(OBJS) + $(CC) $(OBJS) -o $@ $(LDLIBS) + +$(BUILD_DIR)/%.c.o: %.c + mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $< -o $@ + +.PHONY: clean +clean: + rm -rf $(BUILD_DIR) diff --git a/build/isbn-lookup b/build/isbn-lookup new file mode 100755 index 0000000000000000000000000000000000000000..9d675a7bf8b0b14beee64ab13e7aefdac055cefc GIT binary patch literal 37640 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 iRiyuAFmBL;8s(;vxUFpG~y7Wg}|Nj7 literal 0 HcmV?d00001 diff --git a/build/src/main.c.o b/build/src/main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3a8acfde879eef1f4fbfd8747ed2bbd1ea94c422 GIT binary patch literal 13416 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≤{ysu{3HWD!q>?6LCZBX!kugDh1#maS>G>oGaeB^K zfOsDG*^Kx$;N^(Z^V=iD>G_bc5zUSf2Zyk^SSZUQ=#`Kk9c&}!OT>(g^p_8t5Rr(n z5ej4lsa5uajPz~1jqEx&Bt*!c#mY!!K*HeIa6YN}4~veB<+E<3zvr;+(My8aH|T7c zCy0sR$Ffbw3dDRH_Fr`RN?)u)IXrfz4f}IZ9Q&4kHu&X7aKnVbF?^Va|6^vt)+ZrL z?{DhP4KDD1szP{E8N>dIl=NLZ)l-ABf$WOLTNk!S>cZoUq5A;Yw+V-3W3Oas0&WO6 z#(h{$eEx6i+p~3vPY8SVN|tE*niN2e+aJtwDWd}eT?7a_BgaU_xUhP1gm8m;G}{gH zSE?f;Wd6t+(fV}$d|39Q_7}i}RLZJ<{Y&dpFpbuy0CM_0g6^l(jK@EjHTqX+6qI*b8#RM`6mGf%(EqY~3HN-*YQj3(vtZ zSwC{7p!Mnc{itnH^DW%CCJ;w@EF)({T%W`w>LN?n^QW#fV@#pGtRx#Ny(T%iJ%3dH QN?)1knk@VJ7tjCy0AX=mBme*a literal 0 HcmV?d00001 diff --git a/src/curl.c b/src/curl.c new file mode 100644 index 0000000..9fd2860 --- /dev/null +++ b/src/curl.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include + +#include "include/curl.h" + +#define API_URL "https://openlibrary.org/search.json?q=" +#define API_URL_LEN 38 + +static void setup_api_link(const char* isbn, char** buf) +{ + size_t buffer_len; + + buffer_len = API_URL_LEN + strlen(isbn); + (*buf) = malloc(sizeof(char) * buffer_len); + + strncpy((*buf), API_URL, API_URL_LEN + 1); + strncpy((*buf)+ API_URL_LEN, isbn, strlen(isbn)); + (*buf)[buffer_len] = '\0'; + +} + +#undef API_URL +#undef API_URL_LEN + +static void init_get_response(get_response* buf) +{ + buf->len = 0; + buf->buf = malloc(buf->len + 1); + if (!(buf->buf)) { + perror("malloc"); + exit(EXIT_FAILURE); + } + buf->buf[0] = '\0'; +} + +void free_get_response(get_response* buf) +{ + free(buf->buf); +} + +static size_t curl_write_response(void* ptr, size_t size, size_t nmemb, get_response* buf) +{ + size_t new_len = buf->len + (size * nmemb); + buf->buf = realloc(buf->buf, new_len + 1); + if (!(buf->buf)) { + perror("realloc"); + exit(EXIT_FAILURE); + } + memcpy(buf->buf + buf->len, ptr, size * nmemb); + buf->buf[new_len] = '\0'; + buf->len = new_len; + return size * nmemb; +} + +CURLcode book_api_call(const char* isbn, get_response* buf) +{ + CURL* handler; + CURLcode result; + char* request_url; + + handler = curl_easy_init(); + if (!handler) { + perror("curl_easy_init"); + exit(EXIT_FAILURE); + } + + setup_api_link(isbn, &request_url); + init_get_response(buf); + + curl_easy_setopt(handler, CURLOPT_URL, request_url); + curl_easy_setopt(handler, CURLOPT_HTTPGET, 1L); + curl_easy_setopt(handler, CURLOPT_WRITEFUNCTION, curl_write_response); + curl_easy_setopt(handler, CURLOPT_WRITEDATA, buf); + + result = curl_easy_perform(handler); + + curl_easy_cleanup(handler); + + return result; +} + + diff --git a/src/include/curl.h b/src/include/curl.h new file mode 100644 index 0000000..b2fdbf5 --- /dev/null +++ b/src/include/curl.h @@ -0,0 +1,15 @@ +#include + +#ifndef CURL_H +#define CURL_H + +typedef struct { + char* buf; + size_t len; +} get_response; + +void free_get_response(get_response* buf); + +CURLcode book_api_call(const char* isbn, get_response* buf); + +#endif diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..3e18e60 --- /dev/null +++ b/src/main.c @@ -0,0 +1,16 @@ +#include + +#include "include/curl.h" + +int main(void) +{ + get_response resp; + + book_api_call("9780762437818", &resp); + + puts(resp.buf); + + free_get_response(&resp); + + return 0; +}