summaryrefslogtreecommitdiff
path: root/lib/canonicalize.h
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2011-12-29 23:49:53 +0000
committerPádraig Brady <P@draigBrady.com>2011-12-30 12:43:43 +0000
commit8bcd0399386f6c3298ee63da74c58f80053d5a42 (patch)
tree4129f0562bb854b9135b71b02c0972bcc1ee1a10 /lib/canonicalize.h
parent771de9614b52042c1870625d412263a22708152e (diff)
downloadgnulib-8bcd0399386f6c3298ee63da74c58f80053d5a42.tar.gz
canonicalize: add support for not resolving symlinks
This will initially be used by a new coreutils realpath command. * lib/canonicalize.h: Add the CAN_NOLINKS flag to indicate we don't want to follow symlinks. Also provide CAN_MODE_MASK to aid setting these existing mutually exclusive values. * lib/canonicalize.c (canonicalize_filename_mode): Extract the flags from can_mode parameter, which are currently just used to select between stat() and lstat(). Also ensure that mutually exclusive values are flagged immediately as invalid. * tests/test-canonicalize.c: Verify symlinks are not followed, and that invalid flag combinations are diagnosed.
Diffstat (limited to 'lib/canonicalize.h')
-rw-r--r--lib/canonicalize.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/canonicalize.h b/lib/canonicalize.h
index 04ad79cee7..1887b72a2d 100644
--- a/lib/canonicalize.h
+++ b/lib/canonicalize.h
@@ -19,6 +19,8 @@
#include <stdlib.h> /* for canonicalize_file_name */
+#define CAN_MODE_MASK (CAN_EXISTING | CAN_ALL_BUT_LAST | CAN_MISSING)
+
enum canonicalize_mode_t
{
/* All components must exist. */
@@ -28,7 +30,10 @@ enum canonicalize_mode_t
CAN_ALL_BUT_LAST = 1,
/* No requirements on components existence. */
- CAN_MISSING = 2
+ CAN_MISSING = 2,
+
+ /* Don't expand symlinks. */
+ CAN_NOLINKS = 4
};
typedef enum canonicalize_mode_t canonicalize_mode_t;