Example #1
0
static void
do_copy_all(char *src, char *dst)
{
    int err;
    DIR *dirp;
    char *c, *buf;

    diag_printf("Copy all files from %s to %s\n", src, dst);
    dirp = opendir(src);    
    if(dirp == NULL) {
        diag_printf("Can't open directory \"%s\"\n", src);
        return;
    }
    for(;;) {
        struct dirent *entry = readdir( dirp );
        char srcname[PATH_MAX];
        char dstname[PATH_MAX];
        
        if( entry == NULL )
            break;
        strcpy(srcname, src);
        strcpy(dstname, dst);
        if( !(src[0] == '/' && src[1] == 0 ) )
            strcat(srcname, "/" );
        if( !(dst[0] == '/' && dst[1] == 0 ) )
            strcat(dstname, "/" );
        strcat(srcname, entry->d_name );
        strcat(dstname, entry->d_name );
        if ((c = rindex(srcname, '.')) != (char *)NULL) {
            if (strcmp(c, ".jpg") == 0) {
                diag_printf("Copy %s => %s\n", srcname, dstname); 
                do_copy_file(srcname, dstname);
            }
        }
    }
    closedir(dirp);
}
Example #2
0
File: task_copy.C Project: gnb/cant
static gboolean
copy_one(const char *filename, void *userdata)
{
    copy_task_t *ct = (copy_task_t *)userdata;
    const char *fromfile;
    string_var tofile, mappedfile;
    
    // TODO: WTF
        
    /* construct the target filename */
    if (ct->flatten_)
    	fromfile = file_basename_c(filename);
    else
    	fromfile = filename;
	
    if (ct->tofile_ != 0)
    	tofile = ct->expand(ct->tofile_);
    else if (ct->exp_todir_ != 0)
	tofile = g_strconcat(ct->exp_todir_, "/", filename, 0);
    else
    {
	ct->result_ = FALSE; 	/* failed */
	return FALSE;	    	/* stop iteration */
    }
    if ((mappedfile = ct->mapper_->map(tofile)) == 0)
	return TRUE;	    	/* keep going */
        
    log::infof("%s -> %s\n", filename, mappedfile.data());
	
    /* TODO: apply proj->basedir */

    if (file_is_directory(filename) == 0)
    {
    	int r;
	unsigned ncopied = ct->ncopied_;
	
	r = file_apply_children(filename, copy_one, userdata);
	
	if (r < 0)
	{
	    log::perror(filename);
	}
	else if (ncopied == ct->ncopied_ && ct->include_empty_dirs_)
	{
	    /* no files copied underneath this directory -- it must be empty */
	    /* TODO: sensible mode from original directory */
	    /* TODO: control uid,gid */
	    if (file_build_tree(mappedfile, 0755))
	    {
		log::perror(filename);
		ct->result_ = FALSE;
    	    }
	}
    }
    else
    {
	if (!do_copy_file(filename, mappedfile))
	    ct->result_ = FALSE;
    }
        
    return ct->result_;    /* keep going if we didn't fail */
}