mirror of
https://github.com/jenkinsci/jenkins.git
synced 2026-10-26 19:15:09 +00:00
Use Files.readSymbolicLink where possible (#6100)
This commit is contained in:
1 parent
2066ad5143
commit
5ff14cfaef
1 file changed
+4
-35
@@ -6,14 +6,13 @@ import static hudson.util.jna.GNUCLibrary.F_SETFD;
|
||||
import static hudson.util.jna.GNUCLibrary.LIBC;
|
||||
import static java.util.logging.Level.FINE;
|
||||
|
||||
import com.sun.jna.Memory;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.StringArray;
|
||||
import hudson.Extension;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
import jenkins.util.JavaVMArguments;
|
||||
@@ -73,11 +72,8 @@ public class UnixSlaveRestarter extends SlaveRestarter {
|
||||
File exe = new File(name);
|
||||
if (exe.exists()) {
|
||||
try {
|
||||
String path = resolveSymlink(exe);
|
||||
if (path != null) {
|
||||
return path;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
return Files.readSymbolicLink(exe.toPath()).toString();
|
||||
} catch (IOException | InvalidPathException | UnsupportedOperationException e) {
|
||||
LOGGER.log(FINE, "Failed to resolve symlink " + exe, e);
|
||||
}
|
||||
return name;
|
||||
@@ -87,33 +83,6 @@ public class UnixSlaveRestarter extends SlaveRestarter {
|
||||
return System.getProperty("java.home") + "/bin/java";
|
||||
}
|
||||
|
||||
private static String resolveSymlink(File link) throws IOException {
|
||||
String filename = link.getAbsolutePath();
|
||||
|
||||
for (int sz = 512; sz < 65536; sz *= 2) {
|
||||
Memory m = new Memory(sz);
|
||||
int r = LIBC.readlink(filename, m, new NativeLong(sz));
|
||||
if (r < 0) {
|
||||
int err = Native.getLastError();
|
||||
if (err == 22 /*EINVAL --- but is this really portable?*/) {
|
||||
return null; // this means it's not a symlink
|
||||
}
|
||||
throw new IOException(
|
||||
"Failed to readlink " + link + " error=" + err + " " + LIBC.strerror(err));
|
||||
}
|
||||
|
||||
if (r == sz) {
|
||||
continue; // buffer too small
|
||||
}
|
||||
|
||||
byte[] buf = new byte[r];
|
||||
m.read(0, buf, 0, r);
|
||||
return new String(buf, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
throw new IOException("Failed to readlink " + link);
|
||||
}
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(UnixSlaveRestarter.class.getName());
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
Reference in new issue
Block a user