package org.jerlang.kernel.file;
import jnr.posix.POSIX;
import jnr.posix.POSIXFactory;
import org.jerlang.erts.erlang.Error;
import org.jerlang.type.Atom;
import org.jerlang.type.Integer;
import org.jerlang.type.List;
import org.jerlang.type.Str;
import org.jerlang.type.Term;
import org.jerlang.type.Tuple;
public class FileRename {
private static final Atom error = Atom.of("error");
private static final Atom ok = Atom.of("ok");
private static final POSIX posix;
static {
posix = POSIXFactory.getPOSIX();
}
public static Term dispatch(List params) {
switch (params.length()) {
case 2:
Str src = params.head().toStr();
params = params.tail();
Str dst = params.head().toStr();
return rename_2(src, dst);
default:
throw Error.badarg;
}
}
/**
* http://www.erlang.org/doc/man/file.html#rename-2
*/
public static Term rename_2(Str source, Str destination) {
int result = posix.rename(source.string(), destination.string());
switch (result) {
case 0:
return ok;
default:
return Tuple.of(error, Integer.of(result));
}
}
}