< prev index next >
src/java.base/unix/classes/sun/nio/fs/UnixCopyFile.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 371,380 ****
--- 371,396 ----
try { unlink(target); } catch (UnixException ignore) { }
}
}
}
+ // throw a DirectoryNotEmpty exception if appropriate
+ static void ensureEmptyDir(UnixPath dir) throws IOException {
+ try {
+ long ptr = opendir(dir);
+ try (UnixDirectoryStream stream =
+ new UnixDirectoryStream(dir, ptr, e -> true)) {
+ if (stream.iterator().hasNext()) {
+ throw new DirectoryNotEmptyException(
+ dir.getPathForExceptionMessage());
+ }
+ }
+ } catch (UnixException e) {
+ e.rethrowAsIOException(dir);
+ }
+ }
+
// move file from source to target
static void move(UnixPath source, UnixPath target, CopyOption... options)
throws IOException
{
// permission check
*** 463,472 ****
--- 479,489 ----
}
}
// copy source to target
if (sourceAttrs.isDirectory()) {
+ ensureEmptyDir(source);
copyDirectory(source, sourceAttrs, target, flags);
} else {
if (sourceAttrs.isSymbolicLink()) {
copyLink(source, sourceAttrs, target, flags);
} else {
< prev index next >