diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-06-23 05:08:01 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-06-23 05:08:01 +0000 |
commit | d8eed0241bb8d0cbe18ffffb3a1459bd8f83b1c9 (patch) | |
tree | 07ebd13a2ac829efcfa5f13db84dae96b10041f7 | |
parent | b8d2ef8768b4ec72f9c81fe49e88ed77ad655663 (diff) | |
download | mpd-d8eed0241bb8d0cbe18ffffb3a1459bd8f83b1c9.tar.gz mpd-d8eed0241bb8d0cbe18ffffb3a1459bd8f83b1c9.tar.xz mpd-d8eed0241bb8d0cbe18ffffb3a1459bd8f83b1c9.zip |
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
-rw-r--r-- | src/directory.c | 40 |
1 files changed, 31 insertions, 9 deletions
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; } } |