lazysphere/lib/convert.c

70 lines
1.4 KiB
C
Raw Permalink Normal View History

2023-05-15 01:43:02 +00:00
#include "lslib.h"
2023-05-06 04:39:44 +00:00
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
long int get_number(const char* text) {
char* end;
long int n = strtol(text, &end, 10);
if (text == end) {
error("%s is not a valid number", text);
}
return n;
}
long int get_blkm(const char* text) {
char* end;
long int n = strtol(text, &end, 10);
if (text == end) {
error("%s is not a valid bkm", text);
}
if (*end == '\0') return n;
switch (*end) {
case 'K':
case 'k':
return n * 1024;
case 'B':
case 'b':
return n * 512;
case 'M':
case 'm':
return n * 1024 * 1204;
default:
error("invalid bkm type %c", *end);
}
/* shouldnt get here anyways */
return 0;
}
mode_t get_mode(const char* next) {
char* end = NULL;
mode_t mode = (mode_t)strtol(next, &end, 8);
if (!end) return 0;
while(isspace(*end)) end++;
2023-05-12 21:38:41 +00:00
if (*end != '\0' || (unsigned) mode >= 010000) {
2023-05-06 04:39:44 +00:00
error("invalid file mode: `%s`", next);
}
return mode;
}
bool streql(const char* a, const char* b) {
int n = 0;
if (*a != *b) return false;
while (true) {
if (*(a+n) != *(b+n)) return false;
if (*(a+n) == '\0') return true;
++n;
}
}
bool prefix(const char* pre, const char* str) {
return strncmp(pre, str, strlen(pre)) == 0;
}