<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.
</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/0f1292b4734aac30188ee03561ecd1430a255062">https://github.com/macports/macports-legacy-support/commit/0f1292b4734aac30188ee03561ecd1430a255062</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 0f1292b4734aac30188ee03561ecd1430a255062
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Nov 30 15:34:07 2024 -0800
<span style='display:block; white-space:pre;color:#404040;'> Remove obsolete fstatat64() test.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> The new stat test covers everything that the old test did and more,
</span><span style='display:block; white-space:pre;color:#404040;'> along with fewer restrictions and better messages.
</span>---
test/test_fstatat64.c | 268 --------------------------------------------------
1 file changed, 268 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_fstatat64.c b/test/test_fstatat64.c
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index b0b5558..0000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_fstatat64.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,268 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Copyright (c) 2019 Mihai Moldovan <ionic@ionic.de>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Permission to use, copy, modify, and distribute this software for any
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * purpose with or without fee is hereby granted, provided that the above
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copyright notice and this permission notice appear in all copies.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/stat.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdio.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <string.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <stdlib.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <unistd.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <libgen.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <sys/syslimits.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <errno.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#include <fcntl.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * For newer macOS releases - where this syscall is available - it's declared
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * in header 'sys/sysproto.h', within 'Kernel.framework'.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * To avoid depending on that, declare it ourselves. (Remember that C/C++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * allows redundant function declarations, as long as the signatures match.)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-struct stat64; /* Avoid warning on 10.4 (where this doesn't work, anyway) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int fstatat64(int dirfd, const char *pathname, struct stat64 *buf, int flags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int main (int argc, char **argv) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#if !__DARWIN_ONLY_64_BIT_INO_T && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Caveat: dirname() and basename() my modify their arguments, so create copies. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *prog = strdup (argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!prog) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy program name: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *prog_dirname = strdup (dirname (prog));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!prog_dirname) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy program's dirname: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog = strdup (argv[0]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!prog) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy program name: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *prog_basename = strdup (basename (prog));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!prog_basename) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy program's basename: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Fetch raw stat64 data. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct stat64 orig_stat64 = { 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != stat64 (argv[0], &orig_stat64)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to get test file's stat64 information: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Test stat64-compatibility with AT_FDCWD, which should behave exactly the same. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct stat64 atfdcwd_stat64 = { 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != fstatat64 (AT_FDCWD, argv[0], &atfdcwd_stat64, 0)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to get test file's stat64 information via fstatat64() in AT_FDCWD mode: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != memcmp (&orig_stat64, &atfdcwd_stat64, sizeof (struct stat64))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Results obtained by stat64() and fstatat64() in AT_FDCWD mode deviate.\nBailing out.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Now we actually want to use a directory that is different from our CWD.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * If the dirname is not ".", we're pretty much done.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Otherwise, more work is required.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct stat64 othercwd_stat64 = { 0 };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int prog_dir_fd = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ((1 == strlen (prog_dirname)) && ('.' == prog_dirname[0])) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * The binary sits in our CWD (or has been called differently).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * We'll fetch the CWD, extract the last component, switch to the upper
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * directory and use the extracted component in our fstatat64 call.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- const size_t max_size = 1024000;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size_t cur_size = PATH_MAX;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *cwd = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *ret = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (NULL == ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *realloc_ret = realloc (cwd, cur_size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (NULL == realloc_ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to request more memory to store the CWD in.\nBailing out.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (cwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cwd = realloc_ret;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = getcwd (cwd, cur_size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ((NULL == ret) && (ERANGE != saved_errno)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to fetch CWD: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Do not free cwd here, it's state is explicitly undefined. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cur_size *= 2;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (cur_size > max_size) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "CWD length would exceed maximum safe guard value of 1 MiB.\nBailing out.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (cwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *cwd_copy = strdup (cwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!cwd_copy) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy CWD: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (cwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- char *last_component = strdup (basename (cwd_copy));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (cwd_copy);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cwd_copy = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (cwd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cwd = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!last_component) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to copy CWD's basename: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != chdir ("..")) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to change to upper directory: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (last_component);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Now get a reference to the previous directory. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog_dir_fd = open (last_component, O_RDONLY | O_DIRECTORY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (-1 == prog_dir_fd) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to open directory '%s' from upper dir: %s\nBailing out.\n", last_component, strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (last_component);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Our CWD differs, so we can just open a reference to dirname. */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog_dir_fd = open (prog_dirname, O_RDONLY | O_DIRECTORY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (-1 == prog_dir_fd) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to open directory '%s': %s\nBailing out.\n", prog_dirname, strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- int fstatat64_ret = fstatat64 (prog_dir_fd, prog_basename, &othercwd_stat64, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- close (prog_dir_fd);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog_dir_fd = -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_dirname);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog_dirname = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- free (prog_basename);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prog_basename = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /* Done, populate struct (and check for errors, naturally). */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != fstatat64_ret) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Unable to get test file's stat64 information via fstatat64() with a different CWD supplied: %s\nBailing out.\n", strerror (saved_errno));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (0 != memcmp (&orig_stat64, &othercwd_stat64, sizeof (struct stat64))) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fprintf (stderr, "Results obtained by stat64() and fstatat64() with a different CWD supplied deviate.\nBailing out.\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_FAILURE);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- printf ("\n\nfstatat64() is not supported on your platform, this test will do nothing.\n\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (EXIT_SUCCESS);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span></pre><pre style='margin:0'>
</pre>