public long posix_spawnp(String path, Collection<? extends SpawnFileAction> fileActions,
Collection<? extends SpawnAttribute> spawnAttributes,
CharSequence[] argv, CharSequence[] envp) {
// AbstractNumberReference<? extends Number> pid = getRuntime().findType(TypeAlias.pid_t).size() == 4
// ? new IntByReference(-1) : new LongLongByReference(-1);
NumberByReference pid = new NumberByReference(TypeAlias.pid_t);
Pointer nativeFileActions = fileActions != null && !fileActions.isEmpty() ? nativeFileActions(fileActions) : null;
Pointer nativeSpawnAttributes = spawnAttributes != null && !spawnAttributes.isEmpty() ? nativeSpawnAttributes(spawnAttributes) : null;
long result;
try {
result = ((UnixLibC) libc()).posix_spawnp(pid, path, nativeFileActions, nativeSpawnAttributes, argv, envp);
} finally {
if (nativeFileActions != null) ((UnixLibC) libc()).posix_spawn_file_actions_destroy(nativeFileActions);
if (nativeSpawnAttributes != null) ((UnixLibC) libc()).posix_spawnattr_destroy(nativeSpawnAttributes);
}
if (result != 0) return -1; // result will be errno, but we can't indicate error because we return pid
return pid.longValue();
}