initial commit
Some checks failed
/ publish (push) Failing after 53s

This commit is contained in:
2025-07-12 20:23:00 +02:00
commit 3565632465
14 changed files with 717 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
package com.infendro.shell
import kotlinx.cinterop.CPointer
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.refTo
import kotlinx.cinterop.toKString
import platform.posix.*
@ExperimentalForeignApi
internal actual suspend fun execute(
command: Array<String>,
directory: String?,
): Shell.Result {
val command = command.joinToString(" ") { "\"$it\"" }
if (directory != null) {
chdir(directory)
}
val stream = popen(command, "r")!!
val value = stream.readLines().joinToString("")
val code = pclose(stream)
return Shell.Result(code, value)
}
@ExperimentalForeignApi
private fun CPointer<FILE>.readLines(): List<String> {
val lines = mutableListOf<String>()
val buffer = ByteArray(4096)
while (true) {
val line = fgets(buffer.refTo(0), buffer.size, this)
if (line == null) break
lines.add(line.toKString())
}
return lines
}