summaryrefslogtreecommitdiff
path: root/lib/at-func.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2009-10-07 10:15:33 -0600
committerEric Blake <ebb9@byu.net>2009-10-07 19:24:47 -0600
commit9d145640e828e0075ab4fa4567e243699ad64f06 (patch)
treeb8867ff8dfe3987f848ed647a98c5744c0de1996 /lib/at-func.c
parent87e0316958ab39e52ede17dfd17f68500d153a57 (diff)
downloadgnulib-9d145640e828e0075ab4fa4567e243699ad64f06.tar.gz
areadlinkat: new module
* lib/at-func.c (FUNC_FAIL): New define. (AT_FUNC_NAME, VALIDATE_FLAG): Use it rather than raw -1. * modules/areadlinkat: New module. * lib/linkat.c (areadlinkat): Move... * lib/areadlinkat.c (areadlinkat): ...to new file. * lib/areadlink.h (areadlinkat): Declare it. * modules/linkat (Depends-on): Add areadlinkat. * MODULES.html.sh (File system functions): Mention it. * modules/areadlinkat-tests: New test. * tests/test-areadlinkat.c: New file. Signed-off-by: Eric Blake <ebb9@byu.net>
Diffstat (limited to 'lib/at-func.c')
-rw-r--r--lib/at-func.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/at-func.c b/lib/at-func.c
index 373b5f6bcb..b6aa0fd550 100644
--- a/lib/at-func.c
+++ b/lib/at-func.c
@@ -30,7 +30,7 @@
if (flag & ~AT_FUNC_USE_F1_COND) \
{ \
errno = EINVAL; \
- return -1; \
+ return FUNC_FAIL; \
}
#else
# define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS))
@@ -43,11 +43,18 @@
# define FUNC_RESULT int
#endif
+#ifdef AT_FUNC_FAIL
+# define FUNC_FAIL AT_FUNC_FAIL
+#else
+# define FUNC_FAIL -1
+#endif
+
/* Call AT_FUNC_F1 to operate on FILE, which is in the directory
open on descriptor FD. If AT_FUNC_USE_F1_COND is defined to a value,
AT_FUNC_POST_FILE_PARAM_DECLS must inlude a parameter named flag;
call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than
- AT_FUNC_USE_F1_COND. If possible, do it without changing the
+ AT_FUNC_USE_F1_COND. Return int and fail with -1 unless AT_FUNC_RESULT
+ or AT_FUNC_FAIL are defined. If possible, do it without changing the
working directory. Otherwise, resort to using save_cwd/fchdir,
then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd
fails, then give a diagnostic and exit nonzero. */
@@ -96,7 +103,7 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
begin with. */
free_cwd (&saved_cwd);
errno = EBADF;
- return -1;
+ return FUNC_FAIL;
}
if (fchdir (fd) != 0)
@@ -104,7 +111,7 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
saved_errno = errno;
free_cwd (&saved_cwd);
errno = saved_errno;
- return -1;
+ return FUNC_FAIL;
}
err = CALL_FUNC (file);
@@ -121,3 +128,4 @@ AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
}
#undef CALL_FUNC
#undef FUNC_RESULT
+#undef FUNC_FAIL