Buenas, espero acertar en la solucion:
En el programa declaras un puntero a file en FILE *f1, y la funcion addFile y add necesitas un puntero a FILE como pones en sus signaturas (addFile (File *...)). La cuestion es que cuando llamas a estas funciones usas el operador &, que podriamos traducir como "la direccion de...". Pues bien, si a add y addFile le pasas "la direccion de" y lo que le pasas es un puntero (la direccion de una direccion...) no deberia funcionar.
Prueba a pasarle como parametro la variable f1 directamente, no le pases "la direccion de..."
Espero haber ayudado, si me equivoco, no duden en corregirme.
Nos vemos