* fhandler_proc.cc (fhandler_proc::fstat): Use fhandler name rather than
path_conv name. (fhandler_proc::open): Ditto. * fhandler_process.cc (fhandler_process::fstat): Use fhandler name rather than path_conv name. (fhandler_process::open): Ditto. * fhandler_registry.cc (fhandler_registry::fstat): Use fhandler name rather than path_conv name. (fhandler_registry::open): Ditto. * path.cc (path_conv::check): Don't copy posix path when virtual. (mount_info::conv_to_win32_path): Don't zero string when isproc. Just derive normal windows path. * path.h (path_conv::clear_normalized_path): Declare new method. * path.cc (path_conv::clear_normalized_path): Define new method. * dtable.cc (build_fhandler_from_name): Clear normalized path when finished to conserve space.
This commit is contained in:
parent
3bb7eb449c
commit
335c87f94d
|
@ -1,3 +1,23 @@
|
|||
2002-05-02 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* fhandler_proc.cc (fhandler_proc::fstat): Use fhandler name rather
|
||||
than path_conv name.
|
||||
(fhandler_proc::open): Ditto.
|
||||
* fhandler_process.cc (fhandler_process::fstat): Use fhandler name
|
||||
rather than path_conv name.
|
||||
(fhandler_process::open): Ditto.
|
||||
* fhandler_registry.cc (fhandler_registry::fstat): Use fhandler name
|
||||
rather than path_conv name.
|
||||
(fhandler_registry::open): Ditto.
|
||||
* path.cc (path_conv::check): Don't copy posix path when virtual.
|
||||
(mount_info::conv_to_win32_path): Don't zero string when isproc. Just
|
||||
derive normal windows path.
|
||||
|
||||
* path.h (path_conv::clear_normalized_path): Declare new method.
|
||||
* path.cc (path_conv::clear_normalized_path): Define new method.
|
||||
* dtable.cc (build_fhandler_from_name): Clear normalized path when
|
||||
finished to conserve space.
|
||||
|
||||
2002-05-02 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* fhandler_proc.cc (fhandler_proc::fstat): Prime with information from
|
||||
|
|
|
@ -287,7 +287,9 @@ dtable::build_fhandler_from_name (int fd, const char *name, HANDLE handle,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
return build_fhandler (fd, pc.get_devn (), pc.normalized_path, pc, pc.get_unitn ());
|
||||
fhandler_base *fh = build_fhandler (fd, pc.get_devn (), pc.normalized_path, pc, pc.get_unitn ());
|
||||
pc.clear_normalized_path ();
|
||||
return fh;
|
||||
}
|
||||
|
||||
#define cnew(name) new ((void *) ccalloc (HEAP_FHANDLER, 1, sizeof (name))) name
|
||||
|
|
|
@ -124,7 +124,7 @@ fhandler_proc::fhandler_proc (DWORD devtype):
|
|||
int
|
||||
fhandler_proc::fstat (struct __stat64 *buf, path_conv *pc)
|
||||
{
|
||||
debug_printf ("fstat (%s)", (char *) *pc);
|
||||
debug_printf ("fstat (%s)", get_name ());
|
||||
const char *path = get_name ();
|
||||
path += proc_len;
|
||||
(void) fhandler_base::fstat (buf, pc);
|
||||
|
@ -199,7 +199,7 @@ fhandler_proc::open (path_conv *pc, int flags, mode_t mode)
|
|||
|
||||
const char *path;
|
||||
|
||||
path = (char *) *pc + proc_len;
|
||||
path = get_name () + proc_len;
|
||||
|
||||
if (!*path)
|
||||
{
|
||||
|
|
|
@ -80,7 +80,7 @@ fhandler_process::fhandler_process ():
|
|||
int
|
||||
fhandler_process::fstat (struct __stat64 *buf, path_conv *pc)
|
||||
{
|
||||
int file_type = exists ((const char *) get_name ());
|
||||
int file_type = exists (get_name ());
|
||||
(void) fhandler_base::fstat (buf, pc);
|
||||
buf->st_mode &= ~_IFMT & NO_W;
|
||||
|
||||
|
@ -126,7 +126,7 @@ fhandler_process::open (path_conv *pc, int flags, mode_t mode)
|
|||
goto out;
|
||||
|
||||
const char *path;
|
||||
path = (const char *) *pc + proc_len + 1;
|
||||
path = get_name () + proc_len + 1;
|
||||
pid = atoi (path);
|
||||
while (*path != 0 && !SLASH_P (*path))
|
||||
path++;
|
||||
|
|
|
@ -161,9 +161,9 @@ fhandler_registry::fhandler_registry ():
|
|||
}
|
||||
|
||||
int
|
||||
fhandler_registry::fstat (struct __stat64 *buf, path_conv *path)
|
||||
fhandler_registry::fstat (struct __stat64 *buf, path_conv *pc)
|
||||
{
|
||||
this->fhandler_base::fstat (buf, path);
|
||||
this->fhandler_base::fstat (buf, pc);
|
||||
buf->st_mode &= ~_IFMT & NO_W;
|
||||
int file_type = exists (get_name ());
|
||||
switch (file_type)
|
||||
|
@ -315,7 +315,7 @@ fhandler_registry::open (path_conv *pc, int flags, mode_t mode)
|
|||
goto out;
|
||||
|
||||
const char *path;
|
||||
path = (const char *) *pc + proc_len + 1 + registry_len;
|
||||
path = get_name () + proc_len + 1 + registry_len;
|
||||
if (!*path)
|
||||
{
|
||||
if ((mode & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
|
||||
|
|
|
@ -45,9 +45,9 @@ fhandler_virtual::opendir (path_conv& pc)
|
|||
DIR *res = NULL;
|
||||
size_t len;
|
||||
|
||||
if (exists (pc) <= 0)
|
||||
if (exists (get_name ()) <= 0)
|
||||
set_errno (ENOTDIR);
|
||||
else if ((len = strlen (pc)) > MAX_PATH - 3)
|
||||
else if ((len = strlen (get_name ())) > MAX_PATH - 3)
|
||||
set_errno (ENAMETOOLONG);
|
||||
else if ((dir = (DIR *) malloc (sizeof (DIR))) == NULL)
|
||||
set_errno (ENOMEM);
|
||||
|
@ -64,7 +64,7 @@ fhandler_virtual::opendir (path_conv& pc)
|
|||
}
|
||||
else
|
||||
{
|
||||
strcpy (dir->__d_dirname, pc);
|
||||
strcpy (dir->__d_dirname, get_name ());
|
||||
dir->__d_dirent->d_version = __DIRENT_VERSION;
|
||||
cygheap_fdnew fd;
|
||||
fd = this;
|
||||
|
|
|
@ -368,10 +368,20 @@ path_conv::update_fs_info (const char* win32_path)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
path_conv::clear_normalized_path ()
|
||||
{
|
||||
// not thread safe
|
||||
if (normalized_path)
|
||||
{
|
||||
cfree (normalized_path);
|
||||
normalized_path = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
path_conv::~path_conv ()
|
||||
{
|
||||
if (normalized_path)
|
||||
cfree (normalized_path);
|
||||
clear_normalized_path ();
|
||||
}
|
||||
|
||||
/* Convert an arbitrary path SRC to a pure Win32 path, suitable for
|
||||
|
@ -526,8 +536,6 @@ path_conv::check (const char *src, unsigned opt,
|
|||
fileattr = 0;
|
||||
}
|
||||
delete fh;
|
||||
if (!error)
|
||||
strcpy (path, path_copy);
|
||||
goto out;
|
||||
}
|
||||
/* devn should not be a device. If it is, then stop parsing now. */
|
||||
|
@ -1428,7 +1436,13 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst,
|
|||
/* Check if the cygdrive prefix was specified. If so, just strip
|
||||
off the prefix and transform it into an MS-DOS path. */
|
||||
MALLOC_CHECK;
|
||||
if (iscygdrive (pathbuf))
|
||||
if (isproc (pathbuf))
|
||||
{
|
||||
devn = fhandler_proc::get_proc_fhandler (pathbuf);
|
||||
if (devn == FH_BAD)
|
||||
return ENOENT;
|
||||
}
|
||||
else if (iscygdrive (pathbuf))
|
||||
{
|
||||
int n = mount_table->cygdrive_len - 1;
|
||||
if (!pathbuf[n] ||
|
||||
|
@ -1447,14 +1461,6 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst,
|
|||
else if (mount_table->cygdrive_len > 1)
|
||||
return ENOENT;
|
||||
}
|
||||
if (isproc (pathbuf))
|
||||
{
|
||||
devn = fhandler_proc::get_proc_fhandler (pathbuf);
|
||||
dst[0] = '\0';
|
||||
if (devn == FH_BAD)
|
||||
return ENOENT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
int chrooted_path_len;
|
||||
chrooted_path_len = 0;
|
||||
|
|
|
@ -141,6 +141,7 @@ class path_conv
|
|||
DWORD get_drive_type () {return drive_type;}
|
||||
BOOL fs_fast_ea () {return sym_opt & PC_CHECK_EA;}
|
||||
void set_path (const char *p) {strcpy (path, p);}
|
||||
void clear_normalized_path ();
|
||||
};
|
||||
|
||||
/* Symlink marker */
|
||||
|
|
Loading…
Reference in New Issue