Example #1
0
//
// Used dpns_readdir to return the list of files
// in a directory without the deleted ones
//
dir_contents* getDirList (char* path)
{
    dpns_DIR * dir;
    struct dpns_direnstat * dsentry;

    if ( path == NULL || strlen (path) == 0 )
        return NULL;

    dir = dpns_opendir (path);
    if ( dir == NULL ) return NULL;

    dir_contents* dc = malloc (sizeof(dir_contents));
    dc->size = 0;

    serrno = 0;
    while ( dsentry = dpns_readdirx (dir) )
    {
        if ( dsentry->status != 'D' )
        {
            strcpy ((dc->list)[dc->size], dsentry->d_name);
            ++(dc->size);
        }
        if ( dc->size == 256 )
            break;
    }
    if ( dsentry == NULL && serrno != 0 )
    {
        free (dc);
        dpns_closedir (dir);
        return NULL;
    }
    dpns_closedir (dir);

    return dc;
}
Example #2
0
/*
 * Free the resources allocated for reading directory entries.
 *     
 * \param dir_descriptor (input):
 *        Pointer to a directory descriptor filled by FSAL_opendir.
 * 
 * \return Major error codes :
 *        - ERR_FSAL_NO_ERROR     (no error)
 *        - ERR_FSAL_FAULT        (a NULL pointer was passed as mandatory argument)
 *        - Other error codes can be returned :
 *          ERR_FSAL_IO, ...
 */
fsal_status_t dpmfsal_closedir(fsal_dir_t * dir_descriptor // IN
)
{
    int rc;

    // Sanity checks
    if (!dir_descriptor)
        Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_closedir);

    LogInfo(COMPONENT_FSAL, "dpmfsal_closedir: start");

    TakeTokenFSCall();
    rc = dpns_closedir(dir_descriptor->p_dir);
    ReleaseTokenFSCall();
    if (rc)
        Return(dpns2fsal_error(serrno), serrno, INDEX_FSAL_opendir);

    if (dpns_endsess() < 0)
    	Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_closedir);

    // Fill the descriptor with 0s
    memset(dir_descriptor, 0, sizeof(fsal_dir_t));

    Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_closedir);
}