libsaria: Read a directory into two vectors

I separate out directories and files so they can be processed
differenty.
This commit is contained in:
Bryan Schumaker 2011-09-17 12:27:20 -04:00
parent dfdb38be27
commit 5167c6f012
3 changed files with 79 additions and 0 deletions

18
include/libsaria/path.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef LIBSARIA_PATH_H
#define LIBSARIA_PATH_H
#include <string>
#include <vector>
using namespace std;
#include <sys/types.h>
struct file
{
string name;
ino_t d_ino;
};
void readdir(string, vector<file> &, vector<file> &);
#endif /* LIBSARIA_PATH_H */

View File

@ -1,6 +1,7 @@
#include <libsaria/print.h>
#include <libsaria/idle.h>
#include <libsaria/path.h>
#include "library.h"
#include "path.h"
@ -41,4 +42,12 @@ ScanTask::~ScanTask()
*/
void ScanTask::run_task()
{
vector<file> files;
vector<file> dirs;
readdir(dir, files, dirs);
for (unsigned int i = 0; i < files.size(); i++)
print("File: " + files[i].name);
for (unsigned int i = 0; i < dirs.size(); i++)
print("Dir: " + dirs[i].name);
}

52
libsaria/path/dir.cpp Normal file
View File

@ -0,0 +1,52 @@
#include <dirent.h>
#include <sys/stat.h>
#include <libsaria/path.h>
#include <iostream>
using namespace std;
/* I want to use the d_type field in a dirent */
#ifndef __USE_BSD
#define __USE_BSD
#endif
static void sort_entry(struct dirent *dirp, vector<file> &files, vector<file> &dirs)
{
struct file entry;
if (dirp == NULL)
return;
entry.name = dirp->d_name;
entry.d_ino = dirp->d_ino;
if (entry.name == "." || entry.name == "..")
return;
switch(dirp->d_type) {
case DT_DIR:
dirs.push_back(entry);
break;
case DT_REG:
files.push_back(entry);
default:
break;
}
}
void readdir(string dir, vector<file> &files, vector<file> &dirs)
{
DIR *dp;
struct dirent *dirp;
dp = opendir(dir.c_str());
if (dp == NULL)
return;
do {
dirp = readdir(dp);
sort_entry(dirp, files, dirs);
} while (dirp != NULL);
closedir(dp);
}