Valor de retorno de fgets ()

Eu recentemente comecei a trabalhar comI/O noC. Aqui está a minha pergunta -
Eu tenho um arquivo, do qual li minha entrada. Então eu usofgets() para obter strings em um buffer que eu utilizo de alguma maneira. Agora, o que acontece se a entrada for muito curta para o buffer, ou seja, se a primeira leitura forfgets() alcançaEOF. Devemosfgets() RetornaNULL(como eu li emfgets() documentação)? Parece que não e eu recebo minha opinião corretamente. Além do meufeof(input) não diz que alcançamosEOF.
Aqui está o meu trecho de código.

char    buf[BUFSIZ];
FILE    *input,
        *output;

input   = fopen(argv[--argc], "r");
output  = fopen(argv[--argc], "w");

/**
 *  If either of the input or output were unable to be opened
 *          we exit
 */
if (input == NULL) {
    fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 1]);
    exit(EXIT_FAILURE);
}

if (output == NULL) {
    fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 0]);
    exit(EXIT_FAILURE);
}

if (fgets(buf, sizeof(buf), input) != NULL) {
    ....
}

/**
 *  After the fgets() condition exits it is because, either -
 *      1) The EOF was reached.
 *      2) There is a read error.
 */
if (feof(input)) {
    fprintf(stdout, "Reached EOF.\n");
}
else if (ferror(input)) {
    fprintf(stdout, "Error while reading the file.\n");
}

questionAnswers(1)

yourAnswerToTheQuestion