mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
120 lines
2.7 KiB
Diff
120 lines
2.7 KiB
Diff
See: https://gist.github.com/ingramj/1105106/adfad1a7b1f0575dd7737c296d644856f2c2d074
|
|
--- lib/cmdline.c.orig 2020-06-13 17:42:45.000000000 +0800
|
|
+++ lib/cmdline.c 2022-05-31 20:35:42.000000000 +0800
|
|
@@ -39,6 +39,97 @@
|
|
#include <search.h>
|
|
#include <sys/time.h>
|
|
|
|
+#if defined(__APPLE__)
|
|
+#if __STDC_VERSION__ >= 199901L
|
|
+/* restrict is a keyword */
|
|
+#else
|
|
+# define restrict
|
|
+#endif
|
|
+
|
|
+#ifndef _POSIX_SOURCE
|
|
+typedef long ssize_t;
|
|
+#define SSIZE_MAX LONG_MAX
|
|
+#endif
|
|
+
|
|
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
|
|
+ FILE *restrict stream);
|
|
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
|
|
+ FILE *restrict stream);
|
|
+
|
|
+#define _GETDELIM_GROWBY 128 /* amount to grow line buffer by */
|
|
+#define _GETDELIM_MINLEN 4 /* minimum line buffer size */
|
|
+
|
|
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
|
|
+ FILE *restrict stream)
|
|
+{
|
|
+ char *buf, *pos;
|
|
+ int c;
|
|
+ ssize_t bytes;
|
|
+
|
|
+ if (lineptr == NULL || n == NULL) {
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+ if (stream == NULL) {
|
|
+ errno = EBADF;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ /* resize (or allocate) the line buffer if necessary */
|
|
+ buf = *lineptr;
|
|
+ if (buf == NULL || *n < _GETDELIM_MINLEN) {
|
|
+ buf = realloc(*lineptr, _GETDELIM_GROWBY);
|
|
+ if (buf == NULL) {
|
|
+ /* ENOMEM */
|
|
+ return -1;
|
|
+ }
|
|
+ *n = _GETDELIM_GROWBY;
|
|
+ *lineptr = buf;
|
|
+ }
|
|
+
|
|
+ /* read characters until delimiter is found, end of file is reached,
|
|
+ or an error occurs. */
|
|
+ bytes = 0;
|
|
+ pos = buf;
|
|
+ while ((c = getc(stream)) != EOF) {
|
|
+ if (bytes + 1 >= SSIZE_MAX) {
|
|
+ errno = EOVERFLOW;
|
|
+ return -1;
|
|
+ }
|
|
+ bytes++;
|
|
+ if (bytes >= *n - 1) {
|
|
+ buf = realloc(*lineptr, *n + _GETDELIM_GROWBY);
|
|
+ if (buf == NULL) {
|
|
+ /* ENOMEM */
|
|
+ return -1;
|
|
+ }
|
|
+ *n += _GETDELIM_GROWBY;
|
|
+ pos = buf + bytes - 1;
|
|
+ *lineptr = buf;
|
|
+ }
|
|
+
|
|
+ *pos++ = (char) c;
|
|
+ if (c == delimiter) {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (ferror(stream) || (feof(stream) && (bytes == 0))) {
|
|
+ /* EOF, or an error from getc(). */
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ *pos = '\0';
|
|
+ return bytes;
|
|
+}
|
|
+
|
|
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
|
|
+ FILE *restrict stream)
|
|
+{
|
|
+ return getdelim(lineptr, n, '\n', stream);
|
|
+}
|
|
+#endif
|
|
+
|
|
#include "cmdline.h"
|
|
#include "formats.h"
|
|
#include "hash-utility.h"
|
|
|
|
|
|
# See: https://github.com/hboetes/mg/issues/7#issuecomment-475869095
|
|
--- lib/traverse.c.orig 2020-06-13 17:42:45.000000000 +0800
|
|
+++ lib/traverse.c 2022-05-31 19:48:09.000000000 +0800
|
|
@@ -41,6 +41,12 @@
|
|
|
|
#include "fts/fts.h"
|
|
|
|
+#if defined(__APPLE__)
|
|
+#define st_atim st_atimespec
|
|
+#define st_ctim st_ctimespec
|
|
+#define st_mtim st_mtimespec
|
|
+#endif
|
|
+
|
|
//////////////////////
|
|
// TRAVERSE SESSION //
|
|
//////////////////////
|