aboutsummaryrefslogtreecommitdiff
path: root/libphobos/src/std/path.d
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2022-09-27 10:43:32 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2022-09-27 10:50:18 +0200
commitc8dfa79c9948ce09a7b4071f8059294b1972aef6 (patch)
treecb93655417a5475c6baac88691fc92621b3fa7ce /libphobos/src/std/path.d
parentbe4a6551ed37c1e7dbdfb9400fc2e2b5d40c5be2 (diff)
downloadgcc-c8dfa79c9948ce09a7b4071f8059294b1972aef6.zip
gcc-c8dfa79c9948ce09a7b4071f8059294b1972aef6.tar.gz
gcc-c8dfa79c9948ce09a7b4071f8059294b1972aef6.tar.bz2
d: Merge upstream dmd d579c467c1, phobos 88aa69b14.
D front-end changes: - Throwing from contracts of `nothrow' functions has been deprecated, as this breaks the guarantees of `nothrow'. - Added language support for initializing the interior pointer of associative arrays using `new' keyword. Phobos changes: - The std.digest.digest module has been removed. - The std.xml module has been removed. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd d579c467c1. * decl.cc (layout_struct_initializer): Update for new front-end interface. * expr.cc (ExprVisitor::visit (AssignExp *)): Remove lowering of array assignments. (ExprVisitor::visit (NewExp *)): Add new lowering of new'ing associative arrays to an _aaNew() library call. * runtime.def (ARRAYSETASSIGN): Remove. (AANEW): Define. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime d579c467c1. * libdruntime/Makefile.am (DRUNTIME_DSOURCES): Remove rt/arrayassign.d. * libdruntime/Makefile.in: Regenerate. * src/MERGE: Merge upstream phobos 88aa69b14. * src/Makefile.am (PHOBOS_DSOURCES): Remove std/digest/digest.d, std/xml.d. * src/Makefile.in: Regenerate.
Diffstat (limited to 'libphobos/src/std/path.d')
-rw-r--r--libphobos/src/std/path.d29
1 files changed, 22 insertions, 7 deletions
diff --git a/libphobos/src/std/path.d b/libphobos/src/std/path.d
index de180fc..4b5a7ef 100644
--- a/libphobos/src/std/path.d
+++ b/libphobos/src/std/path.d
@@ -3357,8 +3357,10 @@ in
{
// Verify that pattern[] is valid
import std.algorithm.searching : balancedParens;
- assert(balancedParens(pattern, '[', ']', 0));
- assert(balancedParens(pattern, '{', '}', 0));
+ import std.utf : byUTF;
+
+ assert(balancedParens(pattern.byUTF!C, '[', ']', 0));
+ assert(balancedParens(pattern.byUTF!C, '{', '}', 0));
}
do
{
@@ -3959,7 +3961,7 @@ string expandTilde(string inputPath) @safe nothrow
version (Posix)
{
import core.exception : onOutOfMemoryError;
- import core.stdc.errno : errno, ERANGE;
+ import core.stdc.errno : errno, EBADF, ENOENT, EPERM, ERANGE, ESRCH;
import core.stdc.stdlib : malloc, free, realloc;
/* Joins a path from a C string to the remainder of path.
@@ -4065,7 +4067,7 @@ string expandTilde(string inputPath) @safe nothrow
char[] extra_memory;
passwd result;
- while (1)
+ loop: while (1)
{
extra_memory.length += extra_memory_size;
@@ -4088,10 +4090,23 @@ string expandTilde(string inputPath) @safe nothrow
break;
}
- if (errno != ERANGE &&
+ switch (errno)
+ {
+ case ERANGE:
// On BSD and OSX, errno can be left at 0 instead of set to ERANGE
- errno != 0)
- onOutOfMemoryError();
+ case 0:
+ break;
+
+ case ENOENT:
+ case ESRCH:
+ case EBADF:
+ case EPERM:
+ // The given name or uid was not found.
+ break loop;
+
+ default:
+ onOutOfMemoryError();
+ }
// extra_memory isn't large enough
import core.checkedint : mulu;