summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/path.h
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-06-23 16:56:41 +0200
committerCorinna Vinschen <corinna@vinschen.de>2016-06-23 16:56:41 +0200
commitb2867a68b9f94402e2afba49de978d9e8f9abaeb (patch)
tree484960735e607552fbb5704f9e8f83eedab77f4a /winsup/cygwin/path.h
parentbceb8ebebb78612cd1da16790ce30d37eddbe244 (diff)
downloadcygnal-b2867a68b9f94402e2afba49de978d9e8f9abaeb.tar.gz
cygnal-b2867a68b9f94402e2afba49de978d9e8f9abaeb.tar.bz2
cygnal-b2867a68b9f94402e2afba49de978d9e8f9abaeb.zip
Handle up to 63 partitions per drive
Revamp device parsing code. Introducing support for more partitions into the shilka-generated parser has the unfortunate side-effect of raising the size of the DLL by almost 2 Megs. Therefore we split out the handling for /dev/sdXY devices into a tiny bit of hand-written code. While at it, remove some unused cruft from devices.* and generally clean up the device class to provide access methods instead of direct access to members. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/path.h')
-rw-r--r--winsup/cygwin/path.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/winsup/cygwin/path.h b/winsup/cygwin/path.h
index bb314b1d6..042ba312d 100644
--- a/winsup/cygwin/path.h
+++ b/winsup/cygwin/path.h
@@ -239,7 +239,7 @@ class path_conv
path_flags (0), suffix (NULL), posix_path (NULL), error (0),
dev (in_dev)
{
- set_path (in_dev.native);
+ set_path (in_dev.native ());
}
path_conv (int, const char *src, unsigned opt = PC_SYM_FOLLOW,
@@ -322,6 +322,10 @@ class path_conv
{
free_strings ();
memcpy (this, &pc, sizeof pc);
+ /* The device info might contain pointers to allocated strings, in
+ contrast to statically allocated strings. Calling device::dup()
+ will duplicate the string if the source was allocated. */
+ dev.dup ();
path = cstrdup (in_path);
conv_handle.dup (pc.conv_handle);
posix_path = cstrdup(pc.posix_path);