1 Commits
Author SHA1 Message Date
sisungo a734f141de feat: add compatibility with linux
Signed-off-by: sisungo <[email protected]>
2026-07-07 10:50:02 +08:00
4 changed files with 94 additions and 15 deletions
+1 -1
View File
@@ -104,7 +104,7 @@ max_backup_version(const char *file, const char *dir)
file_name_length = strlen(file); file_name_length = strlen(file);
while ((dp = readdir(dirp)) != NULL) { while ((dp = readdir(dirp)) != NULL) {
if (dp->d_namlen <= file_name_length) if (strlen(dp->d_name) <= file_name_length)
continue; continue;
this_version = version_number(file, dp->d_name, file_name_length); this_version = version_number(file, dp->d_name, file_name_length);
+83 -5
View File
@@ -1,9 +1,87 @@
#include <stdlib.h> #include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <ctype.h>
static inline void *reallocarray(void *p, size_t n, size_t size) { static inline long long strtonum(const char *nptr, long long minval,
if (n && size > (size_t)-1 / n) { long long maxval, const char **errstr) {
errno = ENOMEM; const char *p = nptr;
return NULL; char *endptr;
long long result;
int saved_errno;
if (errstr != NULL)
*errstr = NULL;
if (nptr == NULL || *nptr == '\0') {
if (errstr != NULL)
*errstr = "invalid";
errno = EINVAL;
return 0;
} }
return realloc(p, n * size);
if (minval > maxval) {
if (errstr != NULL)
*errstr = "invalid";
errno = EINVAL;
return 0;
}
while (isspace((unsigned char)*p))
p++;
saved_errno = errno;
errno = 0;
result = strtoll(p, &endptr, 10);
if (errno == ERANGE) {
if (errstr != NULL) {
*errstr = (result == LLONG_MIN || result < minval) ?
"too small" : "too large";
}
errno = ERANGE;
return 0;
}
if (endptr == p) {
if (errstr != NULL)
*errstr = "invalid";
errno = EINVAL;
return 0;
}
while (isspace((unsigned char)*endptr))
endptr++;
if (*endptr != '\0') {
if (errstr != NULL)
*errstr = "invalid";
errno = EINVAL;
return 0;
}
if (result < minval) {
if (errstr != NULL)
*errstr = "too small";
errno = ERANGE;
return 0;
}
if (result > maxval) {
if (errstr != NULL)
*errstr = "too large";
errno = ERANGE;
return 0;
}
if (errstr != NULL)
*errstr = NULL;
return result;
}
static inline void *reallocf(void *ptr, size_t size) {
void *new_ptr = realloc(ptr, size);
if (new_ptr == NULL && size != 0) {
free(ptr);
}
return new_ptr;
} }
+1 -1
View File
@@ -43,12 +43,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h>
#include "common.h" #include "common.h"
#include "util.h" #include "util.h"
#include "pch.h" #include "pch.h"
#include "inp.h" #include "inp.h"
#include "compat.h"
/* Input-file-with-indexable-lines abstract type */ /* Input-file-with-indexable-lines abstract type */
+1
View File
@@ -42,6 +42,7 @@
#include "util.h" #include "util.h"
#include "pch.h" #include "pch.h"
#include "pathnames.h" #include "pathnames.h"
#include "compat.h"
/* Patch (diff listing) abstract type. */ /* Patch (diff listing) abstract type. */