// // 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; }
/* * 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); }