diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-03-01 21:55:01 +0800 | 
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-03-01 21:55:01 +0800 | 
| commit | f6365965be351fe100c3393c37af62583b85296b (patch) | |
| tree | a2df1affb757d255455bad51b7e055b42f36899d /hurd | |
| parent | ed7d5205bb1d938f777d15bdd965fbca7fbdfbed (diff) | |
| download | crupest-f6365965be351fe100c3393c37af62583b85296b.tar.gz crupest-f6365965be351fe100c3393c37af62583b85296b.tar.bz2 crupest-f6365965be351fe100c3393c37af62583b85296b.zip | |
feat(hurd): add *_max sample fix.
Diffstat (limited to 'hurd')
| -rw-r--r-- | hurd/path_max.c | 63 | 
1 files changed, 63 insertions, 0 deletions
| diff --git a/hurd/path_max.c b/hurd/path_max.c new file mode 100644 index 0000000..eee777c --- /dev/null +++ b/hurd/path_max.c @@ -0,0 +1,63 @@ +#include <errno.h> +#include <stdlib.h> +#include <unistd.h> + +static inline char *xreadlink(const char *restrict path) { +  char *buffer; +  size_t allocated = 128; +  ssize_t len; + +  while (1) { +    buffer = (char *)malloc(allocated); +    if (!buffer) { +      return NULL; +    } +    len = readlink(path, buffer, allocated); +    if (len < (ssize_t)allocated) { +      return buffer; +    } +    free(buffer); +    if (len >= (ssize_t)allocated) { +      allocated *= 2; +      continue; +    } +    return NULL; +  } +} + +static inline char *xgethostname() { +  long max_host_name; +  char *buffer; + +  max_host_name = sysconf(_SC_HOST_NAME_MAX); +  buffer = malloc(max_host_name + 1); + +  if (gethostname(buffer, max_host_name + 1)) { +    free(buffer); +    return NULL; +  } + +  buffer[max_host_name] = '\0'; +  return buffer; +} + +static inline char *xgetcwd() { +  char *buffer; +  size_t allocated = 128; + +  while (1) { +    buffer = (char *)malloc(allocated); +    if (!buffer) { +      return NULL; +    } +    getcwd(buffer, allocated); +    if (buffer) +      return buffer; +    free(buffer); +    if (errno == ERANGE) { +      allocated *= 2; +      continue; +    } +    return NULL; +  } +} | 
