Remove unneeded whitespace.

* fhandler_fifo.cc (fhandler_fifo::open): Rework to cause errno to be set to
ENXIO when opening a fifo write/nonblocking.
* environ.cc (ucreqenv): Rename to ucenv.  Move code from old ucenv here and
conditionalize it on create_upcaseenv.
(ucenv): Delete.
(environ_init): Fix compiler warning by moving create_upcaseenv test to ucenv.
Don't bother checking for child_proc_info when calling ucenv since it is
assumed to be NULL at the point where the function is called.
* path.cc (symlink_worker): Turn off MS-DOS path warnings when dealing with
devices since the device handler passes in a translated MS-DOS path.
* sec_auth.cc (lsaprivkeyauth): Avoid variable initialization which causes a
compiler error.
* fhandler_netdrive.cc: Update copyright.
This commit is contained in:
Christopher Faylor 2008-11-26 17:21:04 +00:00
parent f43f75a09d
commit 025c1fac6e
21 changed files with 242 additions and 196 deletions

View File

@ -1,3 +1,27 @@
2008-11-26 Christopher Faylor <me+cygwin@cgf.cx>
Remove unneeded whitespace.
* fhandler_fifo.cc (fhandler_fifo::open): Rework to cause errno to be
set to ENXIO when opening a fifo write/nonblocking.
* environ.cc (ucreqenv): Rename to ucenv. Move code from old ucenv
here and conditionalize it on create_upcaseenv.
(ucenv): Delete.
(environ_init): Fix compiler warning by moving create_upcaseenv test to
ucenv. Don't bother checking for child_proc_info when calling ucenv
since it is assumed to be NULL at the point where the function is
called.
* path.cc (symlink_worker): Turn off MS-DOS path warnings when dealing
with devices since the device handler passes in a translated MS-DOS
path.
* sec_auth.cc (lsaprivkeyauth): Avoid variable initialization which
causes a compiler error.
* fhandler_netdrive.cc: Update copyright.
2008-11-26 Corinna Vinschen <corinna@vinschen.de>
* Makefile.in (DLL_OFILES): Add setlsapwd.o.

View File

@ -437,53 +437,36 @@ unsetenv (const char *name)
return 0;
}
/* Turn environment variable part of a=b string into uppercase. */
static __inline__ void
ucenv (char *p, char *eq)
{
/* Amazingly, NT has a case sensitive environment name list,
but only sometimes.
It's normal to have NT set your "Path" to something.
Later, you set "PATH" to something else. This alters "Path".
But if you try and do a naive getenv on "PATH" you'll get nothing.
So we upper case the labels here to prevent confusion later but
we only do it for the first process in a session group. */
for (; p < eq; p++)
if (islower (*p))
*p = cyg_toupper (*p);
}
/* Minimal list of Windows vars which must be converted to uppercase.
Either for POSIX compatibility of for backward compatibility with
existing applications. */
static struct renv {
const char *name;
const size_t namelen;
const char *name;
const size_t namelen;
} renv_arr[] = {
{ NL("ALLUSERSPROFILE=") }, // 0
{ NL("COMMONPROGRAMFILES=") }, // 1
{ NL("COMPUTERNAME=") },
{ NL("COMSPEC=") },
{ NL("HOME=") }, // 4
{ NL("HOMEDRIVE=") },
{ NL("HOMEPATH=") },
{ NL("NUMBER_OF_PROCESSORS=") }, // 7
{ NL("OS=") }, // 8
{ NL("PATH=") }, // 9
{ NL("PATHEXT=") },
{ NL("PROCESSOR_ARCHITECTURE=") },
{ NL("PROCESSOR_IDENTIFIER=") },
{ NL("PROCESSOR_LEVEL=") },
{ NL("PROCESSOR_REVISION=") },
{ NL("PROGRAMFILES=") },
{ NL("SYSTEMDRIVE=") }, // 16
{ NL("SYSTEMROOT=") },
{ NL("TEMP=") }, // 18
{ NL("TERM=") },
{ NL("TMP=") },
{ NL("TMPDIR=") },
{ NL("WINDIR=") } // 22
{ NL("ALLUSERSPROFILE=") }, // 0
{ NL("COMMONPROGRAMFILES=") }, // 1
{ NL("COMPUTERNAME=") },
{ NL("COMSPEC=") },
{ NL("HOME=") }, // 4
{ NL("HOMEDRIVE=") },
{ NL("HOMEPATH=") },
{ NL("NUMBER_OF_PROCESSORS=") }, // 7
{ NL("OS=") }, // 8
{ NL("PATH=") }, // 9
{ NL("PATHEXT=") },
{ NL("PROCESSOR_ARCHITECTURE=") },
{ NL("PROCESSOR_IDENTIFIER=") },
{ NL("PROCESSOR_LEVEL=") },
{ NL("PROCESSOR_REVISION=") },
{ NL("PROGRAMFILES=") },
{ NL("SYSTEMDRIVE=") }, // 16
{ NL("SYSTEMROOT=") },
{ NL("TEMP=") }, // 18
{ NL("TERM=") },
{ NL("TMP=") },
{ NL("TMPDIR=") },
{ NL("WINDIR=") } // 22
};
#define RENV_SIZE (sizeof (renv_arr) / sizeof (renv_arr[0]))
/* Set of first characters of the above list of variables. */
@ -492,22 +475,41 @@ static const char idx_arr[] = "ACHNOPSTW";
starts. */
static const int start_at[] = { 0, 1, 4, 7, 8, 9, 16, 18, 22 };
/* Hopefully as quick as possible. Only upcase specific set of important
Windows variables. */
/* Turn environment variable part of a=b string into uppercase.
Conditionally controlled by upcaseenv CYGWIN setting. */
static __inline__ void
ucreqenv (char *p)
ucenv (char *p, const char *eq)
{
char first = cyg_toupper (*p);
const char *idx = strchr (idx_arr, first);
if (idx)
for (size_t i = start_at[idx - idx_arr];
i < RENV_SIZE && renv_arr[i].name[0] == first;
++i)
if (strncasematch (p, renv_arr[i].name, renv_arr[i].namelen))
{
strncpy (p, renv_arr[i].name, renv_arr[i].namelen);
break;
}
if (create_upcaseenv)
{
/* Amazingly, NT has a case sensitive environment name list,
but only sometimes.
It's normal to have NT set your "Path" to something.
Later, you set "PATH" to something else. This alters "Path".
But if you try and do a naive getenv on "PATH" you'll get nothing.
So we upper case the labels here to prevent confusion later but
we only do it for processes that are started by non-Cygwin programs. */
for (; p < eq; p++)
if (islower (*p))
*p = cyg_toupper (*p);
}
else
{
/* Hopefully as quickly as possible - only upcase specific set of important
Windows variables. */
char first = cyg_toupper (*p);
const char *idx = strchr (idx_arr, first);
if (idx)
for (size_t i = start_at[idx - idx_arr];
i < RENV_SIZE && renv_arr[i].name[0] == first;
++i)
if (strncasematch (p, renv_arr[i].name, renv_arr[i].namelen))
{
strncpy (p, renv_arr[i].name, renv_arr[i].namelen);
break;
}
}
}
/* Parse CYGWIN options */
@ -847,14 +849,10 @@ environ_init (char **envp, int envc)
if (*newp == '=')
*newp = '!';
char *eq = strechr (newp, '=');
if (!child_proc_info)
if (create_upcaseenv)
ucenv (newp, eq); /* Uppercase all env vars. */
else
ucreqenv (newp); /* Uppercase only selected vars. */
ucenv (newp, eq); /* (possibly conditionally) uppercase env vars. */
if (*newp == 'T' && strncmp (newp, "TERM=", 5) == 0)
sawTERM = 1;
if (*eq && conv_start_chars[(unsigned char)envp[i][0]])
if (*eq && conv_start_chars[(unsigned char) envp[i][0]])
posify (envp + i, *++eq ? eq : --eq, tmpbuf);
debug_printf ("%p: %s", envp[i], envp[i]);
}

