extern int copy_links;
extern int copy_unsafe_links;
extern int protocol_version;
-extern int io_error;
extern int sanitize_paths;
extern int read_batch;
extern struct exclude_struct **server_exclude_list;
extern struct exclude_struct **local_exclude_list;
+int io_error;
+
static struct file_struct null_file;
static void clean_flist(struct file_list *flist, int strip_root, int no_dups);
if (size <= 0)
size = ARENA_SIZE;
- a = malloc(sizeof(*a));
+ a = new(struct string_area);
if (!a)
out_of_memory("string_area_new");
- a->current = a->base = malloc(size);
+ a->current = a->base = new_array(char, size);
if (!a->current)
out_of_memory("string_area_new buffer");
a->end = a->base + size;
static void flist_expand(struct file_list *flist)
{
if (flist->count >= flist->malloced) {
- size_t new_bytes;
void *new_ptr;
if (flist->malloced < 1000)
else
flist->malloced *= 2;
- new_bytes = sizeof(flist->files[0]) * flist->malloced;
-
- if (flist->files)
- new_ptr = realloc(flist->files, new_bytes);
- else
- new_ptr = malloc(new_bytes);
+ if (flist->files) {
+ new_ptr = realloc_array(flist->files,
+ struct file_struct *,
+ flist->malloced);
+ } else {
+ new_ptr = new_array(struct file_struct *,
+ flist->malloced);
+ }
if (verbose >= 2) {
rprintf(FINFO, "expand file_list to %.0f bytes, did%s move\n",
- (double) new_bytes,
+ (double)sizeof(flist->files[0])
+ * flist->malloced,
(new_ptr == flist->files) ? " not" : "");
}
else
l2 = read_byte(f);
- file = (struct file_struct *) malloc(sizeof(*file));
+ file = new(struct file_struct);
if (!file)
out_of_memory("receive_file_entry");
memset((char *) file, 0, sizeof(*file));
rprintf(FERROR, "overflow: l=%d\n", l);
overflow("receive_file_entry");
}
- file->link = (char *) malloc(l + 1);
+ file->link = new_array(char, l + 1);
if (!file->link)
out_of_memory("receive_file_entry 2");
read_sbuf(f, file->link, l);
#endif
if (always_checksum) {
- file->sum = (char *) malloc(MD4_SUM_LENGTH);
+ file->sum = new_array(char, MD4_SUM_LENGTH);
if (!file->sum)
out_of_memory("md4 sum");
if (protocol_version < 21) {
return NULL;
}
}
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FERROR, "readlink %s failed: %s\n",
full_fname(fname), strerror(save_errno));
return NULL;
if (verbose > 2)
rprintf(FINFO, "make_file(%s,*,%d)\n", fname, exclude_level);
- file = (struct file_struct *) malloc(sizeof(*file));
+ file = new(struct file_struct);
if (!file)
out_of_memory("make_file");
memset((char *) file, 0, sizeof(*file));
d = opendir(dir);
if (!d) {
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FERROR, "opendir %s failed: %s\n",
full_fname(dir), strerror(errno));
return;
l = strlen(fname);
if (fname[l - 1] != '/') {
if (l == MAXPATHLEN - 1) {
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FERROR, "skipping long-named directory: %s\n",
full_fname(fname));
closedir(d);
strcpy(p, ".cvsignore");
add_exclude_file(&exclude_list,fname,MISSING_OK,ADD_EXCLUDE);
} else {
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FINFO,
"cannot cvs-exclude in long-named directory %s\n",
full_fname(fname));
}
}
- for (di = readdir(d); di; di = readdir(d)) {
+ for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
- if (dname[0] == '.' && (dname[1] == '\0' ||
- (dname[1] == '.' && dname[2] == '\0')))
+ if (dname[0] == '.' && (dname[1] == '\0'
+ || (dname[1] == '.' && dname[2] == '\0')))
continue;
strlcpy(p, dname, MAXPATHLEN - l);
send_file_name(f, flist, fname, recurse, 0);
}
+ if (errno) {
+ io_error |= IOERR_GENERAL;
+ rprintf(FERROR, "readdir(%s): (%d) %s\n",
+ dir, errno, strerror(errno));
+ }
if (local_exclude_list)
free_exclude_list(&local_exclude_list); /* Zeros pointer too */
if (link_stat(fname, &st) != 0) {
if (f != -1) {
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FERROR, "link_stat %s failed: %s\n",
full_fname(fname), strerror(errno));
}
olddir = push_dir(dir, 1);
if (!olddir) {
- io_error = 1;
+ io_error |= IOERR_GENERAL;
rprintf(FERROR, "push_dir %s failed: %s\n",
full_fname(dir), strerror(errno));
continue;
start_read = stats.total_read;
- flist = (struct file_list *) malloc(sizeof(flist[0]));
+ flist = new(struct file_list);
if (!flist)
goto oom;
flist->count = 0;
flist->malloced = 1000;
- flist->files =
- (struct file_struct **) malloc(sizeof(flist->files[0]) *
- flist->malloced);
+ flist->files = new_array(struct file_struct *, flist->malloced);
if (!flist->files)
goto oom;
{
struct file_list *flist;
- flist = (struct file_list *) malloc(sizeof(flist[0]));
+ flist = new(struct file_list);
if (!flist)
out_of_memory("send_file_list");