summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorTyler Murphy <tylerm@tylerm.dev>2023-05-04 16:10:37 -0400
committerTyler Murphy <tylerm@tylerm.dev>2023-05-04 16:10:37 -0400
commitb1364be7e271c5a080e29efcda209a190a82d6d9 (patch)
treefc64d1546e59b5ed1c2c204612b6181bc401c27f /src/util
parentgrep (diff)
downloadlazysphere-b1364be7e271c5a080e29efcda209a190a82d6d9.tar.gz
lazysphere-b1364be7e271c5a080e29efcda209a190a82d6d9.tar.bz2
lazysphere-b1364be7e271c5a080e29efcda209a190a82d6d9.zip
ansii c
Diffstat (limited to '')
-rw-r--r--src/util/regex.c8
-rw-r--r--src/util/shared.c85
-rw-r--r--src/util/shared.h17
-rw-r--r--src/util/stack.c11
-rw-r--r--src/util/stack.h18
5 files changed, 98 insertions, 41 deletions
diff --git a/src/util/regex.c b/src/util/regex.c
index 58b1f54..0e0dc52 100644
--- a/src/util/regex.c
+++ b/src/util/regex.c
@@ -39,7 +39,7 @@
#define MAX_CHAR_CLASS_LEN 40 /* Max length of character-class buffer in. */
-enum { UNUSED, DOT, BEGIN, END, QUESTIONMARK, STAR, PLUS, CHAR, CHAR_CLASS, INV_CHAR_CLASS, DIGIT, NOT_DIGIT, ALPHA, NOT_ALPHA, WHITESPACE, NOT_WHITESPACE, /* BRANCH */ };
+enum { UNUSED, DOT, BEGIN, END, QUESTIONMARK, STAR, PLUS, CHAR, CHAR_CLASS, INV_CHAR_CLASS, DIGIT, NOT_DIGIT, ALPHA, NOT_ALPHA, WHITESPACE, NOT_WHITESPACE};
typedef struct regex_t
{
@@ -199,7 +199,7 @@ re_t re_compile(const char* pattern)
{
if (ccl_bufidx >= MAX_CHAR_CLASS_LEN - 1)
{
- //fputs("exceeded internal buffer!\n", stderr);
+ /* fputs("exceeded internal buffer!\n", stderr); */
return 0;
}
if (pattern[i+1] == 0) /* incomplete pattern, missing non-zero char after '\\' */
@@ -210,7 +210,7 @@ re_t re_compile(const char* pattern)
}
else if (ccl_bufidx >= MAX_CHAR_CLASS_LEN)
{
- //fputs("exceeded internal buffer!\n", stderr);
+ /* fputs("exceeded internal buffer!\n", stderr); */
return 0;
}
ccl_buf[ccl_bufidx++] = pattern[i];
@@ -218,7 +218,7 @@ re_t re_compile(const char* pattern)
if (ccl_bufidx >= MAX_CHAR_CLASS_LEN)
{
/* Catches cases such as [00000000000000000000000000000000000000][ */
- //fputs("exceeded internal buffer!\n", stderr);
+ /* fputs("exceeded internal buffer!\n", stderr); */
return 0;
}
/* Null-terminate string end */
diff --git a/src/util/shared.c b/src/util/shared.c
index 5e08b8d..2e0c98a 100644
--- a/src/util/shared.c
+++ b/src/util/shared.c
@@ -43,27 +43,33 @@ void output(const char *format, ...) {
FILE* get_file_s(const char* path, const char* type) {
struct stat s;
+ FILE* file;
+
if (streql("-", path) && type[0] == 'r') {
clearerr(stdin);
fflush(stdin);
return stdin;
}
+
if (lstat(path, &s) < 0) {
if (type[0] != 'r') goto read;
error_s("failed to read %s: %s", path, strerror(errno));
return NULL;
}
+
if (S_ISDIR(s.st_mode)) {
error_s("%s is a directory", path);
return NULL;
}
- FILE* file;
read:
+
file = fopen(path, type);
+
if (file == NULL) {
error_s("failed to %s file %s: %s", type[0] == 'r' ? "read" : "write", path, strerror(errno));
}
+
return file;
}
@@ -102,7 +108,8 @@ long int get_blkm(const char* text) {
default:
error("invalid bkm type %c", *end);
}
- // shouldnt get here anyways
+
+ /* shouldnt get here anyways */
return 0;
}
@@ -118,8 +125,10 @@ mode_t get_mode(const char* next) {
}
bool streql(const char* a, const char* b) {
- if (*a != *b) return false;
int n = 0;
+
+ if (*a != *b) return false;
+
while (true) {
if (*(a+n) != *(b+n)) return false;
if (*(a+n) == '\0') return true;
@@ -133,25 +142,33 @@ bool prefix(const char* pre, const char* str) {
static char fs_types[5] = {'K','M','G','T','P'};
void print_file_size(size_t bytes, char buf[5]) {
- int index = 0;
- float next = bytes;
+ int index, n;
+ float next;
+
+ index = 0;
+ next = bytes;
+
while (true) {
if (next < 1000) {
break;
}
+
if (index == 5) {
printf("999P");
return;
- };
+ }
+
next /= 1024;
index++;
}
- int n = snprintf(buf, 4, "%u", (int)(next+.5));
+ n = snprintf(buf, 4, "%u", (int)(next+.5));
+
if (index > 0) {
buf[n] = (fs_types[index - 1]);
n++;
}
+
buf[n] = '\0';
}
@@ -159,8 +176,10 @@ static char* months[12] =
{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
void print_date_time(time_t mills, char buf[13]) {
struct tm* info;
+ int n;
+
info = localtime(&mills);
- int n = snprintf(buf, 5, "%s ", months[info->tm_mon]);
+ n = snprintf(buf, 5, "%s ", months[info->tm_mon]);
if (info->tm_mday < 10) {
buf[n] = ' ';
@@ -203,35 +222,45 @@ void global_help(void (*help)(void)) {
}
void parse_help(int argc, char** argv, void (*help)(void)) {
+ int i;
+
if (argc < 1) return;
- for (int i = 0; i < argc; i++) {
+
+ for (i = 0; i < argc; i++) {
if (!prefix("-", argv[i]) || streql("-", argv[i])) break;
if (help != NULL && streql("--help", argv[i])) global_help(help);
}
}
int parse_args(int argc, char** argv, void (*help)(void), int (*short_arg)(char, char*), int (*long_arg)(char*, char*)) {
+ int start, i, current;
+ char* next_arg;
+
if (argc < 1) return 0;
- int start = 0;
- for (int i = 0; i < argc; i++) {
+ start = 0;
+ for (i = 0; i < argc; i++) {
+
if (!prefix("-", argv[i]) || streql("-", argv[i])) break;
if (help != NULL && streql("--help", argv[i])) global_help(help);
- char* next_arg;
if (i + 1 == argc) {
next_arg = NULL;
} else {
next_arg = argv[i+1];
}
- int current = i;
+ current = i;
if (prefix("--", argv[i])) {
+ int r;
+
if (long_arg == NULL) {
goto exit;
}
- int r = long_arg(argv[current], next_arg);
+
+ r = long_arg(argv[current], next_arg);
+
if (r == ARG_USED) {
i++;
start++;
@@ -239,13 +268,20 @@ int parse_args(int argc, char** argv, void (*help)(void), int (*short_arg)(char,
goto exit;
} else if (r == ARG_INVALID) {
error("invalid argument %s", argv[current]);
+
}
} else {
+ size_t j;
+ int r;
+
if (short_arg == NULL) {
goto exit;
}
- for (size_t j = 1; j < strlen(argv[current]); j++) {
- int r = short_arg(argv[current][j], next_arg);
+
+ for (j = 1; j < strlen(argv[current]); j++) {
+
+ r = short_arg(argv[current][j], next_arg);
+
if (r == ARG_USED) {
i++;
start++;
@@ -259,11 +295,13 @@ int parse_args(int argc, char** argv, void (*help)(void), int (*short_arg)(char,
start++;
}
+
exit:
+
return start;
}
-int get_tty() {
+int get_tty (void) {
int fd = open(_PATH_TTY, O_RDONLY);
if (fd < 0) error("failed to get tty: %s", strerror(errno));
return fd;
@@ -279,13 +317,18 @@ FILE* get_tty_stream(char* type) {
}
static int push_path_buffer_b(char* buf, int* index, const char* string) {
- int save = *index;
+ int save, string_len;
+
+ save = *index;
if (*index > 1 || (*index == 1 && buf[0] != '/')) {
buf[(*index)++] = '/';
}
- int string_len = strlen(string);
+
+ string_len = strlen(string);
memcpy(buf + *index, string, string_len + 1);
+
*index += string_len;
+
return save;
}
@@ -297,7 +340,7 @@ static void pop_path_buffer_b(char* buf, int* index, int i) {
static char path_buffer[PATH_MAX + 1];
static int path_buffer_index = 0;
-char* get_path_buffer() {
+char* get_path_buffer(void) {
return path_buffer;
}
@@ -312,7 +355,7 @@ void pop_path_buffer(int i) {
static char path_buffer_2[PATH_MAX + 1];
static int path_buffer_index_2 = 0;
-char* get_path_buffer_2() {
+char* get_path_buffer_2(void) {
return path_buffer_2;
}
diff --git a/src/util/shared.h b/src/util/shared.h
index 07da4a7..a3e6a56 100644
--- a/src/util/shared.h
+++ b/src/util/shared.h
@@ -1,7 +1,8 @@
-#pragma once
+#ifndef SHARED_H
+#define SHARED_H
+#include <stdint.h>
#include <stdio.h>
-#include <stdbool.h>
#include <time.h>
#include <fcntl.h>
@@ -26,6 +27,10 @@
#define COLOR "m"
+typedef uint8_t bool;
+#define true 1
+#define false 0
+
enum When {
YES,
NO,
@@ -65,15 +70,17 @@ void global_help(void (*help)(void));
void parse_help (int argc, char** argv, void (*help)(void));
int parse_args (int argc, char** argv, void (*help)(void), int (*short_arg)(char, char*), int (*long_arg)(char*, char*));
-int get_tty();
+int get_tty(void);
FILE* get_tty_stream(char* type);
-char* get_path_buffer();
+char* get_path_buffer(void);
int push_path_buffer(const char* string);
void pop_path_buffer(int i);
-char* get_path_buffer_2();
+char* get_path_buffer_2(void);
int push_path_buffer_2(const char* string);
void pop_path_buffer_2(int i);
bool is_dot_dir(const char* path);
+
+#endif
diff --git a/src/util/stack.c b/src/util/stack.c
index 15d5a8e..acffc1a 100644
--- a/src/util/stack.c
+++ b/src/util/stack.c
@@ -30,3 +30,14 @@ void* stack_pop(struct Stack* stack, size_t len) {
void stack_free(struct Stack *stack) {
free(stack->data);
}
+
+void stack_push_int(struct Stack *stack, int value) {
+ stack_push(stack, &value, sizeof(int));
+}
+
+bool stack_pop_int(struct Stack *stack, int* value) {
+ void* d = stack_pop(stack, sizeof(int));
+ if (d == NULL) return false;
+ *value = *(int*)(d);
+ return true;
+}
diff --git a/src/util/stack.h b/src/util/stack.h
index 01a48e5..8d6fc80 100644
--- a/src/util/stack.h
+++ b/src/util/stack.h
@@ -1,7 +1,9 @@
-#pragma once
+#ifndef STACK_H
+#define STACK_H
+
+#include "shared.h"
#include <stddef.h>
-#include <stdbool.h>
struct Stack {
size_t size;
@@ -14,13 +16,7 @@ void stack_push(struct Stack* stack, void* data, size_t len);
void* stack_pop(struct Stack* stack, size_t len);
void stack_free(struct Stack* stack);
-inline void stack_push_int(struct Stack* stack, int value) {
- stack_push(stack, &value, sizeof(int));
-}
+void stack_push_int(struct Stack* stack, int value);
+bool stack_pop_int(struct Stack* stack, int* value);
-inline bool stack_pop_int(struct Stack* stack, int* value) {
- void* d = stack_pop(stack, sizeof(int));
- if (d == NULL) return false;
- *value = *(int*)(d);
- return true;
-}
+#endif