View File

@ -46,9 +46,9 @@ fcntl64 (int fd, int cmd, ...)
case F_SETLK:
case F_SETLKW:
{
struct __flock64 *fl = (struct __flock64 *) arg;
fl->l_type &= F_RDLCK | F_WRLCK | F_UNLCK;
res = cfd->lock (cmd, fl);
struct __flock64 *fl = (struct __flock64 *) arg;
fl->l_type &= F_RDLCK | F_WRLCK | F_UNLCK;
res = cfd->lock (cmd, fl);
}
break;
default:

View File

@ -524,11 +524,11 @@ fhandler_base::open (int flags, mode_t mode)
if (query_open () && pc.fs_is_nfs ())
{
/* Make sure we can read EAs of files on an NFS share. Also make
sure that we're going to act on the file itself, even if it'a
sure that we're going to act on the file itself, even if it'a
a symlink. */
access |= FILE_READ_EA;
if (query_open () >= query_write_control)
access |= FILE_WRITE_EA;
access |= FILE_WRITE_EA;
plen = sizeof nfs_aol_ffei;
p = (PFILE_FULL_EA_INFORMATION) &nfs_aol_ffei;
}
@ -583,7 +583,7 @@ fhandler_base::open (int flags, mode_t mode)
else if (pc.fs_is_nfs ())
{
/* When creating a file on an NFS share, we have to set the
file mode by writing a NFS fattr3 structure with the
file mode by writing a NFS fattr3 structure with the
correct mode bits set. */
access |= FILE_WRITE_EA;
plen = sizeof (FILE_FULL_EA_INFORMATION) + sizeof (NFS_V3_ATTR)
@ -595,7 +595,7 @@ fhandler_base::open (int flags, mode_t mode)
p->EaValueLength = sizeof (fattr3);
strcpy (p->EaName, NFS_V3_ATTR);
fattr3 *nfs_attr = (fattr3 *) (p->EaName
+ p->EaNameLength + 1);
+ p->EaNameLength + 1);
memset (nfs_attr, 0, sizeof (fattr3));
nfs_attr->type = NF3REG;
nfs_attr->mode = mode;
@ -634,7 +634,7 @@ fhandler_base::open (int flags, mode_t mode)
authenticating using a local user account on the sharing machine.
If the SIDs of the client machine are used, that's entirely
unexpected behaviour.
Doing it like we do here creates the expected SD in a domain as
well as on standalone servers. */
if ((flags & O_CREAT) && has_acls () && pc.isremote ())
@ -1609,7 +1609,7 @@ fhandler_base::fpathconf (int v)
case _PC_NAME_MAX:
/* NAME_MAX is without trailing \0 */
if (!pc.isdir ())
return NAME_MAX;
return NAME_MAX;
ret = NT_MAX_PATH - strlen (get_name ()) - 2;
return ret < 0 ? 0 : ret > NAME_MAX ? NAME_MAX : ret;
case _PC_PATH_MAX:

