Actually check in files.
This commit is contained in:
parent
73b4949a87
commit
4a08e9bce4
@ -495,7 +495,7 @@ public:
|
|||||||
void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
|
void create_guard (SECURITY_ATTRIBUTES *sa) {guard = CreateMutex (sa, FALSE, NULL);}
|
||||||
int dup (fhandler_base *child);
|
int dup (fhandler_base *child);
|
||||||
int ioctl (unsigned int cmd, void *);
|
int ioctl (unsigned int cmd, void *);
|
||||||
void fixup_after_fork (HANDLE);
|
virtual void fixup_after_fork (HANDLE);
|
||||||
void fixup_after_exec ();
|
void fixup_after_exec ();
|
||||||
bool hit_eof ();
|
bool hit_eof ();
|
||||||
void set_eof () {broken_pipe = true;}
|
void set_eof () {broken_pipe = true;}
|
||||||
@ -509,7 +509,6 @@ public:
|
|||||||
class fhandler_fifo: public fhandler_pipe
|
class fhandler_fifo: public fhandler_pipe
|
||||||
{
|
{
|
||||||
HANDLE output_handle;
|
HANDLE output_handle;
|
||||||
HANDLE owner; // You can't have too many mutexes, now, can you?
|
|
||||||
long read_use;
|
long read_use;
|
||||||
long write_use;
|
long write_use;
|
||||||
virtual HANDLE& get_io_handle () { return io_handle ?: output_handle; }
|
virtual HANDLE& get_io_handle () { return io_handle ?: output_handle; }
|
||||||
|
@ -219,7 +219,7 @@ fhandler_base::fstat_fs (struct __stat64 *buf)
|
|||||||
|
|
||||||
if (get_io_handle ())
|
if (get_io_handle ())
|
||||||
{
|
{
|
||||||
if (nohandle ())
|
if (nohandle () || is_fs_special ())
|
||||||
return fstat_by_name (buf);
|
return fstat_by_name (buf);
|
||||||
else
|
else
|
||||||
return fstat_by_handle (buf);
|
return fstat_by_handle (buf);
|
||||||
@ -325,7 +325,7 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
|
|||||||
buf->st_blocks = (nAllocSize + S_BLKSIZE - 1) / S_BLKSIZE;
|
buf->st_blocks = (nAllocSize + S_BLKSIZE - 1) / S_BLKSIZE;
|
||||||
else if (pc.has_attribute (FILE_ATTRIBUTE_COMPRESSED
|
else if (pc.has_attribute (FILE_ATTRIBUTE_COMPRESSED
|
||||||
| FILE_ATTRIBUTE_SPARSE_FILE)
|
| FILE_ATTRIBUTE_SPARSE_FILE)
|
||||||
&& get_io_handle ()
|
&& get_io_handle () && !is_fs_special ()
|
||||||
&& !NtQueryInformationFile (get_io_handle (), &st, (PVOID) &fci,
|
&& !NtQueryInformationFile (get_io_handle (), &st, (PVOID) &fci,
|
||||||
sizeof fci, FileCompressionInformation))
|
sizeof fci, FileCompressionInformation))
|
||||||
/* Otherwise we request the actual amount of bytes allocated for
|
/* Otherwise we request the actual amount of bytes allocated for
|
||||||
@ -352,8 +352,8 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
|
|||||||
else if (pc.issocket ())
|
else if (pc.issocket ())
|
||||||
buf->st_mode = S_IFSOCK;
|
buf->st_mode = S_IFSOCK;
|
||||||
|
|
||||||
if (!get_file_attribute (pc.has_acls (), get_io_handle (), get_win32_name (),
|
if (!get_file_attribute (pc.has_acls (), is_fs_special () ? NULL: get_io_handle (),
|
||||||
&buf->st_mode, &buf->st_uid, &buf->st_gid))
|
get_win32_name (), &buf->st_mode, &buf->st_uid, &buf->st_gid))
|
||||||
{
|
{
|
||||||
/* If read-only attribute is set, modify ntsec return value */
|
/* If read-only attribute is set, modify ntsec return value */
|
||||||
if (pc.has_attribute (FILE_ATTRIBUTE_READONLY) && !pc.issymlink ())
|
if (pc.has_attribute (FILE_ATTRIBUTE_READONLY) && !pc.issymlink ())
|
||||||
@ -373,7 +373,7 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
|
|||||||
{
|
{
|
||||||
buf->st_mode |= STD_RBITS;
|
buf->st_mode |= STD_RBITS;
|
||||||
|
|
||||||
if (!pc.has_attribute (FILE_ATTRIBUTE_READONLY))
|
if (!pc.has_attribute (FILE_ATTRIBUTE_READONLY) && !pc.issymlink ())
|
||||||
buf->st_mode |= STD_WBITS;
|
buf->st_mode |= STD_WBITS;
|
||||||
/* | S_IWGRP | S_IWOTH; we don't give write to group etc */
|
/* | S_IWGRP | S_IWOTH; we don't give write to group etc */
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ fhandler_fifo::open_not_mine (int flags)
|
|||||||
__seterrno ();
|
__seterrno ();
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (!DuplicateHandle (hMainProc, fh->get_handle (), hMainProc,
|
if (!DuplicateHandle (hMainProc, fh->get_output_handle (), hMainProc,
|
||||||
&r.handles[1], 0, false, DUPLICATE_SAME_ACCESS))
|
&r.handles[1], 0, false, DUPLICATE_SAME_ACCESS))
|
||||||
{
|
{
|
||||||
CloseHandle (r.handles[0]);
|
CloseHandle (r.handles[0]);
|
||||||
@ -146,14 +146,14 @@ fhandler_fifo::open (int flags, mode_t)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
fhandler_pipe *fhs[2];
|
fhandler_pipe *fhs[2];
|
||||||
if (create (fhs, 0, flags, true))
|
if (create (fhs, 1, flags, true))
|
||||||
{
|
{
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
res = 0;
|
res = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
set_flags (fhs[0]->get_flags ());
|
set_flags (flags);
|
||||||
set_io_handle (fhs[0]->get_handle ());
|
set_io_handle (fhs[0]->get_handle ());
|
||||||
set_output_handle (fhs[1]->get_handle ());
|
set_output_handle (fhs[1]->get_handle ());
|
||||||
guard = fhs[0]->guard;
|
guard = fhs[0]->guard;
|
||||||
|
@ -610,6 +610,7 @@ _pinfo::commune_recv ()
|
|||||||
it[0] = it[1] = NULL; /* FIXME: possibly left a handle open in child? */
|
it[0] = it[1] = NULL; /* FIXME: possibly left a handle open in child? */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
debug_printf ("fifo found %p, %p", it[0], it[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle (hp);
|
CloseHandle (hp);
|
||||||
|
Loading…
Reference in New Issue
Block a user