Expose several tree options, to control recursive dir addition.

This commit is contained in:
Vreixo Formoso 2007-12-29 17:15:24 +01:00
parent 501275279d
commit a2645cbf40
4 changed files with 109 additions and 6 deletions

View File

@ -66,7 +66,10 @@ int main(int argc, char **argv)
return 1; return 1;
} }
iso_image_set_msgs_severities(image, "NEVER", "ALL", ""); iso_image_set_msgs_severities(image, "NEVER", "ALL", "");
iso_tree_set_follow_symlinks(image, 0);
iso_tree_set_ignore_hidden(image, 0);
iso_tree_set_stop_on_error(image, 0);
result = iso_tree_add_dir_rec(image, iso_image_get_root(image), argv[1]); result = iso_tree_add_dir_rec(image, iso_image_get_root(image), argv[1]);
if (result < 0) { if (result < 0) {
printf ("Error adding directory %d\n", result); printf ("Error adding directory %d\n", result);

View File

@ -33,18 +33,18 @@ struct Iso_Image_Rec_Opts
/** /**
* Whether to follow symlinks or just add them as symlinks * Whether to follow symlinks or just add them as symlinks
*/ */
unsigned int follow_symlinks; unsigned int follow_symlinks : 1;
/** /**
* Whether to skip hidden files * Whether to skip hidden files
*/ */
unsigned int ignore_hidden; unsigned int ignore_hidden : 1;
/** /**
* Whether to stop on an error. Some errors, such as memory errors, * Whether to stop on an error. Some errors, such as memory errors,
* always cause a stop * always cause a stop
*/ */
unsigned int stop_on_error; unsigned int stop_on_error : 1;
/** /**
* Files to exclude * Files to exclude

View File

@ -731,6 +731,45 @@ int iso_tree_add_new_symlink(IsoDir *parent, const char *name,
int iso_tree_add_new_special(IsoDir *parent, const char *name, mode_t mode, int iso_tree_add_new_special(IsoDir *parent, const char *name, mode_t mode,
dev_t dev, IsoSpecial **special); dev_t dev, IsoSpecial **special);
/**
* Set whether to follow or not symbolic links when added a file from a source
* to IsoImage. Default behavior is to not follow symlinks.
*/
void iso_tree_set_follow_symlinks(IsoImage *image, int follow);
/**
* Get current setting for follow_symlinks.
*
* @see iso_tree_set_follow_symlinks
*/
int iso_tree_get_follow_symlinks(IsoImage *image);
/**
* Set whether to skip or not hidden files when adding a directory recursibely.
* Default behavior is to not ignore them, i.e., to add hidden files to image.
*/
void iso_tree_set_ignore_hidden(IsoImage *image, int skip);
/**
* Get current setting for ignore_hidden.
*
* @see iso_tree_set_ignore_hidden
*/
int iso_tree_get_ignore_hidden(IsoImage *image);
/**
* Set whether to stop or not when an error happens when adding recursively a
* directory to the iso tree. Default value is to skip file and continue.
*/
void iso_tree_set_stop_on_error(IsoImage *image, int stop);
/**
* Get current setting for stop_on_error.
*
* @see iso_tree_set_stop_on_error
*/
int iso_tree_get_stop_on_error(IsoImage *image);
/** /**
* Add a new node to the image tree, from an existing file. * Add a new node to the image tree, from an existing file.
* *

View File

@ -296,6 +296,63 @@ int iso_tree_add_new_special(IsoDir *parent, const char *name, mode_t mode,
return ++parent->nchildren; return ++parent->nchildren;
} }
/**
* Set whether to follow or not symbolic links when added a file from a source
* to IsoImage.
*/
void iso_tree_set_follow_symlinks(IsoImage *image, int follow)
{
image->recOpts.follow_symlinks = follow ? 1 : 0;
}
/**
* Get current setting for follow_symlinks.
*
* @see iso_tree_set_follow_symlinks
*/
int iso_tree_get_follow_symlinks(IsoImage *image)
{
return image->recOpts.follow_symlinks;
}
/**
* Set whether to skip or not hidden files when adding a directory recursibely.
* Default behavior is to not ignore them, i.e., to add hidden files to image.
*/
void iso_tree_set_ignore_hidden(IsoImage *image, int skip)
{
image->recOpts.ignore_hidden = skip ? 1 : 0;
}
/**
* Get current setting for ignore_hidden.
*
* @see iso_tree_set_ignore_hidden
*/
int iso_tree_get_ignore_hidden(IsoImage *image)
{
return image->recOpts.ignore_hidden;
}
/**
* Set whether to stop or not when an error happens when adding recursively a
* directory to the iso tree. Default value is to skip file and continue.
*/
void iso_tree_set_stop_on_error(IsoImage *image, int stop)
{
image->recOpts.stop_on_error = stop ? 1 : 0;
}
/**
* Get current setting for stop_on_error.
*
* @see iso_tree_set_stop_on_error
*/
int iso_tree_get_stop_on_error(IsoImage *image)
{
return image->recOpts.stop_on_error;
}
static static
int iso_tree_add_node_builder(IsoImage *image, IsoDir *parent, int iso_tree_add_node_builder(IsoImage *image, IsoDir *parent,
IsoFileSource *src, IsoNodeBuilder *builder, IsoFileSource *src, IsoNodeBuilder *builder,
@ -415,15 +472,19 @@ int iso_add_dir_aux(IsoImage *image, IsoDir *parent, IsoFileSource *dir)
char *name; char *name;
IsoNode *new; IsoNode *new;
iso_msg_debug(image, "Adding file %s", iso_file_source_get_path(file));
name = iso_file_source_get_name(file); name = iso_file_source_get_name(file);
if (check_excludes(image, iso_file_source_get_path(file))) { if (check_excludes(image, iso_file_source_get_path(file))) {
iso_msg_debug(image, "Skipping excluded file %s",
iso_file_source_get_path(file));
action = 2; action = 2;
} else if (check_hidden(image, name)) { } else if (check_hidden(image, name)) {
iso_msg_debug(image, "Skipping hidden file %s",
iso_file_source_get_path(file));
action = 2; action = 2;
} else { } else {
iso_msg_debug(image, "Adding file %s",
iso_file_source_get_path(file));
action = 1; action = 1;
} }