2011-11-11 34 views
1

我試圖讓使用nftw用下面的代碼目錄樹中的所有.c文件:nftw不同於BSD?

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是否複製兩個字符串? –

+0

我正在做我自己的字符串內存管理; dup是一個函數,除了沒有通用內存管理器的開銷外,它基本上和strdup完成同樣的工作。但即使在該函數中有一個錯誤,它也不會解釋觀察到的行爲,因爲我運行的測試基本上只檢查是否曾經調用過addl。 – rwallace

+3

但dup是一個可怕的名字,因爲這是複製文件描述符的標準庫函數。 –

回答

1

什麼是nftw的返回值?如果它是-1errno is設置爲EINVAL,那麼很可能您已超過OPEN_MAX的值。嘗試將較小的值作爲第三個參數傳遞給nftw,並確保它小於OPEN_MAX