Devo liberar o ponteiro fstab retornado por getfsent?

1
#include <fstab.h>

struct fstab *getfsent(void);

link

getfsent lê uma linha do arquivo /etc/fstab e retorna uma variável do tipo struct fstab* . Preciso libertá-lo? Ou é gerenciado por outra pessoa? Se ele é gerenciado por outra pessoa, por que o tipo de retorno não é const struct fstab* ? Eu verifico a referência acima, mas não encontrei nada útil.

    
por JohnKoch 13.08.2018 / 11:01

1 resposta

2

Pelo menos para a glibc, você não deveria. A origem indica que o ponteiro é para um membro de uma estrutura de estado interno, então não é algo que você pode liberar diretamente.

Os documentos também sugerem isso:

To read the entire content of the of the fstab file the GNU C Library contains a set of three functions which are designed in the usual way.

A maneira "usual" aqui é algo como getpwent :

The return value may point to a static area, and may be overwritten by subsequent calls to getpwent(), getpwnam(3), or getpwuid(3). (Do not pass the returned pointer to free(3).)

Além disso, os documentos da glibc especificamente para getfsent :

The function returns a pointer to a variable of type struct fstab. This variable is shared by all threads and therefore this function is not thread-safe. If an error occurred getfsent returns a NULL pointer.

Que essa variável é compartilhada é uma strong indicação de que você não deve mexer no gerenciamento de memória.

Se você quiser liberar os recursos, use endfsent() , que limpará o estado interno.

    
por 13.08.2018 / 11:39

Tags