From d8eed0241bb8d0cbe18ffffb3a1459bd8f83b1c9 Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Wed, 23 Jun 2004 05:08:01 +0000 Subject: ok, addParentPathToDB now works! also, recursive directory checking for updating on a particular song path now work git-svn-id: https://svn.musicpd.org/mpd/trunk@1624 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/directory.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'src/directory.c') diff --git a/src/directory.c b/src/directory.c index d15894633..4ad281c43 100644 --- a/src/directory.c +++ b/src/directory.c @@ -449,14 +449,29 @@ Directory * addDirectoryPathToDB(char * utf8path, char ** shortname) { if(strlen(parent)==0) parentDirectory = (void *)mp3rootDirectory; else parentDirectory = addDirectoryPathToDB(parent,shortname); + if(!parentDirectory) { + free(parent); + return NULL; + } + *shortname = utf8path+strlen(parent); while(*(*shortname) && *(*shortname)=='/') (*shortname)++; if(!findInList(parentDirectory->subDirectories,*shortname, &directory)) { - directory = newDirectory(utf8path, parentDirectory); - insertInList(parentDirectory->subDirectories,*shortname, - directory); + struct stat st; + if(myStat(utf8path, &st) < 0 || + inodeFoundInParent(parentDirectory, + st.st_ino, st.st_dev)) + { + free(parent); + return NULL; + } + else { + directory = newDirectory(utf8path, parentDirectory); + insertInList(parentDirectory->subDirectories,*shortname, + directory); + } } /* if we're adding directory paths, make sure to delete filenames @@ -465,7 +480,7 @@ Directory * addDirectoryPathToDB(char * utf8path, char ** shortname) { free(parent); - return (Directory *)parentDirectory; + return (Directory *)directory; } Directory * addParentPathToDB(char * utf8path, char ** shortname) { @@ -477,6 +492,11 @@ Directory * addParentPathToDB(char * utf8path, char ** shortname) { if(strlen(parent)==0) parentDirectory = (void *)mp3rootDirectory; else parentDirectory = addDirectoryPathToDB(parent,shortname); + if(!parentDirectory) { + free(parent); + return NULL; + } + *shortname = utf8path+strlen(parent); while(*(*shortname) && *(*shortname)=='/') (*shortname)++; @@ -562,15 +582,17 @@ int updatePath(char * utf8path) { */ if(isDir(path) || isMusic(path,NULL)) { parentDirectory = addParentPathToDB(path,&shortname); - if(!parentDirectory->stat && statDirectory(parentDirectory) < 0) + if(!parentDirectory || ( + !parentDirectory->stat && + statDirectory(parentDirectory) < 0)) { } - else if(inodeFoundInParent(parentDirectory->parent, + else if(0 == inodeFoundInParent(parentDirectory->parent, parentDirectory->stat->inode, - parentDirectory->stat->device)) + parentDirectory->stat->device) && + addToDirectory(parentDirectory, shortname, path) + >0) { - } - else if(addToDirectory(parentDirectory,shortname,path)>0) { ret = 1; } } -- cgit v1.2.3