Estou procurando criar uma função C compatível com *BSD como a abaixo :
int
fs_ext__swap (const char *from, const char *to) {
int res = renameatx_np(AT_FDCWD, from, AT_FDCWD, to, RENAME_SWAP);
return res == -1 ? uv_translate_sys_error(errno) : res;
}
No momento, recebo um erro de compilação ( 'renameatx_np' is invalid in C99 [-Wimplicit-function-declaration]
) porque, pelo que sei, a renameatx_np
função é exclusiva do MacOS. Existe uma versão equivalente para *BSD (estou usando o OpenBSD 7.3 atm)?
Que riscos eu estaria correndo se eu removesse o RENAME_SWAP
sinalizador e mudasse a função para renameat
( edit: eu tentei isso, ele constrói e compila ok, mas resulta em erros ENOENT durante os testes upstream )?
Meu plano é usar as funções linkat e unlinkat para simular a função de renameatx_np.
De que outra forma eu poderia abordar isso?
A resposta curta para a pergunta do título é não , tanto quanto eu posso dizer.
No entanto, existem funções nativas adequadas disponíveis para implementar a função fs_ext__swap. Aqui está como eu fiz isso :