* Copyright (C) 2003-2007 Wayne Davison
*
* This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ * with this program; if not, visit the http://fsf.org website.
*/
#include "rsync.h"
extern int modify_window;
extern int relative_paths;
extern int human_readable;
+extern char *module_dir;
extern unsigned int module_dirlen;
extern mode_t orig_umask;
extern char *partial_dir;
* rootdir will be ignored to avoid expansion of the string.
*
* The rootdir string contains a value to use in place of a leading slash.
- * Specify NULL to get the default of lp_path(module_id).
+ * Specify NULL to get the default of "module_dir".
*
* The depth var is a count of how many '..'s to allow at the start of the
* path. If symlink is set, combine its value with the "p" value to get
int plen = strlen(p);
if (*p == '/') {
if (!rootdir)
- rootdir = lp_path(module_id);
+ rootdir = module_dir;
rlen = strlen(rootdir);
depth = 0;
p++;
if (len == 1 && *dir == '.')
return 1;
- if ((*dir == '/' ? len : curr_dir_len + 1 + len) >= sizeof curr_dir)
+ if ((*dir == '/' ? len : curr_dir_len + 1 + len) >= sizeof curr_dir) {
+ errno = ENAMETOOLONG;
return 0;
+ }
if (!set_path_only && chdir(dir))
return 0;
#define MALLOC_MAX 0x40000000
-void *_new_array(unsigned int size, unsigned long num)
+void *_new_array(unsigned long num, unsigned int size, int use_calloc)
{
if (num >= MALLOC_MAX/size)
return NULL;
- return malloc(size * num);
+ return use_calloc ? calloc(num, size) : malloc(num * size);
}
void *_realloc_array(void *ptr, unsigned int size, unsigned long num)