Microoptimization scanning the filesystem
This commit is contained in:
@@ -121,14 +121,19 @@ char *FileNode_GetFullPath(FileNode *fileNode, char *basePath, char *path) {
|
|||||||
return temppath;
|
return temppath;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileNode_GetSize(FileNode *fileNode, char *filePath) {
|
void FileNode_GetSize(FileNode *fileNode, char *file) {
|
||||||
fileNode->flags |= FileFlag_HasSize;
|
fileNode->flags |= FileFlag_HasSize;
|
||||||
fileNode->size = File_GetSize(filePath);
|
fileNode->size = File_GetSize(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileNode_GetFecha(FileNode *fileNode, char *filePath) {
|
void FileNode_GetTime(FileNode *fileNode, char *file) {
|
||||||
fileNode->flags |= FileFlag_HastTime;
|
fileNode->flags |= FileFlag_HastTime;
|
||||||
fileNode->fileTime = FileTime_Get(filePath);
|
fileNode->fileTime = FileTime_Get(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileNode_GetSizeAndTime(FileNode *fileNode, char *file) {
|
||||||
|
fileNode->flags |= FileFlag_HasSize | FileFlag_HastTime;
|
||||||
|
File_GetSizeAndTime(file, &fileNode->size, &fileNode->fileTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileNode_GetCRC(FileNode *fileNode, char *filePath) {
|
void FileNode_GetCRC(FileNode *fileNode, char *filePath) {
|
||||||
@@ -306,22 +311,16 @@ void FileNode_PrintNode(FileNode *fileNode) {
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
/*
|
if(fileNode->flags&FileFlag_HasSize){
|
||||||
// Tamanho
|
printf("\\-Tamanho: %lld\n",fileNode->size);
|
||||||
if(fn->flags&FileFlag_TieneTamanho){
|
}
|
||||||
printf("\\-Tamanho: %lld\n",fn->size);
|
if(fileNode->flags&FileFlag_HastTime){
|
||||||
}
|
printf("\\-Fecha : ");FileTime_Print(fileNode->fileTime);printf("\n");
|
||||||
|
}
|
||||||
|
if(fileNode->flags&FileFlag_HasCRC){
|
||||||
|
printf("\\-CRC : [%08X]\n",fileNode->crc);
|
||||||
|
}
|
||||||
|
|
||||||
// Fecha
|
|
||||||
if(fn->flags&FileFlag_TieneFecha){
|
|
||||||
printf("\\-Fecha : ");FileTime_Print(fn->ft);printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// CRC
|
|
||||||
if(fn->flags&FileFlag_TieneCRC){
|
|
||||||
printf("\\-CRC : [%08X]\n",fn->crc);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileNode_Print(FileNode *fileNode) {
|
void FileNode_Print(FileNode *fileNode) {
|
||||||
@@ -368,13 +367,12 @@ FileNode *FileNode_Build(char *path) {
|
|||||||
if (File_IsDirectory(path)) {
|
if (File_IsDirectory(path)) {
|
||||||
// Obtener datos para los directorios
|
// Obtener datos para los directorios
|
||||||
fileNode->flags |= FileFlag_Directory;
|
fileNode->flags |= FileFlag_Directory;
|
||||||
FileNode_GetFecha(fileNode, path);
|
FileNode_GetTime(fileNode, path);
|
||||||
File_IterateDir(path, FileNode_Build_Iterate, fileNode);
|
File_IterateDir(path, FileNode_Build_Iterate, fileNode);
|
||||||
} else {
|
} else {
|
||||||
// Obtener datos para los ficheros
|
// Obtener datos para los ficheros
|
||||||
fileNode->flags |= FileFlag_Normal;
|
fileNode->flags |= FileFlag_Normal;
|
||||||
FileNode_GetSize(fileNode, path);
|
FileNode_GetSizeAndTime(fileNode, path);
|
||||||
FileNode_GetFecha(fileNode, path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (fileNode);
|
return (fileNode);
|
||||||
@@ -462,12 +460,11 @@ FileNode *FileNode_Refresh(FileNode *fileNode, char *filePath) {
|
|||||||
fileNode->flags |= FileFlag_Normal;
|
fileNode->flags |= FileFlag_Normal;
|
||||||
fileNode->flags &= ~FileFlag_Directory;
|
fileNode->flags &= ~FileFlag_Directory;
|
||||||
}
|
}
|
||||||
size = File_GetSize(filePath);
|
File_GetSizeAndTime(filePath, &size, &fileTime);
|
||||||
if (size != fileNode->size) {
|
if (size != fileNode->size) {
|
||||||
fileNode->estado = FileStatus_Modified;
|
fileNode->estado = FileStatus_Modified;
|
||||||
fileNode->size = size;
|
fileNode->size = size;
|
||||||
}
|
}
|
||||||
fileTime = FileTime_Get(filePath);
|
|
||||||
if (fileTime != fileNode->fileTime) {
|
if (fileTime != fileNode->fileTime) {
|
||||||
fileNode->estado = FileStatus_Modified;
|
fileNode->estado = FileStatus_Modified;
|
||||||
fileNode->fileTime = fileTime;
|
fileNode->fileTime = fileTime;
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ void FileNode_AddChild(FileNode *file, FileNode *file2);
|
|||||||
char *FileNode_GetFullPath(FileNode *fileNode, char *basePath, char *path);
|
char *FileNode_GetFullPath(FileNode *fileNode, char *basePath, char *path);
|
||||||
|
|
||||||
void FileNode_GetSize(FileNode *fileNode, char *file);
|
void FileNode_GetSize(FileNode *fileNode, char *file);
|
||||||
void FileNode_GetFecha(FileNode *fileNode, char *file);
|
void FileNode_GetTime(FileNode *fileNode, char *file);
|
||||||
|
void FileNode_GetSizeAndTime(FileNode *fileNode, char *file);
|
||||||
void FileNode_GetCRC(FileNode *fileNode, char *file);
|
void FileNode_GetCRC(FileNode *fileNode, char *file);
|
||||||
|
|
||||||
void FileNode_Save(FileNode *fileNode, char *fichero);
|
void FileNode_Save(FileNode *fileNode, char *fichero);
|
||||||
|
|||||||
@@ -77,18 +77,18 @@ void FileTime_Set(char *fileName, FileTime fileTime) {
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
FileTime FileTime_Get(char *filename) {
|
FileTime FileTime_Get(char *fileName) {
|
||||||
struct stat fs;
|
struct stat fs;
|
||||||
lstat(filename, &fs);
|
lstat(fileName, &fs);
|
||||||
return (fs.st_mtime);
|
return (fs.st_mtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileTime_Set(char *filename, FileTime t) {
|
void FileTime_Set(char *fileName, FileTime t) {
|
||||||
struct utimbuf utb;
|
struct utimbuf utb;
|
||||||
|
|
||||||
utb.actime = t;
|
utb.actime = t;
|
||||||
utb.modtime = t;
|
utb.modtime = t;
|
||||||
utime(filename, &utb);
|
utime(fileName, &utb);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -137,9 +137,9 @@ int File_ExistsPath(char *path) {
|
|||||||
}
|
}
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
int File_IsDirectory(char *dir) {
|
int File_IsDirectory(char *fileName) {
|
||||||
unsigned rc;
|
unsigned rc;
|
||||||
rc = GetFileAttributes(dir);
|
rc = GetFileAttributes(fileName);
|
||||||
|
|
||||||
if (rc == INVALID_FILE_ATTRIBUTES ) {
|
if (rc == INVALID_FILE_ATTRIBUTES ) {
|
||||||
return (0);
|
return (0);
|
||||||
@@ -149,9 +149,9 @@ int File_IsDirectory(char *dir) {
|
|||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
int File_IsFile(char *fichero) {
|
int File_IsFile(char *fileName) {
|
||||||
unsigned rc;
|
unsigned rc;
|
||||||
rc = GetFileAttributes(fichero);
|
rc = GetFileAttributes(fileName);
|
||||||
|
|
||||||
if (rc == INVALID_FILE_ATTRIBUTES ) {
|
if (rc == INVALID_FILE_ATTRIBUTES ) {
|
||||||
return (0);
|
return (0);
|
||||||
@@ -171,10 +171,10 @@ int File_ExistsPath(char *path) {
|
|||||||
}
|
}
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
int File_IsDirectory(char *dir) {
|
int File_IsDirectory(char *fileName) {
|
||||||
struct stat info;
|
struct stat info;
|
||||||
|
|
||||||
if (lstat(dir, &info) == -1) {
|
if (lstat(fileName, &info) == -1) {
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (S_ISDIR(info.st_mode)) {
|
if (S_ISDIR(info.st_mode)) {
|
||||||
@@ -182,10 +182,10 @@ int File_IsDirectory(char *dir) {
|
|||||||
}
|
}
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
int File_IsFile(char *fichero) {
|
int File_IsFile(char *fileName) {
|
||||||
struct stat info;
|
struct stat info;
|
||||||
|
|
||||||
if (lstat(fichero, &info) == -1) {
|
if (lstat(fileName, &info) == -1) {
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (S_ISDIR(info.st_mode)) {
|
if (S_ISDIR(info.st_mode)) {
|
||||||
@@ -195,19 +195,50 @@ int File_IsFile(char *fichero) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
long long File_GetSize(char *file) {
|
|
||||||
FILE *f;
|
|
||||||
long long tamanho;
|
|
||||||
|
|
||||||
f = fopen(file, "rb");
|
#ifdef WIN32
|
||||||
if (!f)
|
long long File_GetSize(char *fileName) {
|
||||||
return (-1);
|
HANDLE hFile;
|
||||||
|
DWORD fSize;
|
||||||
fseek(f, 0, SEEK_END);
|
hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
tamanho = ftell(f);
|
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
|
||||||
fclose(f);
|
GetFileSize(hFile, &fSize);
|
||||||
return (tamanho);
|
CloseHandle(hFile);
|
||||||
|
return (fSize);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
long long File_GetSize(char *fileName) {
|
||||||
|
struct stat fs;
|
||||||
|
lstat(fileName, &fs);
|
||||||
|
return (fs.st_size);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
|
||||||
|
HANDLE hFile;
|
||||||
|
DWORD fSize;
|
||||||
|
FILETIME ftCreate, ftAccess, ftWrite;
|
||||||
|
hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||||
|
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
|
||||||
|
GetFileSize(hFile, &fSize);
|
||||||
|
GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);
|
||||||
|
CloseHandle(hFile);
|
||||||
|
*size = fSize;
|
||||||
|
*time = FileTime_to_POSIX(ftWrite);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
|
||||||
|
struct stat fs;
|
||||||
|
lstat(fileName, &fs);
|
||||||
|
*size = fs.st_size;
|
||||||
|
*time = fs.st_mtime
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
int File_MakeDirectory(char *path) {
|
int File_MakeDirectory(char *path) {
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ int File_IsFile(char *path);
|
|||||||
|
|
||||||
long long File_GetSize(char *ficheros);
|
long long File_GetSize(char *ficheros);
|
||||||
|
|
||||||
|
void File_GetSizeAndTime(char *ficheros, long long *size, FileTime *time);
|
||||||
|
|
||||||
int File_MakeDirectory(char *path);
|
int File_MakeDirectory(char *path);
|
||||||
|
|
||||||
void File_IterateDir(char *path,
|
void File_IterateDir(char *path,
|
||||||
|
|||||||
27
src/main.c
27
src/main.c
@@ -33,11 +33,6 @@ FileNode *CheckDir(char *path, int recheck);
|
|||||||
int Sync(char *pathLeft, char *pathRight, int recheck, int dryRun);
|
int Sync(char *pathLeft, char *pathRight, int recheck, int dryRun);
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
FILE *file;
|
|
||||||
unsigned long crc = 0;
|
|
||||||
FileTime fileTime;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
Help(argv[0]);
|
Help(argv[0]);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -45,17 +40,12 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
if (!strcmp(argv[1], "info") && argc >= 3) {
|
if (!strcmp(argv[1], "info") && argc >= 3) {
|
||||||
// Informacion de ficheros
|
// Informacion de ficheros
|
||||||
|
int i;
|
||||||
for (i = 2; i < argc; i++) {
|
for (i = 2; i < argc; i++) {
|
||||||
if (File_ExistsPath(argv[i])) {
|
if (File_ExistsPath(argv[i])) {
|
||||||
file = fopen(argv[i], "rb");
|
FileNode *fileNode = FileNode_Build(argv[i]);
|
||||||
if (file) {
|
FileNode_GetCRC(fileNode, argv[i]);
|
||||||
crc = CRC_File(file);
|
FileNode_PrintNode(fileNode);
|
||||||
fclose(file);
|
|
||||||
}
|
|
||||||
fileTime = FileTime_Get(argv[i]);
|
|
||||||
printf("%s:\t[%08X]\t", argv[i], crc);
|
|
||||||
FileTime_Print(fileTime);
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[1], "scan") && argc == 4) {
|
} else if (!strcmp(argv[1], "scan") && argc == 4) {
|
||||||
@@ -64,9 +54,9 @@ int main(int argc, char *argv[]) {
|
|||||||
FileNode *fileNode;
|
FileNode *fileNode;
|
||||||
printf("Building FileNode..\n");
|
printf("Building FileNode..\n");
|
||||||
fileNode = FileNode_Build(argv[2]);
|
fileNode = FileNode_Build(argv[2]);
|
||||||
FileNode_Save(fileNode, argv[3]);
|
|
||||||
tScan=Time_GetTime()-tScan;
|
tScan=Time_GetTime()-tScan;
|
||||||
printf("tScan: %9lldus\n",tScan);
|
printf("tScan: %9lldus\n",tScan);
|
||||||
|
FileNode_Save(fileNode, argv[3]);
|
||||||
} else if (!strcmp(argv[1], "rescan") && argc == 4) {
|
} else if (!strcmp(argv[1], "rescan") && argc == 4) {
|
||||||
// Scanear informacion de directorio y guardar arbol
|
// Scanear informacion de directorio y guardar arbol
|
||||||
FileNode *fileNode;
|
FileNode *fileNode;
|
||||||
@@ -79,6 +69,13 @@ int main(int argc, char *argv[]) {
|
|||||||
tScan=Time_GetTime()-tScan;
|
tScan=Time_GetTime()-tScan;
|
||||||
printf("tScan: %9lldus\n",tScan);
|
printf("tScan: %9lldus\n",tScan);
|
||||||
FileNode_Save(fileNode, argv[3]);
|
FileNode_Save(fileNode, argv[3]);
|
||||||
|
}else{
|
||||||
|
printf("Building FileNode..\n");
|
||||||
|
long long tScan=Time_GetTime();
|
||||||
|
fileNode = FileNode_Build(argv[2]);
|
||||||
|
tScan=Time_GetTime()-tScan;
|
||||||
|
printf("tScan: %9lldus\n",tScan);
|
||||||
|
FileNode_Save(fileNode, argv[3]);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[1], "read") && argc == 3) {
|
} else if (!strcmp(argv[1], "read") && argc == 3) {
|
||||||
// Leer informacion de arbol
|
// Leer informacion de arbol
|
||||||
|
|||||||
Reference in New Issue
Block a user