Exemple #1
0
void tree_item_selected( GtkWidget* item )
{
    gchar* current_path = context.current_path;
    memset( current_path, 0, PAKFile::MAX_FILENAMESIZE );

    if( GTK_TREE( item->parent )->level != 0 ) {
	walk_up_tree( item );
    }

    build_table( );
}
Exemple #2
0
void walk_up_tree( GtkWidget* item )
{
    gchar* current_path = context.current_path;
    gchar* text;
    GtkWidget* widget = item;
    GtkTree* next_tree = GTK_TREE( widget->parent );

    if( next_tree->level > 1 ) {
	walk_up_tree( next_tree->tree_owner );
    }

    GtkLabel* label = GTK_LABEL( GTK_BIN( widget )->child );
    gtk_label_get( label, &text );
    strncat( current_path, text, PAKFileEntry::MAX_FILENAMESIZE - 1 );

    // No "/" on front of path.
    if( next_tree->level >= 1 ) {
	strcat( current_path, "/" );
    }

}
/*
 * drop the reference count on the tree rooted at 'snap'.  This traverses
 * the tree freeing any blocks that have a ref count of zero after being
 * decremented.
 */
int btrfs_drop_snapshot(struct btrfs_trans_handle *trans, struct btrfs_root
			*root, struct btrfs_buffer *snap)
{
	int ret = 0;
	int wret;
	int level;
	struct btrfs_path path;
	int i;
	int orig_level;

	btrfs_init_path(&path);

	level = btrfs_header_level(&snap->node.header);
	orig_level = level;
	path.nodes[level] = snap;
	path.slots[level] = 0;
	while(1) {
		wret = walk_down_tree(trans, root, &path, &level);
		if (wret > 0)
			break;
		if (wret < 0)
			ret = wret;

		wret = walk_up_tree(trans, root, &path, &level);
		if (wret > 0)
			break;
		if (wret < 0)
			ret = wret;
	}
	for (i = 0; i <= orig_level; i++) {
		if (path.nodes[i]) {
			btrfs_block_release(root, path.nodes[i]);
		}
	}
	return ret;
}