* dtable.cc (build_fh_name_worker): Remove. Move all functionality
back into build_fh_name. (build_fh_name): Drop unused HANDLE parameter. Drop call to pc.fillin. Remove disabled build_fh_name with UNICODE_STRING name parameter. * dtable.h (build_fh_name): Drop HANDLE parameter from declaration. Remove declaration for build_fh_name with UNICODE_STRING name parameter. * path.cc (path_conv::fillin): Remove. (symlink_info::check): Fix comment. * path.h (path_conv::fillin): Remove declaration. * dir.cc: Accommodate change in build_fh_name parameters throughout. * sec_acl.cc: Ditto. * syscalls.cc: Ditto. * ntea.cc (getxattr_worker): Fix debug output. (setxattr_worker): Ditto. * times.cc (utimens_worker): Ditto.
This commit is contained in:
parent
eeda30d7d5
commit
4ee93264fd
|
@ -1,3 +1,22 @@
|
||||||
|
2010-01-12 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* dtable.cc (build_fh_name_worker): Remove. Move all functionality
|
||||||
|
back into build_fh_name.
|
||||||
|
(build_fh_name): Drop unused HANDLE parameter. Drop call to pc.fillin.
|
||||||
|
Remove disabled build_fh_name with UNICODE_STRING name parameter.
|
||||||
|
* dtable.h (build_fh_name): Drop HANDLE parameter from declaration.
|
||||||
|
Remove declaration for build_fh_name with UNICODE_STRING name parameter.
|
||||||
|
* path.cc (path_conv::fillin): Remove.
|
||||||
|
(symlink_info::check): Fix comment.
|
||||||
|
* path.h (path_conv::fillin): Remove declaration.
|
||||||
|
* dir.cc: Accommodate change in build_fh_name parameters throughout.
|
||||||
|
* sec_acl.cc: Ditto.
|
||||||
|
* syscalls.cc: Ditto.
|
||||||
|
|
||||||
|
* ntea.cc (getxattr_worker): Fix debug output.
|
||||||
|
(setxattr_worker): Ditto.
|
||||||
|
* times.cc (utimens_worker): Ditto.
|
||||||
|
|
||||||
2010-01-11 Corinna Vinschen <corinna@vinschen.de>
|
2010-01-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_proc.cc (format_proc_stat): Use new in_buf.
|
* fhandler_proc.cc (format_proc_stat): Use new in_buf.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dir.cc: Posix directory-related routines
|
/* dir.cc: Posix directory-related routines
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2006, 2007,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2006, 2007,
|
||||||
2008, 2009 Red Hat, Inc.
|
2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ opendir (const char *name)
|
||||||
fhandler_base *fh;
|
fhandler_base *fh;
|
||||||
DIR *res;
|
DIR *res;
|
||||||
|
|
||||||
fh = build_fh_name (name, NULL, PC_SYM_FOLLOW);
|
fh = build_fh_name (name, PC_SYM_FOLLOW);
|
||||||
if (!fh)
|
if (!fh)
|
||||||
res = NULL;
|
res = NULL;
|
||||||
else if (fh->exists ())
|
else if (fh->exists ())
|
||||||
|
@ -299,7 +299,7 @@ mkdir (const char *dir, mode_t mode)
|
||||||
while (p > dir && isdirsep (*p))
|
while (p > dir && isdirsep (*p))
|
||||||
*p-- = '\0';
|
*p-- = '\0';
|
||||||
}
|
}
|
||||||
if (!(fh = build_fh_name (dir, NULL, PC_SYM_NOFOLLOW)))
|
if (!(fh = build_fh_name (dir, PC_SYM_NOFOLLOW)))
|
||||||
goto done; /* errno already set */;
|
goto done; /* errno already set */;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
@ -329,7 +329,7 @@ rmdir (const char *dir)
|
||||||
if (efault.faulted (EFAULT))
|
if (efault.faulted (EFAULT))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!(fh = build_fh_name (dir, NULL, PC_SYM_NOFOLLOW)))
|
if (!(fh = build_fh_name (dir, PC_SYM_NOFOLLOW)))
|
||||||
goto done; /* errno already set */;
|
goto done; /* errno already set */;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dtable.cc: file descriptor support.
|
/* dtable.cc: file descriptor support.
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
2005, 2006, 2007, 2008, 2009 Red Hat, Inc.
|
2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -400,9 +400,10 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle)
|
||||||
|
|
||||||
#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
|
#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
|
||||||
|
|
||||||
static fhandler_base *
|
fhandler_base *
|
||||||
build_fh_name_worker (path_conv& pc, HANDLE h, unsigned opt, suffix_info *si)
|
build_fh_name (const char *name, unsigned opt, suffix_info *si)
|
||||||
{
|
{
|
||||||
|
path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
|
||||||
if (pc.error)
|
if (pc.error)
|
||||||
{
|
{
|
||||||
fhandler_base *fh = cnew (fhandler_nodevice) ();
|
fhandler_base *fh = cnew (fhandler_nodevice) ();
|
||||||
|
@ -412,27 +413,8 @@ build_fh_name_worker (path_conv& pc, HANDLE h, unsigned opt, suffix_info *si)
|
||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pc.exists () && h)
|
|
||||||
pc.fillin (h);
|
|
||||||
|
|
||||||
return build_fh_pc (pc);
|
return build_fh_pc (pc);
|
||||||
}
|
}
|
||||||
fhandler_base *
|
|
||||||
build_fh_name (const char *name, HANDLE h, unsigned opt, suffix_info *si)
|
|
||||||
{
|
|
||||||
path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
|
|
||||||
return build_fh_name_worker (pc, h, opt, si);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0 /* Not needed yet */
|
|
||||||
#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
|
|
||||||
fhandler_base *
|
|
||||||
build_fh_name (const UNICODE_STRING *name, HANDLE h, unsigned opt, suffix_info *si)
|
|
||||||
{
|
|
||||||
path_conv pc (name, opt | PC_NULLEMPTY | PC_POSIX, si);
|
|
||||||
return build_fh_name_worker (pc, h, opt, si);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
fhandler_base *
|
fhandler_base *
|
||||||
build_fh_dev (const device& dev, const char *unix_name)
|
build_fh_dev (const device& dev, const char *unix_name)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dtable.h: fd table definition.
|
/* dtable.h: fd table definition.
|
||||||
|
|
||||||
Copyright 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Red
|
Copyright 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||||
Hat, Inc.
|
2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -94,8 +94,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
fhandler_base *build_fh_dev (const device&, const char * = NULL);
|
fhandler_base *build_fh_dev (const device&, const char * = NULL);
|
||||||
fhandler_base *build_fh_name (const char *, HANDLE = NULL, unsigned = 0, suffix_info * = NULL);
|
fhandler_base *build_fh_name (const char *, unsigned = 0, suffix_info * = NULL);
|
||||||
fhandler_base *build_fh_name (const UNICODE_STRING *, HANDLE = NULL, unsigned = 0, suffix_info * = NULL);
|
|
||||||
fhandler_base *build_fh_pc (path_conv& pc, bool set_name = true);
|
fhandler_base *build_fh_pc (path_conv& pc, bool set_name = true);
|
||||||
|
|
||||||
void dtable_init ();
|
void dtable_init ();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* ntea.cc: code for manipulating Extended Attributes
|
/* ntea.cc: code for manipulating Extended Attributes
|
||||||
|
|
||||||
Copyright 1997, 1998, 2000, 2001, 2006, 2008 Red Hat, Inc.
|
Copyright 1997, 1998, 2000, 2001, 2006, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ getxattr_worker (path_conv &pc, const char *name, void *value, size_t size)
|
||||||
|
|
||||||
if (pc.error)
|
if (pc.error)
|
||||||
{
|
{
|
||||||
debug_printf ("got %d error from build_fh_name", pc.error);
|
debug_printf ("got %d error from path_conv", pc.error);
|
||||||
set_errno (pc.error);
|
set_errno (pc.error);
|
||||||
}
|
}
|
||||||
else if (pc.exists ())
|
else if (pc.exists ())
|
||||||
|
@ -424,7 +424,7 @@ setxattr_worker (path_conv &pc, const char *name, const void *value,
|
||||||
|
|
||||||
if (pc.error)
|
if (pc.error)
|
||||||
{
|
{
|
||||||
debug_printf ("got %d error from build_fh_name", pc.error);
|
debug_printf ("got %d error from path_conv", pc.error);
|
||||||
set_errno (pc.error);
|
set_errno (pc.error);
|
||||||
}
|
}
|
||||||
else if (pc.exists ())
|
else if (pc.exists ())
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* path.cc: path support.
|
/* path.cc: path support.
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||||
2006, 2007, 2008, 2009 Red Hat, Inc.
|
2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -371,19 +371,6 @@ mkrelpath (char *path, bool caseinsensitive)
|
||||||
strcpy (path, ".");
|
strcpy (path, ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
path_conv::fillin (HANDLE h)
|
|
||||||
{
|
|
||||||
IO_STATUS_BLOCK io;
|
|
||||||
FILE_BASIC_INFORMATION fbi;
|
|
||||||
|
|
||||||
if (NT_SUCCESS (NtQueryInformationFile (h, &io, &fbi, sizeof fbi,
|
|
||||||
FileBasicInformation)))
|
|
||||||
fileattr = fbi.FileAttributes;
|
|
||||||
else
|
|
||||||
fileattr = INVALID_FILE_ATTRIBUTES;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
path_conv::set_normalized_path (const char *path_copy)
|
path_conv::set_normalized_path (const char *path_copy)
|
||||||
{
|
{
|
||||||
|
@ -2289,7 +2276,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt,
|
||||||
|
|
||||||
Note that additional STATUS_OBJECT_PATH_INVALID and
|
Note that additional STATUS_OBJECT_PATH_INVALID and
|
||||||
STATUS_OBJECT_PATH_SYNTAX_BAD status codes exist. The first one
|
STATUS_OBJECT_PATH_SYNTAX_BAD status codes exist. The first one
|
||||||
is seemingly not generated by NtQueryAttributesFile, the latter
|
is seemingly not generated by NtQueryInformationFile, the latter
|
||||||
is only generated if the path is no absolute path within the
|
is only generated if the path is no absolute path within the
|
||||||
NT name space, which should not happen and would point to an
|
NT name space, which should not happen and would point to an
|
||||||
error in get_nt_native_path. Both status codes are deliberately
|
error in get_nt_native_path. Both status codes are deliberately
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* path.h: path data structures
|
/* path.h: path data structures
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
|
Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||||
2006, 2007, 2008 Red Hat, Inc.
|
2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -242,7 +242,6 @@ class path_conv
|
||||||
strcpy (new_path, p);
|
strcpy (new_path, p);
|
||||||
return path = new_path;
|
return path = new_path;
|
||||||
}
|
}
|
||||||
void fillin (HANDLE h);
|
|
||||||
bool is_binary ();
|
bool is_binary ();
|
||||||
|
|
||||||
unsigned __stdcall ndisk_links (DWORD);
|
unsigned __stdcall ndisk_links (DWORD);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* sec_acl.cc: Sun compatible ACL functions.
|
/* sec_acl.cc: Sun compatible ACL functions.
|
||||||
|
|
||||||
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
|
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||||
|
2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
Written by Corinna Vinschen <corinna@vinschen.de>
|
Written by Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
@ -418,7 +419,7 @@ acl_worker (const char *path, int cmd, int nentries, __aclent32_t *aclbufp,
|
||||||
unsigned fmode)
|
unsigned fmode)
|
||||||
{
|
{
|
||||||
int res = -1;
|
int res = -1;
|
||||||
fhandler_base *fh = build_fh_name (path, NULL, fmode, stat_suffixes);
|
fhandler_base *fh = build_fh_name (path, fmode, stat_suffixes);
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
{
|
{
|
||||||
debug_printf ("got %d error from build_fh_name", fh->error ());
|
debug_printf ("got %d error from build_fh_name", fh->error ());
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* syscalls.cc: syscalls
|
/* syscalls.cc: syscalls
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
2005, 2006, 2007, 2008, 2009 Red Hat, Inc.
|
2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -1009,7 +1009,7 @@ open (const char *unix_path, int flags, ...)
|
||||||
|
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
{
|
{
|
||||||
if (!(fh = build_fh_name (unix_path, NULL,
|
if (!(fh = build_fh_name (unix_path,
|
||||||
(flags & (O_NOFOLLOW | O_EXCL))
|
(flags & (O_NOFOLLOW | O_EXCL))
|
||||||
? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
|
? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
|
||||||
stat_suffixes)))
|
stat_suffixes)))
|
||||||
|
@ -1136,7 +1136,7 @@ link (const char *oldpath, const char *newpath)
|
||||||
int res = -1;
|
int res = -1;
|
||||||
fhandler_base *fh;
|
fhandler_base *fh;
|
||||||
|
|
||||||
if (!(fh = build_fh_name (oldpath, NULL, PC_SYM_NOFOLLOW, stat_suffixes)))
|
if (!(fh = build_fh_name (oldpath, PC_SYM_NOFOLLOW, stat_suffixes)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
@ -1168,7 +1168,7 @@ chown_worker (const char *name, unsigned fmode, __uid32_t uid, __gid32_t gid)
|
||||||
int res = -1;
|
int res = -1;
|
||||||
fhandler_base *fh;
|
fhandler_base *fh;
|
||||||
|
|
||||||
if (!(fh = build_fh_name (name, NULL, fmode, stat_suffixes)))
|
if (!(fh = build_fh_name (name, fmode, stat_suffixes)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
@ -1260,7 +1260,7 @@ chmod (const char *path, mode_t mode)
|
||||||
{
|
{
|
||||||
int res = -1;
|
int res = -1;
|
||||||
fhandler_base *fh;
|
fhandler_base *fh;
|
||||||
if (!(fh = build_fh_name (path, NULL, PC_SYM_FOLLOW, stat_suffixes)))
|
if (!(fh = build_fh_name (path, PC_SYM_FOLLOW, stat_suffixes)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
@ -1471,7 +1471,7 @@ stat_worker (path_conv &pc, struct __stat64 *buf)
|
||||||
|
|
||||||
if (pc.error)
|
if (pc.error)
|
||||||
{
|
{
|
||||||
debug_printf ("got %d error from build_fh_name", pc.error);
|
debug_printf ("got %d error from path_conv", pc.error);
|
||||||
set_errno (pc.error);
|
set_errno (pc.error);
|
||||||
}
|
}
|
||||||
else if (pc.exists ())
|
else if (pc.exists ())
|
||||||
|
@ -1572,7 +1572,7 @@ access (const char *fn, int flags)
|
||||||
set_errno (EINVAL);
|
set_errno (EINVAL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fhandler_base *fh = build_fh_name (fn, NULL, PC_SYM_FOLLOW, stat_suffixes);
|
fhandler_base *fh = build_fh_name (fn, PC_SYM_FOLLOW, stat_suffixes);
|
||||||
if (fh)
|
if (fh)
|
||||||
{
|
{
|
||||||
res = fh->fhaccess (flags, false);
|
res = fh->fhaccess (flags, false);
|
||||||
|
@ -1595,7 +1595,7 @@ euidaccess (const char *fn, int flags)
|
||||||
set_errno (EINVAL);
|
set_errno (EINVAL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fhandler_base *fh = build_fh_name (fn, NULL, PC_SYM_FOLLOW, stat_suffixes);
|
fhandler_base *fh = build_fh_name (fn, PC_SYM_FOLLOW, stat_suffixes);
|
||||||
if (fh)
|
if (fh)
|
||||||
{
|
{
|
||||||
res = fh->fhaccess (flags, true);
|
res = fh->fhaccess (flags, true);
|
||||||
|
@ -2207,7 +2207,7 @@ pathconf (const char *file, int v)
|
||||||
set_errno (ENOENT);
|
set_errno (ENOENT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!(fh = build_fh_name (file, NULL, PC_SYM_FOLLOW, stat_suffixes)))
|
if (!(fh = build_fh_name (file, PC_SYM_FOLLOW, stat_suffixes)))
|
||||||
return -1;
|
return -1;
|
||||||
if (!fh->exists ())
|
if (!fh->exists ())
|
||||||
set_errno (ENOENT);
|
set_errno (ENOENT);
|
||||||
|
@ -2502,7 +2502,7 @@ statvfs (const char *name, struct statvfs *sfs)
|
||||||
if (efault.faulted (EFAULT))
|
if (efault.faulted (EFAULT))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!(fh = build_fh_name (name, NULL, PC_SYM_FOLLOW, stat_suffixes)))
|
if (!(fh = build_fh_name (name, PC_SYM_FOLLOW, stat_suffixes)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
|
@ -4013,7 +4013,7 @@ faccessat (int dirfd, const char *pathname, int mode, int flags)
|
||||||
set_errno (EINVAL);
|
set_errno (EINVAL);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fhandler_base *fh = build_fh_name (path, NULL,
|
fhandler_base *fh = build_fh_name (path,
|
||||||
(flags & AT_SYMLINK_NOFOLLOW)
|
(flags & AT_SYMLINK_NOFOLLOW)
|
||||||
? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
|
? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
|
||||||
stat_suffixes);
|
stat_suffixes);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* times.cc
|
/* times.cc
|
||||||
|
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
2005, 2006, 2007, 2008, 2009 Red Hat, Inc.
|
2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ utimens_worker (path_conv &win32, const struct timespec *tvp)
|
||||||
|
|
||||||
if (fh->error ())
|
if (fh->error ())
|
||||||
{
|
{
|
||||||
debug_printf ("got %d error from build_fh_name", fh->error ());
|
debug_printf ("got %d error from build_fh_pc", fh->error ());
|
||||||
set_errno (fh->error ());
|
set_errno (fh->error ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue