stacker 6947bfe5ec Sorted the data file content extents by ECMA-119 tree rather than
by the red-black tree which shall consolidate files with identical
source object. Discovered and repaired a flaw in transitivity of
2015-07-27 13:50:57 +02:00

125 lines
3.0 KiB

* Copyright (c) 2007 Vreixo Formoso
* 2012 - 2014 Thomas Schmitt
* This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
* or later as published by the Free Software Foundation.
* See COPYING file for details.
#ifndef LIBISO_ECMA119_TREE_H_
#define LIBISO_ECMA119_TREE_H_
#include "libisofs.h"
#include "ecma119.h"
enum ecma119_node_type {
* Struct with info about a node representing a directory
struct ecma119_dir_info
/* Block where the directory entries will be written on image */
size_t block;
size_t nchildren;
Ecma119Node **children;
* Size of the dir, i.e., sum of the lengths of all directory records.
* It is computed by calc_dir_size() [ecma119.c].
* Note that this don't include the length of any SUSP Continuation
* Area needed by the dir, but it includes the size of the SUSP entries
* than fit in the directory records System Use Field.
size_t len;
* Real parent if the dir has been reallocated. NULL otherwise.
Ecma119Node *real_parent;
* A node for a tree containing all the information necessary for writing
* an ISO9660 volume.
struct ecma119_node
* Name in ASCII, conforming to selected ISO level.
* Version number is not include, it is added on the fly
char *iso_name;
Ecma119Node *parent;
IsoNode *node; /*< reference to the iso node */
uint32_t ino;
nlink_t nlink;
/**< file, symlink, special, directory or placeholder */
enum ecma119_node_type type;
IsoFileSrc *file;
struct ecma119_dir_info *dir;
/** this field points to the relocated directory. */
Ecma119Node *real_me;
} info;
/* For recording files which are hidden in ECMA-119 */
struct iso_filesrc_list_item
IsoFileSrc *src;
struct iso_filesrc_list_item *next;
int iso_filesrc_list_destroy(struct iso_filesrc_list_item **start_item);
int ecma119_tree_create(Ecma119Image *img);
* Free an Ecma119Node, and its children if node is a dir
void ecma119_node_free(Ecma119Node *node);
* Search the tree for a certain IsoNode and return its owning Ecma119Node
* or NULL.
Ecma119Node *ecma119_search_iso_node(Ecma119Image *img, IsoNode *node);
* Tell whether node is a dedicated relocation directory which only contains
* relocated directories.
int ecma119_is_dedicated_reloc_dir(Ecma119Image *img, Ecma119Node *node);
* Determines the ECMA-119 name from node name.
* @param flag bit0= Do not issue error messages
int iso_get_ecma119_name(IsoWriteOpts *opts, char *input_charset, int imgid,
char *node_name, enum IsoNodeType node_type,
char **name, int flag);
#endif /*LIBISO_ECMA119_TREE_H_*/