refactor for modularity
This commit is contained in:
parent
b4e63cfecf
commit
09af0b7366
14
Makefile
14
Makefile
@ -1,6 +1,6 @@
|
|||||||
# Define the compiler and flags
|
# Define the compiler and flags
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -Wall -Wextra -Werror
|
CFLAGS = -Wall -Wextra -std=c99
|
||||||
|
|
||||||
# Define the target executable and the source files
|
# Define the target executable and the source files
|
||||||
TARGET = caur
|
TARGET = caur
|
||||||
@ -12,16 +12,12 @@ all: $(TARGET)
|
|||||||
|
|
||||||
# Link the object files into the target executable
|
# Link the object files into the target executable
|
||||||
$(TARGET): $(OBJS)
|
$(TARGET): $(OBJS)
|
||||||
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
|
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) -lcurl
|
||||||
|
|
||||||
# Compile the .c files into .o files
|
# Compile the .c files into .o files
|
||||||
%.o: %.c
|
src/%.o: src/%.c
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
# Clean up the build artifacts
|
# Clean up the build artifacts
|
||||||
clean:
|
clean:
|
||||||
rm -f $(TARGET) $(OBJS)
|
rm -f $(TARGET) $(OBJS)
|
||||||
|
|
||||||
# Run the program
|
|
||||||
run: $(TARGET)
|
|
||||||
./$(TARGET)
|
|
||||||
|
BIN
download.o
Normal file
BIN
download.o
Normal file
Binary file not shown.
16
src/caur.h
Normal file
16
src/caur.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef CAUR_H
|
||||||
|
#define CAUR_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
// Function to write data to file
|
||||||
|
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream);
|
||||||
|
|
||||||
|
// Function to download a package from the AUR
|
||||||
|
int download_package(const char *package_name);
|
||||||
|
|
||||||
|
// Function to perform a system upgrade
|
||||||
|
int perform_system_upgrade();
|
||||||
|
|
||||||
|
#endif // CAUR_H
|
47
src/download.c
Normal file
47
src/download.c
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include "caur.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define AUR_PACKAGE_URL "https://aur.archlinux.org/cgit/aur.git/snapshot/"
|
||||||
|
#define AUR_PACKAGE_URL_END ".tar.gz"
|
||||||
|
|
||||||
|
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
|
||||||
|
size_t written = fwrite(ptr, size, nmemb, stream);
|
||||||
|
return written;
|
||||||
|
}
|
||||||
|
|
||||||
|
int download_package(const char *package_name) {
|
||||||
|
CURL *curl;
|
||||||
|
FILE *fp;
|
||||||
|
CURLcode res;
|
||||||
|
char url[256];
|
||||||
|
char outfilename[256];
|
||||||
|
|
||||||
|
snprintf(url, sizeof(url), "%s%s%s", AUR_PACKAGE_URL, package_name, AUR_PACKAGE_URL_END);
|
||||||
|
snprintf(outfilename, sizeof(outfilename), "%s%s", package_name, AUR_PACKAGE_URL_END);
|
||||||
|
|
||||||
|
curl = curl_easy_init();
|
||||||
|
if (curl) {
|
||||||
|
fp = fopen(outfilename, "wb");
|
||||||
|
if (fp == NULL) {
|
||||||
|
fprintf(stderr, "Failed to open file %s\n", outfilename);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
||||||
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (res != CURLE_OK) {
|
||||||
|
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Failed to init curl\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
BIN
src/download.o
Normal file
BIN
src/download.o
Normal file
Binary file not shown.
72
src/main.c
72
src/main.c
@ -1,5 +1,7 @@
|
|||||||
// Version: 0.1
|
// Version: 0.1
|
||||||
// caur - a simple command line utility for managing aur packages written in C hence the name lol
|
// date created 8-31-24
|
||||||
|
|
||||||
|
#include "caur.h"
|
||||||
|
|
||||||
#include <stdio.h> // For standard input/output operations
|
#include <stdio.h> // For standard input/output operations
|
||||||
#include <stdlib.h> // For memory allocation, process control, and conversions
|
#include <stdlib.h> // For memory allocation, process control, and conversions
|
||||||
@ -9,75 +11,11 @@
|
|||||||
// #include <unistd.h> // For access to POSIX operating system API, useful for things like file operations and process management
|
// #include <unistd.h> // For access to POSIX operating system API, useful for things like file operations and process management
|
||||||
// #include <json-c/json.h> // Parsing packing information from the AUR packages
|
// #include <json-c/json.h> // Parsing packing information from the AUR packages
|
||||||
|
|
||||||
// #define AUR_URL "https://aur.archlinux.org/rpc/?v=5&type=info&arg[]="
|
|
||||||
// #define AUR_SEARCH_URL "https://aur.archlinux.org/rpc/?v=5&type=search&arg="
|
|
||||||
#define AUR_PACKAGE_URL "https://aur.archlinux.org/cgit/aur.git/snapshot/"
|
|
||||||
#define AUR_PACKAGE_URL_END ".tar.gz"
|
|
||||||
|
|
||||||
// Function to write data to file
|
|
||||||
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
|
|
||||||
size_t written = fwrite(ptr, size, nmemb, stream);
|
|
||||||
return written;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to download a package from the AUR
|
|
||||||
int download_package(const char *package_name) {
|
|
||||||
CURL *curl;
|
|
||||||
FILE *fp;
|
|
||||||
CURLcode res;
|
|
||||||
char url[256];
|
|
||||||
char outfilename[256];
|
|
||||||
|
|
||||||
// Construct the URL and output the file name
|
|
||||||
snprintf(url, sizeof(url), "%s%s%s", AUR_PACKAGE_URL, package_name, AUR_PACKAGE_URL_END);
|
|
||||||
snprintf(outfilename, sizeof(outfilename), "%s%s", package_name, AUR_PACKAGE_URL_END);
|
|
||||||
|
|
||||||
curl = curl_easy_init();
|
|
||||||
if (curl) {
|
|
||||||
fp = fopen(outfilename, "wb");
|
|
||||||
if (fp == NULL) {
|
|
||||||
fprintf(stderr, "Failed to open file %s\n", outfilename);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
|
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
|
|
||||||
res = curl_easy_perform(curl);
|
|
||||||
curl_easy_cleanup(curl);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if (res != CURLE_OK) {
|
|
||||||
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "Failed to init curl\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// Check if the user provided a package name as an argument, otherwise, run the system upgrade command
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
printf("Performing system upgrade...\n");
|
printf("Performing system upgrade...\n");
|
||||||
|
return perform_system_upgrade();
|
||||||
// System upgrade command
|
|
||||||
int result = system("sudo pacman -Syu");
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
fprintf(stderr, "Failed to execute system upgrade\n");
|
|
||||||
return 1;
|
|
||||||
} else if (WIFEXITED(result) && WEXITSTATUS(result) != 0) {
|
|
||||||
fprintf(stderr, "System upgrade failed with exit status %d.\n", WEXITSTATUS(result));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("System upgrade completed successfully.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The package name is the first argument after the program name
|
// The package name is the first argument after the program name
|
||||||
|
BIN
src/main.o
Normal file
BIN
src/main.o
Normal file
Binary file not shown.
19
src/upgrade.c
Normal file
19
src/upgrade.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include "caur.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
int perform_system_upgrade() {
|
||||||
|
int result = system("sudo pacman -Syu");
|
||||||
|
|
||||||
|
if (result == -1) {
|
||||||
|
fprintf(stderr, "Failed to execute system upgrade\n");
|
||||||
|
return 1;
|
||||||
|
} else if (WIFEXITED(result) && WEXITSTATUS(result) != 0) {
|
||||||
|
fprintf(stderr, "System upgrade failed with exit status %d.\n", WEXITSTATUS(result));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("System upgrade completed successfully.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
BIN
src/upgrade.o
Normal file
BIN
src/upgrade.o
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user