diff options
| author | Werner Koch <[email protected]> | 2025-10-07 17:26:17 +0200 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2025-10-07 17:26:44 +0200 |
| commit | 461cb5a8ea24785ef4f8c5282e09e69bf487fa7f (patch) | |
| tree | d0ed481639bb313e1ccf13227c7e3575d8a50c9f | |
| parent | estream: Extend the new share keyword to allow all modes. (diff) | |
| download | libgpg-error-461cb5a8ea24785ef4f8c5282e09e69bf487fa7f.tar.gz libgpg-error-461cb5a8ea24785ef4f8c5282e09e69bf487fa7f.zip | |
estream: Implictly enable sysopen when the the share flag is given.
* src/estream.c (parse_mode): Fix parsing of "share". Set sysopen
flag.
--
Updates-commit: 0b170a499a87abc4a18b6f7d76beb44901fa0cdd
| -rw-r--r-- | src/estream.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/estream.c b/src/estream.c index f554bf8..7e1d55c 100644 --- a/src/estream.c +++ b/src/estream.c @@ -2140,10 +2140,11 @@ func_file_create_w32 (void **cookie, HANDLE *rethd, const char *path, * * share=[r][w][d][0] * - * Under Windows with the "sysopen" flag use FILE_SHARE_READ, - * FILE_SHARE_WRITE, or SHARE_MODE_DELETE depending on the given - * letters. If no letter or 0 is given, share mode 0 is used. The - * default is to use a share mode depending on the open mode. + * Under Windows use FILE_SHARE_READ, FILE_SHARE_WRITE, or + * SHARE_MODE_DELETE depending on the given letters. If no letter + * or 0 is given, share mode 0 is used. The default is to use a + * share mode depending on the open mode. The use of this flag + * implicitly enables the "sysopen" flag. * * wipe * @@ -2293,7 +2294,8 @@ parse_mode (const char *modestr, { modestr += 6; *r_xmode |= X_SHARE_CUSTOM; - for ( ; *modestr; modestr++) + *r_xmode |= X_SYSOPEN; /* "share" implies "sysopen". */ + for ( ; *modestr && !strchr (" \t,", *modestr); modestr++) switch (*modestr) { case 'w': *r_xmode |= X_SHARE_WRITE; break; @@ -2301,10 +2303,6 @@ parse_mode (const char *modestr, case 'd': *r_xmode |= X_SHARE_DEL; break; case '0': *r_xmode &= ~(X_SHARE_READ|X_SHARE_WRITE|X_SHARE_DEL); break; - case ' ': - case '\t': - _set_errno (EINVAL); - return -1; default: break; /* Ignore other letters. */ } } |
