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:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#l32-42

Aqui está como chdir é implementado:

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#l438-444

Aqui é onde precisamos da solução para getcwd

http://github.com/280north/narwhal/blob/34ac15261fa4acdef3867256e97d7aabb94766e0/engines/rhino/lib/fs-base.js#l416-419

Soluções em Ruby ou qualquer outra linguagem incorporada para a JNA ajudassem.

Foi útil?

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top