From a11a07231b6b2012d7c6b5d8e52aea7d1fdc877e Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 29 Apr 2010 08:47:44 +0000 Subject: * 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. --- winsup/cygwin/external.cc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'winsup/cygwin/external.cc') diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc index bbf675a..c8cbd93 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); -- cgit v1.1