deployd/script/def.c
Arija A. c368b92071
Make metadata parsing more modular
Signed-off-by: Arija A. <ari@ari.lt>
2025-07-25 20:57:21 +03:00

164 lines
3.5 KiB
C

#include "include/conf.h"
#include <time.h>
#include <ctype.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include "include/def.h"
static inline void sh_print_timestamp(void) {
time_t now = time(NULL);
struct tm *tm_now = localtime(&now);
if (tm_now == NULL) {
(void)fputs("0000-00-00 00:00:00 | ", stderr);
return;
}
char buf[32] = {0}; /* YYYY-MM-DD HH:MM:SS */
(void)strftime(buf, sizeof(buf), "%F %T", tm_now);
(void)fputs(buf, stderr);
(void)fputs(" | ", stderr);
}
void sh_print_error(const char *msg) {
sh_print_timestamp();
(void)fputs("Error: ", stderr);
(void)fputs(msg, stderr);
(void)fputc('\n', stderr);
}
void sh_print_errorf(const char *fmt, ...) {
va_list args;
sh_print_timestamp();
(void)fprintf(stderr, "Error: ");
va_start(args, fmt);
(void)vfprintf(stderr, fmt, args);
va_end(args);
(void)fputc('\n', stderr);
}
void sh_print_warn(const char *msg) {
sh_print_timestamp();
(void)fputs("Warning: ", stderr);
(void)fputs(msg, stderr);
(void)fputc('\n', stderr);
}
void sh_print_warnf(const char *fmt, ...) {
va_list args;
sh_print_timestamp();
(void)fprintf(stderr, "Warning: ");
va_start(args, fmt);
(void)vfprintf(stderr, fmt, args);
va_end(args);
(void)fputc('\n', stderr);
}
void sh_print_info(const char *msg) {
sh_print_timestamp();
(void)fputs("Info: ", stderr);
(void)fputs(msg, stderr);
(void)fputc('\n', stderr);
}
void sh_print_infof(const char *fmt, ...) {
va_list args;
sh_print_timestamp();
(void)fprintf(stderr, "Info: ");
va_start(args, fmt);
(void)vfprintf(stderr, fmt, args);
va_end(args);
(void)fputc('\n', stderr);
}
void sh_print_perror(const char *msg) {
sh_print_timestamp();
perror(msg);
}
void sh_print_perrorf(const char *fmt, ...) {
va_list args;
const int errnum = errno;
sh_print_timestamp();
(void)fprintf(stderr, "Error: ");
va_start(args, fmt);
(void)vfprintf(stderr, fmt, args);
va_end(args);
(void)fprintf(stderr, ": %s (errno %d)\n", strerror(errnum), errnum);
}
char *sh_strndup(const char *src, size_t length) {
if (!src) {
return NULL;
}
char *duplicate_str = SH_MALLOC(length + 1);
if (duplicate_str) {
memcpy(duplicate_str, src, length + 1);
}
return duplicate_str;
}
bool sh_str_lstrip(const char **ptr) {
if (!ptr || !*ptr) {
return false;
}
const char *cur = *ptr;
while (*cur == ' ' || *cur == '\t') {
++cur;
}
*ptr = cur;
return true;
}
bool sh_is_valid_identifier(const char *str, size_t length) {
if (!str || !*str || length == 0) {
return false;
}
for (size_t idx = 0; idx < length && str[idx]; ++idx) {
if (!isalnum((unsigned char)str[idx]) && str[idx] != '_') {
return false;
}
}
return true;
}
bool sh_is_lowstr(const char *str) {
if (!str) {
return false;
}
for (const char *ptr = str; ptr < str; ++ptr) {
if (!islower(*ptr)) {
return false;
}
}
return true;
}
const char *sh_strnchr(const char *str, char chr, size_t length) {
if (!str || length == 0) {
return NULL;
}
for (size_t idx = 0; idx < length; ++idx) {
if (str[idx] == chr) {
return &str[idx];
}
if (str[idx] == '\0') {
break;
}
}
return NULL;
}