C言語で複数のファイルを開いて使う処理を書く場合、
エラー処理はどのように書くのがきれいでしょうか。

以下のような形を考えましたが、2つ目のファイルオープンで
エラーになったときの処理が気持ち悪いです。

int func1(char *fname1, char *fname2)
{
    FILE *fp1;
    FILE *fp2;

    if((fp1 = fopen(fname1, "w")) == NULL)
    {
        fprintf(stderr, "fname1 open error.\n");
        return -1;
    }
    if((fp2 = fopen(fname2, "w")) == NULL)
    {
        fprintf(stderr, "fname2 open error.\n");
        fclose(fp1);    //ここが気持ち悪い
        return -1;
    }
    int ret;
    ret = func2(fp1, fp2);  //ファイルに書き込む処理
    fclose(fp1);
    fclose(fp2);
    if(ret != 0)
    {
        fprintf(stderr, "error occured in func2.\n");
        return -1;
    }
    return 0;
}