+2004-05-07 Pierre Humblet <pierre.humblet@ieee.org>
+ Christopher Faylor <cgf@timesys.com>
+
+ * path.cc (mount_info::conv_to_posix_path): Add return.
+
2004-05-06 Pierre Humblet <pierre.humblet@ieee.org>
* path.cc (path_conv::check): Strip trailing dots and spaces and
if (!cygheap->root.exists ())
/* nothing */;
- else if (cygheap->root.ischroot_native (pathbuf))
+ else if (!cygheap->root.ischroot_native (pathbuf))
+ return ENOENT;
+ else
{
const char *p = pathbuf + cygheap->root.native_length ();
if (*p)
posix_path[0] = '/';
posix_path[1] = '\0';
}
+ goto out;
}
- else
- return ENOENT;
/* Not in the database. This should [theoretically] only happen if either
the path begins with //, or / isn't mounted, or the path has a drive
because WaitForMultipleObjects will return the smallest index
if both objects are signaled. */
wait_objects[num++] = object;
- if (is_good_object (&thread) &&
- thread->cancelstate != PTHREAD_CANCEL_DISABLE)
- wait_objects[num++] = thread->cancel_event;
- if (do_sig_wait)
- wait_objects[num++] = signal_arrived;
+ DWORD cancel_n;
+ if (!is_good_object (&thread) ||
+ thread->cancelstate == PTHREAD_CANCEL_DISABLE)
+ cancel_n = (DWORD) -1;
+ else
+ {
+ cancel_n = num++;
+ wait_objects[cancel_n] = thread->cancel_event;
+ }
+
+ DWORD sig_n;
+ if (!do_sig_wait || &_my_tls != _main_tls)
+ sig_n = (DWORD) -1;
+ else
+ {
+ sig_n = num++;
+ wait_objects[sig_n] = signal_arrived;
+ }
res = WaitForMultipleObjects (num, wait_objects, FALSE, timeout);
- if (res == WAIT_CANCELED)
+ if (res == sig_n - WAIT_OBJECT_0)
+ res = WAIT_SIGNALED;
+ else if (res == cancel_n - WAIT_OBJECT_0)
{
- if (num == 3 || !do_sig_wait)
- {
- if (do_cancel)
- pthread::static_cancel_self ();
- }
- else
- res = WAIT_SIGNALED;
+ if (do_cancel)
+ pthread::static_cancel_self ();
+ res = WAIT_CANCELED;
}
return res;
}