summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/external.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2010-04-29 08:47:44 +0000
committerCorinna Vinschen <corinna@vinschen.de>2010-04-29 08:47:44 +0000
commita11a07231b6b2012d7c6b5d8e52aea7d1fdc877e (patch)
treecc5e566032c02afe0d16771a2b4a161c9659243a /winsup/cygwin/external.cc
parentf00bc469e2a13b2a966a51de7dc3c094829a6ea6 (diff)
downloadcygnal-a11a07231b6b2012d7c6b5d8e52aea7d1fdc877e.tar.gz
cygnal-a11a07231b6b2012d7c6b5d8e52aea7d1fdc877e.tar.bz2
cygnal-a11a07231b6b2012d7c6b5d8e52aea7d1fdc877e.zip
* external.cc (cygwin_internal): Add CW_CVT_MNT_OPTS to allow mount
flag parsing. Add CW_LST_MNT_OPTS case to allow mount flag listing. * mount.cc (fstab_read_flags): Rename from read_flags. Make externally available. Change input string to char ** to allow returning faulty option. Add flag for avoiding debug output. (fstab_list_flags): New function to create list of options. * include/sys/cygwin.h (cygwin_getinfo_types): Add CW_CVT_MNT_OPTS and CW_LST_MNT_OPTS.
Diffstat (limited to 'winsup/cygwin/external.cc')
-rw-r--r--winsup/cygwin/external.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc
index bbf675a64..c8cbd9370 100644
--- a/winsup/cygwin/external.cc
+++ b/winsup/cygwin/external.cc
@@ -474,6 +474,40 @@ cygwin_internal (cygwin_getinfo_types t, ...)
internal_setlocale ();
res = 0;
}
+ break;
+ case CW_CVT_MNT_OPTS:
+ {
+ extern bool fstab_read_flags (char **, unsigned &, bool);
+ char **option_string = va_arg (arg, char **);
+ if (!option_string || !*option_string)
+ set_errno (EINVAL);
+ else
+ {
+ unsigned *pflags = va_arg (arg, unsigned *);
+ unsigned flags = 0;
+ if (fstab_read_flags (option_string, flags, true))
+ {
+ if (pflags)
+ *pflags = flags;
+ res = 0;
+ }
+ }
+ }
+ break;
+ case CW_LST_MNT_OPTS:
+ {
+ extern char *fstab_list_flags ();
+ char **option_string = va_arg (arg, char **);
+ if (!option_string)
+ set_errno (EINVAL);
+ else
+ {
+ *option_string = fstab_list_flags ();
+ if (*option_string)
+ res = 0;
+ }
+ }
+ break;
default:
set_errno (ENOSYS);