X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9ac3591366ae0048ba0fb3bba86b20851c1bfd61..7b6fa00ff8abf063dae4a974fc824d430d228d14:/uidlist.c diff --git a/uidlist.c b/uidlist.c index 0f7d0c82..1747c836 100644 --- a/uidlist.c +++ b/uidlist.c @@ -46,9 +46,6 @@ struct idlist { static struct idlist *uidlist; static struct idlist *gidlist; -static struct id_pair *pair_list; -static int pair_cnt = 0, pair_alloc = 0; - static struct idlist *add_to_list(struct idlist **root, int id, char *name, int id2) { @@ -310,7 +307,7 @@ void send_uid_list(int f) /* recv a complete uid/gid mapping from the peer and map the uid/gid * in the file list to local names */ -void recv_uid_list(int f) +void recv_uid_list(int f, struct file_list *flist) { int id, i; char *name; @@ -339,42 +336,13 @@ void recv_uid_list(int f) } } - /* Now convert the id_pair array over to mapped uid/gid values. */ + /* Now convert all the uids/gids from sender values to our values. */ if (am_root && preserve_uid && !numeric_ids) { - for (i = 0; i < pair_cnt; i++) - pair_list[i].uid = match_uid(pair_list[i].uid); + for (i = 0; i < flist->count; i++) + flist->files[i]->uid = match_uid(flist->files[i]->uid); } if (preserve_gid && (!am_root || !numeric_ids)) { - for (i = 0; i < pair_cnt; i++) - pair_list[i].gid = match_gid(pair_list[i].gid); - } -} - -struct id_pair *id_pair(uid_t uid, gid_t gid) -{ - static int j = 0; - - if (pair_cnt) { - int start = j; - /* We start our search where we left off because - * the IDs usually come in clumps. */ - do { - if (uid == pair_list[j].uid && gid == pair_list[j].gid) - return pair_list + j; - if (++j == pair_cnt) - j = 0; - } while (j != start); + for (i = 0; i < flist->count; i++) + flist->files[i]->gid = match_gid(flist->files[i]->gid); } - - if (pair_cnt == pair_alloc) { - pair_alloc += 128; - pair_list = realloc_array(pair_list, struct id_pair, - pair_alloc); - } - - j = pair_cnt++; - pair_list[j].uid = uid; - pair_list[j].gid = gid; - - return pair_list + j; }