76 fd = open_read(
"users/assign");
77 if (
fd == -1) die_opena();
81 fdtemp = open_trunc(
"users/assign.cdb.tmp");
82 if (
fdtemp == -1) die_opent();
84 if (cdb_make_start(&
cdb,
fdtemp) == -1) die_writet();
89 if (getln(&
bi,&line,&
match,
'\n') != 0) die_reada();
90 if (line.len && (line.s[0] ==
'.'))
break;
93 if (byte_chr(line.s,line.len,
'\0') < line.len)
die_format();
94 i = byte_chr(line.s,line.len,
':');
98 if (line.s[0] ==
'+') {
100 case_lowerb(
key.s,
key.len);
108 case_lowerb(
key.s,
key.len);
111 if (!stralloc_copyb(&
data,line.s + i + 1,line.len - i - 1))
die_nomem();
114 for (i = 0; i <
data.len; ++i)
115 if (
data.s[i] ==
':') {
117 if (++numcolons == 6)
break;
127 if (cdb_make_finish(&
cdb) == -1) die_writet();
128 if (fsync(
fdtemp) == -1) die_writet();
129 if (close(
fdtemp) == -1) die_writet();
130 if (
rename(
"users/assign.cdb.tmp",
"users/assign.cdb") == -1) die_rename();