I puntatori in entrata andrebbero sempre valutati per stabilire se sono validi.
Ma poi, sei certo che il puntatore all'oggetto FILE, anche se valido, sia inizializzato con i requisiti corretti per la lettura?
Il parametro "maxDim" lo scriverei con il tipo size_t. Immagino sia la dimensione del buffer passato con il nome "result".
Anche l'indice i lo scriverei con il tipo size_t, perché io non conosco la dimensione del buffer. come regola, size_t è consigliabile per gli indici degli array, dei file, e di tutti gli oggetti la cui dimensione non è nota.
Non vedo la necessità di ricorrere ad un if-else, penso si potrebbe fare il solo ciclo while. Propongo un possibile tentativo, non testato!
Size_t readField(FILE *fp, char stop, int maxDim, char *result)
{
if ( !fp || !result )
{
result[0] = '\0';
return 0;
}
size_t i = 0;
char c = fgetc(fp);
while ( c != stop && c != '\n' && c != EOF && i < maxDim -1 )
{
result[i++] = c;
c = fgetc(fp);
}
result[i] = '\0';
return i;
}
Come vedi, ho eliminato il ritorno "success", la funzione ritorna il numero di caratteri scritti, escluso il terminatore nullo. altrimenti zero.
Altra cosa, che probabilmente già sai, il terminatore di linea '\n' riconosce la nuova linea di testo per i file scritti da sistemi Unix, o anche Windows che usa la successione '\r' '\n', ma non per i file scritti da alcuni sistemi di Apple che utilizzano unicamente '\r'.