X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Fdir.c;h=65827861c2ab26302ad22c9798b6ecc732a9efae;hb=8ff0fd08d6e1cc97cdb7e94b7cd97dc28c29e674;hp=f279eb6838290748fb9b74805e6b4b0fd415bfd0;hpb=bc90f29d0c20f85e77761dbf2c43aec96848af36;p=bluesky.git diff --git a/bluesky/dir.c b/bluesky/dir.c index f279eb6..6582786 100644 --- a/bluesky/dir.c +++ b/bluesky/dir.c @@ -3,7 +3,29 @@ * Copyright (C) 2009 The Regents of the University of California * Written by Michael Vrable * - * TODO: Licensing + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ #include @@ -132,7 +154,7 @@ gboolean bluesky_directory_insert(BlueSkyInode *dir, g_hash_table_insert(dir->dirhash_folded, d->name_folded, d); bluesky_inode_update_ctime(dir, 1); - bluesky_inode_flush(dir->fs, dir); + //bluesky_inode_do_sync(dir); // TODO: Needed? return TRUE; } @@ -161,7 +183,6 @@ gboolean bluesky_directory_remove(BlueSkyInode *dir, gchar *name) g_sequence_remove(i); bluesky_inode_update_ctime(dir, 1); - bluesky_inode_flush(dir->fs, dir); return TRUE; } @@ -186,6 +207,8 @@ gboolean bluesky_rename(BlueSkyInode *dir1, gchar *name1, if (d1 == NULL) return FALSE; + uint64_t inum = d1->inum; + /* Check that this rename does not cause a directory to be moved into one * of its descendants, as that would create a loop of directories * disconnected from the root. */ @@ -196,8 +219,14 @@ gboolean bluesky_rename(BlueSkyInode *dir1, gchar *name1, return FALSE; bluesky_directory_remove(dir2, name2); + + // TODO: Drop inode reference } + bluesky_directory_remove(dir1, name1); + bluesky_directory_insert(dir2, name2, inum); + + return TRUE; } /* Dump the contents of a directory to stdout. Debugging only. */