View File

@ -394,13 +394,13 @@ class fhandler_mailslot : public fhandler_base
select_record *select_read (select_record *s);
};
struct wsa_event
struct wsa_event
{
LONG serial_number;
long events;
int connect_errorcode;
pid_t owner;
};
};
class fhandler_socket: public fhandler_base
{

View File

@ -785,7 +785,7 @@ fhandler_disk_file::fchmod (mode_t mode)
if (pc.fs_is_nfs ())
{
/* chmod on NFS shares works by writing an EA of type NfsV3Attributes.
Only type and mode have to be set. Apparently type isn't checked
Only type and mode have to be set. Apparently type isn't checked
for consistency, so it's sufficent to set it to NF3REG all the time. */
struct {
FILE_FULL_EA_INFORMATION ffei;
@ -806,7 +806,7 @@ fhandler_disk_file::fchmod (mode_t mode)
if (!NT_SUCCESS (status))
__seterrno_from_nt_status (status);
else
res = 0;
res = 0;
goto out;
}
@ -1571,7 +1571,7 @@ fhandler_disk_file::opendir (int fd)
persistent ACLs, FileDirectoryInformation otherwise.
NFS clients hide dangling symlinks from directory queries,
unless you use the FileNamesInformation info class.
unless you use the FileNamesInformation info class.
On newer NFS clients (>=Vista) FileIdBothDirectoryInformation
works fine, but only if the NFS share is mounted to a drive
letter. TODO: We don't test that here for now, but it might
@ -1582,7 +1582,7 @@ fhandler_disk_file::opendir (int fd)
{
dir->__flags |= dirent_set_d_ino;
if (pc.fs_is_nfs ())
dir->__flags |= dirent_nfs_d_ino;
dir->__flags |= dirent_nfs_d_ino;
else if (wincap.has_fileid_dirinfo ()
&& !pc.has_buggy_fileid_dirinfo ())
dir->__flags |= dirent_get_d_ino;
@ -1714,7 +1714,7 @@ fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err,
{
tmp_pathbuf tp;
UNICODE_STRING fbuf;
tp.u_get (&fbuf);
RtlCopyUnicodeString (&fbuf, pc.get_nt_native_path ());
RtlAppendUnicodeToString (&fbuf, L"\\");
@ -1853,7 +1853,7 @@ go_ahead:
{
FileName = ((PFILE_NAMES_INFORMATION) buf)->FileName;
FileNameLength = ((PFILE_NAMES_INFORMATION) buf)->FileNameLength;
}
}
else
{
FileName = ((PFILE_DIRECTORY_INFORMATION) buf)->FileName;

View File

@ -86,13 +86,26 @@ fhandler_fifo::open (int flags, mode_t)
LPSECURITY_ATTRIBUTES sa_buf =
sec_user ((PSECURITY_ATTRIBUTES) char_sa_buf, cygheap->user.sid());
mode |= FILE_FLAG_OVERLAPPED;
HANDLE h = CreateNamedPipe(npname, mode, FIFO_PIPE_MODE,
PIPE_UNLIMITED_INSTANCES, 0, 0,
NMPWAIT_WAIT_FOREVER, sa_buf);
HANDLE h;
DWORD err;
bool nonblocking_write = !!((flags & (O_WRONLY | O_NONBLOCK)) == (O_WRONLY | O_NONBLOCK));
if (nonblocking_write)
{
h = INVALID_HANDLE_VALUE;
err = ERROR_ACCESS_DENIED;
}
else
{
h = CreateNamedPipe(npname, mode, FIFO_PIPE_MODE,
PIPE_UNLIMITED_INSTANCES, 0, 0,
NMPWAIT_WAIT_FOREVER, sa_buf);
err = GetLastError ();
}
if (h != INVALID_HANDLE_VALUE)
wait_state = fifo_wait_for_client;
else
switch (GetLastError ())
switch (err)
{
case ERROR_ACCESS_DENIED:
h = open_nonserver (npname, low_flags, sa_buf);
@ -101,6 +114,11 @@ fhandler_fifo::open (int flags, mode_t)
wait_state = fifo_wait_for_server;
break;
}
if (nonblocking_write && GetLastError () == ERROR_FILE_NOT_FOUND)
{
set_errno (ENXIO);
break;
}
/* fall through intentionally */
default:
__seterrno ();

View File

@ -1,6 +1,6 @@
/* fhandler_netdrive.cc: fhandler for // and //MACHINE handling
Copyright 2005 Red Hat, Inc.
Copyright 2005, 2006, 2007, 2008 Red Hat, Inc.
This file is part of Cygwin.
@ -107,7 +107,7 @@ thread_netdrive (void *arg)
case GET_RESOURCE_ENUM:
nh = (struct net_hdls *) ndi->in;
if (!nh->dom)
{
{
ndi->ret = ERROR_NO_MORE_ITEMS;
break;
}

View File

@ -1452,7 +1452,7 @@ fhandler_socket::send_internal (struct _WSABUF *wsabuf, DWORD wsacnt, int flags,
else if (is_nonblocking () || err != WSAEWOULDBLOCK)
break;
}
if (sum)
res = sum;
else if (res == SOCKET_ERROR)

View File

@ -13,8 +13,8 @@
The essential code of the lf_XXX functions has been taken from the
module src/sys/kern/kern_lockf.c. It has been adapted to use NT
global namespace subdirs and event objects for synchronization
purposes.
purposes.
So, the following copyright applies to most of the code in the lf_XXX
functions.
@ -49,7 +49,7 @@
* SUCH DAMAGE.
*
* @(#)ufs_lockf.c 8.3 (Berkeley) 1/6/94
*/
*/
/*
* The flock() function is based upon source taken from the Red Hat
@ -354,7 +354,7 @@ fhandler_base::del_my_locks (bool after_fork)
if (node)
{
bool no_locks_left =
node->del_my_locks (after_fork ? 0 : get_unique_id (), get_handle ());
node->del_my_locks (after_fork ? 0 : get_unique_id (), get_handle ());
if (no_locks_left)
{
LIST_REMOVE (node, i_next);
@ -501,28 +501,28 @@ inode_t::get_all_locks_list ()
continue;
short type = wcstol (endptr + 1, &endptr, 16);
if ((type != F_RDLCK && type != F_WRLCK) || !endptr || *endptr != L'-')
continue;
continue;
_off64_t start = (_off64_t) wcstoull (endptr + 1, &endptr, 16);
if (start < 0 || !endptr || *endptr != L'-')
continue;
continue;
_off64_t end = (_off64_t) wcstoull (endptr + 1, &endptr, 16);
if (end < -1LL || (end > 0 && end < start) || !endptr || *endptr != L'-')
continue;
continue;
long long id = wcstoll (endptr + 1, &endptr, 16);
if (!endptr || *endptr != L'-'
|| ((flags & F_POSIX) && (id < 1 || id > ULONG_MAX)))
continue;
continue;
DWORD wid = wcstoul (endptr + 1, &endptr, 16);
if (endptr && *endptr != L'\0')
continue;
continue;
if (lock - i_all_lf >= MAX_LOCKF_CNT)
{
{
system_printf ("Warning, can't handle more than %d locks per file.",
MAX_LOCKF_CNT);
break;
}
if (lock > i_all_lf)
lock[-1].lf_next = lock;
lock[-1].lf_next = lock;
new (lock++) lockf_t (this, &i_all_lf, flags, type, start, end, id, wid);
}
/* If no lock has been found, return NULL. */
@ -637,7 +637,7 @@ fhandler_disk_file::lock (int a_op, struct __flock64 *fl)
short a_flags = fl->l_type & (F_POSIX | F_FLOCK);
short type = fl->l_type & (F_RDLCK | F_WRLCK | F_UNLCK);
if (!a_flags)
a_flags = F_POSIX; /* default */
if (a_op == F_SETLKW)
@ -652,21 +652,21 @@ fhandler_disk_file::lock (int a_op, struct __flock64 *fl)
a_op = F_UNLCK;
break;
case F_RDLCK:
if (!(get_access () & GENERIC_READ))
if (!(get_access () & GENERIC_READ))
{
set_errno (EBADF);
return -1;
}
break;
case F_WRLCK:
if (!(get_access () & GENERIC_WRITE))
if (!(get_access () & GENERIC_WRITE))
{
set_errno (EBADF);
return -1;
}
break;
default:
set_errno (EINVAL);
set_errno (EINVAL);
return -1;
}
@ -776,7 +776,7 @@ fhandler_disk_file::lock (int a_op, struct __flock64 *fl)
{
clean = new lockf_t ();
if (!clean)
{
{
node->UNLOCK ();
set_errno (ENOLCK);
return -1;
@ -805,9 +805,9 @@ fhandler_disk_file::lock (int a_op, struct __flock64 *fl)
case F_UNLCK:
error = lf_clearlock (lock, &clean, get_handle ());
lock->lf_next = clean;
clean = lock;
clean = lock;
break;
case F_GETLK:
error = lf_getlock (lock, node, fl);
lock->lf_next = clean;
@ -850,7 +850,7 @@ fhandler_disk_file::lock (int a_op, struct __flock64 *fl)
*/
static int
lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
{
{
lockf_t *block;
lockf_t **head = lock->lf_head;
lockf_t **prev, *overlap;
@ -896,7 +896,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
* do not go off into neverland.
*/
/* FIXME: We check the handle count of all the lock event objects
this process holds. If it's > 1, another process is
this process holds. If it's > 1, another process is
waiting for one of our locks. This method isn't overly
intelligent. If it turns out to be too dumb, we might
have to remove it or to find another method. */
@ -937,7 +937,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
}
SetThreadPriority (GetCurrentThread (), priority);
if (lock->lf_flags & F_POSIX)
{
{
HANDLE proc = OpenProcess (SYNCHRONIZE, FALSE, block->lf_wid);
if (!proc)
{
@ -955,7 +955,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
CloseHandle (proc);
}
else
{
{
HANDLE w4[2] = { obj, signal_arrived };
node->UNLOCK ();
/* Unfortunately, since BSD flock locks are not attached to a
@ -977,7 +977,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
/* The lock object has been set to signalled. */
break;
case WAIT_OBJECT_0 + 1:
/* For POSIX locks, the process holding the lock has exited. */
/* For POSIX locks, the process holding the lock has exited. */
if (lock->lf_flags & F_POSIX)
break;
/*FALLTHRU*/
@ -1016,16 +1016,16 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
*/
switch (ovcase)
{
case 0: /* no overlap */
case 0: /* no overlap */
if (needtolink)
{
*prev = lock;
lock->lf_next = overlap;
lock->create_lock_obj ();
}
break;
}
break;
case 1: /* overlap == lock */
case 1: /* overlap == lock */
/*
* If downgrading lock, others may be
* able to acquire it.
@ -1038,7 +1038,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
*clean = lock;
break;
case 2: /* overlap contains lock */
case 2: /* overlap contains lock */
/*
* Check for common starting point and different types.
*/
@ -1063,7 +1063,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
lock->lf_next->create_lock_obj ();
break;
case 3: /* lock contains overlap */
case 3: /* lock contains overlap */
/*
* If downgrading lock, others may be able to
* acquire it, otherwise take the list.
@ -1087,7 +1087,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
*clean = overlap;
continue;
case 4: /* overlap starts before lock */
case 4: /* overlap starts before lock */
/*
* Add lock after overlap on the list.
*/
@ -1101,7 +1101,7 @@ lf_setlock (lockf_t *lock, inode_t *node, lockf_t **clean, HANDLE fhdl)
needtolink = 0;
continue;
case 5: /* overlap ends after lock */
case 5: /* overlap ends after lock */
/*
* Add the new lock before overlap.
*/
@ -1146,13 +1146,13 @@ lf_clearlock (lockf_t *unlock, lockf_t **clean, HANDLE fhdl)
switch (ovcase)
{
case 1: /* overlap == lock */
case 1: /* overlap == lock */
*prev = overlap->lf_next;
overlap->lf_next = *clean;
*clean = overlap;
break;
case 2: /* overlap contains lock: split it */
case 2: /* overlap contains lock: split it */
if (overlap->lf_start == unlock->lf_start)
{
overlap->lf_start = unlock->lf_end + 1;
@ -1166,24 +1166,24 @@ lf_clearlock (lockf_t *unlock, lockf_t **clean, HANDLE fhdl)
overlap->lf_next->create_lock_obj ();
break;
case 3: /* lock contains overlap */
case 3: /* lock contains overlap */
*prev = overlap->lf_next;
lf = overlap->lf_next;
overlap->lf_next = *clean;
*clean = overlap;
continue;
case 4: /* overlap starts before lock */
overlap->lf_end = unlock->lf_start - 1;
prev = &overlap->lf_next;
lf = overlap->lf_next;
case 4: /* overlap starts before lock */
overlap->lf_end = unlock->lf_start - 1;
prev = &overlap->lf_next;
lf = overlap->lf_next;
overlap->create_lock_obj ();
continue;
continue;
case 5: /* overlap ends after lock */
overlap->lf_start = unlock->lf_end + 1;
case 5: /* overlap ends after lock */
overlap->lf_start = unlock->lf_end + 1;
overlap->create_lock_obj ();
break;
break;
}
break;
}
@ -1229,7 +1229,7 @@ lf_getlock (lockf_t *lock, inode_t *node, struct __flock64 *fl)
*/
static lockf_t *
lf_getblock (lockf_t *lock, inode_t *node)
{
{
lockf_t **prev, *overlap;
lockf_t *lf = node->get_all_locks_list ();
int ovcase;
@ -1272,7 +1272,7 @@ lf_getblock (lockf_t *lock, inode_t *node)
*
* NOTE: this returns only the FIRST overlapping lock. There
* may be more than one.
*/
*/
static int
lf_findoverlap (lockf_t *lf, lockf_t *lock, int type, lockf_t ***prev,
lockf_t **overlap)
@ -1295,7 +1295,7 @@ lf_findoverlap (lockf_t *lf, lockf_t *lock, int type, lockf_t ***prev,
*prev = &lf->lf_next;
*overlap = lf = lf->lf_next;
continue;
}
}
/*
* OK, check for overlap
*
@ -1316,7 +1316,7 @@ lf_findoverlap (lockf_t *lf, lockf_t *lock, int type, lockf_t ***prev,
*prev = &lf->lf_next;
*overlap = lf = lf->lf_next;
continue;
}
}
if ((lf->lf_start == start) && (lf->lf_end == end))
{
/* Case 1 */
@ -1360,7 +1360,7 @@ lf_split (lockf_t *lock1, lockf_t *lock2, lockf_t **split)
{
lockf_t *splitlock;
/*
/*
* Check to see if spliting into only two pieces.
*/
if (lock1->lf_start == lock2->lf_start)

View File

@ -326,14 +326,14 @@ details. */
181: Export cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list.
182: Export lockf.
FIXME: Removed 12 year old and entirely wrong wprintf function at
this point. We need a working implementation soon.
this point. We need a working implementation soon.
183: Export open_memstream, fmemopen.
184: Export openat, faccessat, fchmodat, fchownat, fstatat, futimesat,
linkat, mkdirat, mkfifoat, mknodat, readlinkat, renameat, symlinkat,
linkat, mkdirat, mkfifoat, mknodat, readlinkat, renameat, symlinkat,
unlinkat.
185: Export futimens, utimensat.
186: Remove ancient V8 regexp functions. Also eliminate old crt0 interface
which provided its own user_data structure.
which provided its own user_data structure.
187: Export cfmakeraw.
188: Export CW_SET_PRIV_KEY.
*/

View File

@ -74,7 +74,7 @@ OpenEventW (DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpName)
OBJECT_ATTRIBUTES attr;
NTSTATUS status;
ULONG flags = 0;
if (bInheritHandle)
flags |= OBJ_INHERIT;
if (lpName)

View File

@ -42,8 +42,8 @@ details. */
#define isproc(path) \
(path_prefix_p (proc, (path), proc_len, false))
/* is_unc_share: Return non-zero if PATH begins with //server/share
or with one of the native prefixes //./ or //?/
/* is_unc_share: Return non-zero if PATH begins with //server/share
or with one of the native prefixes //./ or //?/
This function is only used to test for valid input strings.
The later normalization drops the native prefixes. */
@ -105,7 +105,7 @@ mount_info::init ()
nmounts = 0;
PWCHAR pathend;
WCHAR path[PATH_MAX];
pathend = wcpcpy (path, cygwin_shared->installation_root);
create_root_entry (path);
pathend = wcpcpy (pathend, L"\\etc\\fstab");
@ -616,7 +616,7 @@ conv_fstab_spaces (char *field)
}
struct opt
{
{
const char *name;
unsigned val;
bool clear;
@ -643,21 +643,21 @@ read_flags (char *options, unsigned &flags)
{
char *p = strchr (options, ',');
if (p)
*p++ = '\0';
*p++ = '\0';
else
p = strchr (options, '\0');
p = strchr (options, '\0');
for (opt *o = oopts;
o < (oopts + (sizeof (oopts) / sizeof (oopts[0])));
o++)
if (strcmp (options, o->name) == 0)
{
if (o->clear)
flags &= ~o->val;
else
flags |= o->val;
goto gotit;
}
if (strcmp (options, o->name) == 0)
{
if (o->clear)
flags &= ~o->val;
else
flags |= o->val;
goto gotit;
}
system_printf ("invalid fstab option - '%s'", options);
return false;
@ -736,7 +736,7 @@ mount_info::from_fstab (bool user, WCHAR fstab[], PWCHAR fstab_end)
NT_MAX_PATH - (fstab_end - fstab),
cygheap->user.name ());
/* Make sure special chars in the username are converted according to
the rules. */
the rules. */
transform_chars (username, username + wcslen (username) - 1);
}
RtlInitUnicodeString (&upath, fstab);
@ -770,7 +770,7 @@ mount_info::from_fstab (bool user, WCHAR fstab[], PWCHAR fstab_end)
retry:
bool got_nl = false;
while (got < buf + len && (end = strchr (got, '\n')))
{
{
got_nl = true;
end[end[-1] == '\r' ? -1 : 0] = '\0';
if (!from_fstab_line (got, user))
@ -779,21 +779,21 @@ retry:
++line;
}
if (len < (sizeof (buf) - 2))
break;
break;
/* Check if the buffer contained at least one \n. If not, the
line length is > 32K. We don't take such long lines. Print
line length is > 32K. We don't take such long lines. Print
a debug message and skip this line entirely. */
if (!got_nl)
{
{
system_printf ("%W: Line %d too long, skipping...", fstab, line);
while (NT_SUCCESS (NtReadFile (fh, NULL, NULL, NULL, &io, buf,
(sizeof (buf) - 2), NULL, NULL)))
(sizeof (buf) - 2), NULL, NULL)))
{
len = io.Information;
buf[len] = buf[len + 1] = '\0';
got = strchr (buf, '\n');
if (got)
{
{
++got;
++line;
goto retry;
@ -803,7 +803,7 @@ retry:
break;
}
/* We have to read once more. Move remaining bytes to the start of
the buffer and reposition got so that it points to the end of
the buffer and reposition got so that it points to the end of
the remaining bytes. */
len = buf + len - got;
memmove (buf, got, len);
@ -869,7 +869,7 @@ mount_info::get_cygdrive_info (char *user, char *system, char *user_flags,
strcpy (path, cygdrive);
/* Strip trailing slash for backward compatibility. */
if (cygdrive_len > 2)
path[cygdrive_len - 1] = '\0';
path[cygdrive_len - 1] = '\0';
}
if (flags)
strcpy (flags, (cygdrive_flags & MOUNT_BINARY) ? "binmode" : "textmode");
@ -1017,7 +1017,7 @@ mount_info::add_item (const char *native, const char *posix,
for (i = 0; i < nmounts; i++)
{
if (!strcmp (mount[i].posix_path, posixtmp))
{
{
/* Don't allow to override a system mount with a user mount. */
if ((mount[i].flags & MOUNT_SYSTEM) && !(mountflags & MOUNT_SYSTEM))
{

View File

@ -14,5 +14,5 @@ struct nfs_aol_ffei_t nfs_aol_ffei = { 0, 0, sizeof (NFS_ACT_ON_LINK) - 1, 0,
NFS_ACT_ON_LINK };
uint32_t nfs_type_mapping[] = { 0, S_IFREG, S_IFDIR, S_IFBLK,
S_IFCHR, S_IFLNK, S_IFSOCK, S_IFIFO };
S_IFCHR, S_IFLNK, S_IFSOCK, S_IFIFO };

View File

@ -203,10 +203,10 @@ typedef struct _FILE_ID_BOTH_DIR_INFORMATION
/* Specific ACCESS_MASKSs for objects created in Cygwin. */
#define CYG_SHARED_DIR_ACCESS (DIRECTORY_QUERY \
| DIRECTORY_TRAVERSE \
| DIRECTORY_CREATE_SUBDIRECTORY \
| DIRECTORY_CREATE_OBJECT \
| READ_CONTROL)
| DIRECTORY_TRAVERSE \
| DIRECTORY_CREATE_SUBDIRECTORY \
| DIRECTORY_CREATE_OBJECT \
| READ_CONTROL)
#define CYG_MUTANT_ACCESS (MUTANT_QUERY_STATE \
| SYNCHRONIZE \
@ -863,7 +863,7 @@ extern "C"
NTSTATUS NTAPI NtCreateDirectoryObject (PHANDLE, ACCESS_MASK,
POBJECT_ATTRIBUTES);
NTSTATUS NTAPI NtCreateEvent (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
EVENT_TYPE, BOOLEAN);
EVENT_TYPE, BOOLEAN);
NTSTATUS NTAPI NtCreateFile (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG,
ULONG, ULONG, PVOID, ULONG);

View File

@ -1,4 +1,4 @@
/* path.cc: path support.
/* path.cc: path support.
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008 Red Hat, Inc.
@ -505,7 +505,7 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
&& FS_IS_SAMBA);
if (!is_samba ())
{
{
is_netapp (RtlEqualUnicodeString (&fsname, &testname, FALSE)
&& FS_IS_NETAPP_DATAONTAP);
@ -515,7 +515,7 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
if (!is_nfs ())
{
/* Known remote file systems which can't handle calls to
NtQueryDirectoryFile(FileIdBothDirectoryInformation) */
NtQueryDirectoryFile(FileIdBothDirectoryInformation) */
RtlInitUnicodeString (&testname, L"UNIXFS");
has_buggy_fileid_dirinfo (RtlEqualUnicodeString (&fsname,
&testname,
@ -1525,6 +1525,7 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
NTSTATUS status;
HANDLE fh;
tmp_pathbuf tp;
unsigned check_opt;
/* POSIX says that empty 'newpath' is invalid input while empty
'oldpath' is valid -- it's symlink resolver job to verify if
@ -1551,14 +1552,16 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
set_errno (ENOENT);
goto done;
}
check_opt = PC_SYM_NOFOLLOW | PC_POSIX | (isdevice ? PC_NOWARN : 0);
/* We need the normalized full path below. */
win32_newpath.check (newpath, PC_SYM_NOFOLLOW | PC_POSIX, stat_suffixes);
win32_newpath.check (newpath, check_opt, stat_suffixes);
if (use_winsym && !win32_newpath.exists ()
&& (isdevice || !win32_newpath.fs_is_nfs ()))
{
char *newplnk = tp.c_get ();
stpcpy (stpcpy (newplnk, newpath), ".lnk");
win32_newpath.check (newplnk, PC_SYM_NOFOLLOW | PC_POSIX);
win32_newpath.check (newplnk, check_opt);
}
if (win32_newpath.error)
@ -1621,7 +1624,11 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
/* The symlink target is relative to the directory in which
the symlink gets created, not relative to the cwd. Therefore
we have to mangle the path quite a bit before calling path_conv. */
if (!isabspath (oldpath))
if (isabspath (oldpath))
win32_oldpath.check (oldpath,
PC_SYM_NOFOLLOW,
stat_suffixes);
else
{
len = strrchr (win32_newpath.normalized_path, '/')
- win32_newpath.normalized_path + 1;
@ -1630,8 +1637,6 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
oldpath);
win32_oldpath.check (absoldpath, PC_SYM_NOFOLLOW, stat_suffixes);
}
else
win32_oldpath.check (oldpath, PC_SYM_NOFOLLOW, stat_suffixes);
if (SUCCEEDED (SHGetDesktopFolder (&psl)))
{
WCHAR wc_path[win32_oldpath.get_wide_win32_path_len () + 1];
@ -1777,7 +1782,7 @@ symlink_worker (const char *oldpath, const char *newpath, bool use_winsym,
}
if (win32_newpath.has_acls () && win32_newpath.isremote ())
set_file_attribute (fh, win32_newpath, ILLEGAL_UID, ILLEGAL_GID,
S_IFLNK | STD_RBITS | STD_WBITS);
S_IFLNK | STD_RBITS | STD_WBITS);
status = NtWriteFile (fh, NULL, NULL, NULL, &io, buf, cp - buf, NULL, NULL);
if (NT_SUCCESS (status) && io.Information == (ULONG) (cp - buf))
{

View File

@ -720,7 +720,7 @@ verify_token (HANDLE token, cygsid &usersid, user_groups &groups, bool *pintern)
groups in the token, which are not in the group list set
with setgroups(). That's rather dangerous. What we're
really interested in is that all groups in the setgroups()
list are in the token. A token created through ADVAPI
list are in the token. A token created through ADVAPI
should be allowed to contain more groups than requested
through setgroups(), esecially since Vista and the
addition of integrity groups. So we disable this statement
@ -1221,7 +1221,8 @@ lsaprivkeyauth (struct passwd *pw)
}
/* The key is not 0-terminated. */
PWCHAR passwd = (PWCHAR) alloca (data->Length + sizeof (WCHAR));
PWCHAR passwd;
passwd = (PWCHAR) alloca (data->Length + sizeof (WCHAR));
*wcpncpy (passwd, data->Buffer, data->Length / sizeof (WCHAR)) = L'\0';
LsaFreeMemory (data);
debug_printf ("Try logon for %W\\%W", domain, user);

View File

@ -543,7 +543,7 @@ _everyone_sd (void *buf, ACCESS_MASK access)
InitializeSecurityDescriptor (psd, SECURITY_DESCRIPTOR_REVISION);
PACL dacl = (PACL) (psd + 1);
InitializeAcl (dacl, MAX_DACL_LEN (1), ACL_REVISION);
if (!AddAccessAllowedAce (dacl, ACL_REVISION, access,
if (!AddAccessAllowedAce (dacl, ACL_REVISION, access,
well_known_world_sid))
{
debug_printf ("AddAccessAllowedAce: %lu", GetLastError ());

View File

@ -52,13 +52,13 @@ get_shared_parent_dir ()
_cygwin_testing ? cygwin_version.dll_build_date : "");
RtlInitUnicodeString (&uname, bnoname);
InitializeObjectAttributes (&attr, &uname, OBJ_INHERIT | OBJ_OPENIF,
NULL, everyone_sd (CYG_SHARED_DIR_ACCESS));
NULL, everyone_sd (CYG_SHARED_DIR_ACCESS));
status = NtCreateDirectoryObject (&dir, CYG_SHARED_DIR_ACCESS, &attr);
if (!NT_SUCCESS (status))
api_fatal ("NtCreateDirectoryObject(%S): %p", &uname, status);
api_fatal ("NtCreateDirectoryObject(%S): %p", &uname, status);
}
return dir;
}
}
HANDLE
get_session_parent_dir ()
@ -77,7 +77,7 @@ get_session_parent_dir ()
if (!NT_SUCCESS (status) || psi.SessionId == 0)
dir = get_shared_parent_dir ();
else
{
{
WCHAR bnoname[MAX_PATH];
__small_swprintf (bnoname,
L"\\Sessions\\BNOLINKS\\%d\\%s%s",
@ -92,7 +92,7 @@ get_session_parent_dir ()
}
}
return dir;
}
}
char * __stdcall
shared_name (char *ret_buf, const char *str, int num)
@ -150,7 +150,7 @@ open_shared (const char *name, int n, HANDLE& shared_h, DWORD size,
else
{
shared_h = CreateFileMapping (INVALID_HANDLE_VALUE, psa,
PAGE_READWRITE, 0, size, mapname);
PAGE_READWRITE, 0, size, mapname);
if (GetLastError () == ERROR_ALREADY_EXISTS)
m = SH_JUSTOPEN;
}
@ -211,7 +211,7 @@ user_shared_initialize ()
/* Correct the user name with what's defined in /etc/passwd before
loading the user fstab file. */
if (pw)
cygheap->user.set_name (pw->pw_name);
cygheap->user.set_name (pw->pw_name);
user_shared->mountinfo.init (); /* Initialize the mount table. */
user_shared->cb = sizeof (*user_shared);
}

View File

@ -358,7 +358,7 @@ spawn_guts (const char *prog_arg, const char *const *argv,
wascygexec = real_path.iscygexec ();
res = newargv.fixup (prog_arg, real_path, ext);
if (!real_path.iscygexec ()
&& (cygheap->cwd.drive_length == 0
|| cygheap->cwd.win32.Length >= MAX_PATH * sizeof (WCHAR)))
@ -480,7 +480,7 @@ spawn_guts (const char *prog_arg, const char *const *argv,
|| (runpath[5] != L':' /* UNC path */
&& len < (MAX_PATH + 6) * sizeof (WCHAR)))
{
PWCHAR r = runpath + 4;
PWCHAR r = runpath + 4;
if (r[1] != L':') /* UNC path */
*(r += 2) = L'\\';
if (!RtlIsDosDeviceName_U (r))

View File

@ -2504,7 +2504,7 @@ seteuid32 (__uid32_t uid)
the privileged user instead of using the orignal token. This can have
unfortunate side effects. The created token has different group
memberships, different user rights, and misses possible network
credentials.
credentials.
Therefore we try this shortcut now. When switching back to the
privileged user, we probably always want a correct (aka original)
user token for this privileged user, not only in sshd. */
@ -2537,7 +2537,7 @@ seteuid32 (__uid32_t uid)
{
new_token = lsaprivkeyauth (pw_new);
if (new_token)
{
{
/* We have to verify this token since settings in /etc/group
might render it unusable im terms of group membership. */
if (!verify_token (new_token, usersid, groups))
@ -2547,7 +2547,7 @@ seteuid32 (__uid32_t uid)
}
}
if (!new_token)
{
{
debug_printf ("lsaprivkeyauth failed, try lsaauth.");
if (!(new_token = lsaauth (usersid, groups, pw_new)))
{
@ -3619,7 +3619,7 @@ gen_full_path_at (char *path_ret, int dirfd, const char *pathname,
if (dirfd == AT_FDCWD)
p = stpcpy (path_ret, cygheap->cwd.posix);
else
{
{
cygheap_fdget cfd (dirfd);
if (cfd < 0)
return -1;
@ -3631,7 +3631,7 @@ gen_full_path_at (char *path_ret, int dirfd, const char *pathname,
p = stpcpy (path_ret, cfd->get_name ());
}
if (!p)
{
{
set_errno (ENOTDIR);
return -1;
}
@ -3655,7 +3655,7 @@ openat (int dirfd, const char *pathname, int flags, ...)
char *path = tp.c_get ();
if (gen_full_path_at (path, dirfd, pathname))
return -1;
va_list ap;
mode_t mode;
@ -3680,11 +3680,11 @@ faccessat (int dirfd, const char *pathname, int mode, int flags)
if (flags & ~(F_OK|R_OK|W_OK|X_OK))
set_errno (EINVAL);
else
{
{
fhandler_base *fh = build_fh_name (path, NULL,
(flags & AT_SYMLINK_NOFOLLOW)
? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
stat_suffixes);
stat_suffixes);
if (fh)
{
res = fh->fhaccess (mode);