diff options
| author | Wayne Davison <wayned@samba.org> | 2006-01-25 17:10:29 +0000 |
|---|---|---|
| committer | Wayne Davison <wayned@samba.org> | 2006-01-25 17:10:29 +0000 |
| commit | 7b6fa00ff8abf063dae4a974fc824d430d228d14 (patch) | |
| tree | 13098baa6b9875fb4e76d6db22e72677fb53808a /uidlist.c | |
| parent | 9ac3591366ae0048ba0fb3bba86b20851c1bfd61 (diff) | |
| download | android_external_rsync-7b6fa00ff8abf063dae4a974fc824d430d228d14.tar.gz android_external_rsync-7b6fa00ff8abf063dae4a974fc824d430d228d14.tar.bz2 android_external_rsync-7b6fa00ff8abf063dae4a974fc824d430d228d14.zip | |
Decided to hold off on the potential memory savings of indexed
uid/gid pairs until the next release.
Diffstat (limited to 'uidlist.c')
| -rw-r--r-- | uidlist.c | 44 |
1 files changed, 6 insertions, 38 deletions
@@ -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; } |
