2011-11-11 8 views
1

私は次のコードでnftwを使用して、ディレクトリツリー内のすべての.cファイルを取得しようとしている:BSDでnftwが異なる?

static int gf(const char *path, const struct stat *st, int t, struct FTW *ftw) { 
    if (t != FTW_F) 
     return 0; 
    if (strcmp(ext(path), ".c") == 0) 
     addl(&files, dup(abspath(path))); 
    return 0; 
} 

void getfiles(char *path) { 
    nftw(path, gf, 255, FTW_PHYS); 
} 

これは、LinuxおよびSolaris上で動作しますが、PC-BSD上で、それは単にいずれかを拾っていないことで失敗しましたファイル。私は何が欠けていますか?

+0

実際にstrdupに「dup」という名前を使用しましたか?それは起こるのを待っている災害のようです! dup2は2つの文字列をコピーしますか? –

+0

私は文字列のために私自身のメモリ管理をしています。 dupは、一般的なメモリマネージャのオーバーヘッドがない限り、strdupと基本的に同じ働きをする関数です。しかし、その関数にバグがあったとしても、私が実行しているテストでは、addlが呼び出されたかどうかをチェックするだけなので、観測された動作は考慮されません。 – rwallace

+3

しかし、dupはファイル記述子を複製する標準ライブラリ関数であるため、ひどい名前です。 –

答えて

1

nftwの戻り値は何ですか? -1errno isEINVALに設定されている場合は、OPEN_MAXの値を超える可能性があります。小さな値を第3パラメータとしてnftwに渡して、OPEN_MAXより小さくなるようにしてください。

関連する問題