Alocando um buffer de char com JNA, Rhino, JavaScript
-
22-09-2019 - |
Pergunta
Em Narwhal, estamos usando JNA para fazer libc
chamadas como getcwd
e chdir
. Só consegui usar isso com meu conhecimento limitado da interface JNA no que diz respeito ao JavaScript em Rhino, lidando exclusivamente com primitivas. Eu preciso saber como alocar um buffer de char para que eu possa passar para getcwd
, recupere uma sequência de javascript desse buffer e desalocine o buffer, presumivelmente em um finally
cláusula.
Veja como pegamos o libc
interface:
Aqui está como chdir
é implementado:
Aqui é onde precisamos da solução para getcwd
Soluções em Ruby ou qualquer outra linguagem incorporada para a JNA ajudassem.
Solução
Você pode usar um nio.buffer ou jna.pointer para passar por um buffer de saída, algo como:
invokeString(new jna.Memory(4097), 4097)
getcwd retornará um char* ao buffer de entrada, então a JNA marcará o retorno a uma string
Para suportar caminhos mais longos, você pode tomar um comprimento opcional
em java, novo arquivo ("."). getAbsolutepath () pode obter o caminho atual, para que você não precise do GETCWD ...