static int partno; /* Counts from 0..#parts-1 */
static void *cur_obj; /* The object being read into */
static int cur_id; /* and its index in the table */
-static int cur_obj_is_blank;
+static int old_nelem;
static unsigned char *idgap; /* idgap && idgap[ID] iff part#0 lacks ID */
static int idgap_max; /* FIXME */
partno = 0;
cur_id = -1;
cur_obj = NULL;
+ old_nelem = type == EF_BAD ? 0 : ef_nelem(type);
idgap = NULL;
idgap_max = 0;
}
/*
* Seek to current table's ID-th record.
* ID must be acceptable.
- * Store it in cur_obj, and set cur_id and cur_obj_is_blank accordingly.
+ * Store it in cur_obj, and set cur_id accordingly.
* Return 0 on success, -1 on failure.
*/
static int
{
struct empfile *ep = &empfile[cur_type];
- cur_obj_is_blank = id >= ep->fids;
-
if (id >= ef_nelem(cur_type)) {
if (!ef_ensure_space(cur_type, id, 1))
return gripe("Can't put ID %d into table %s", id, ep->name);
/*
* Get the next object.
* Must not have a record index.
- * Store it in cur_obj, and set cur_id and cur_obj_is_blank accordingly.
+ * Store it in cur_obj, and set cur_id accordingly.
* Return 0 on success, -1 on failure.
*/
static int
/*
* Get the next object, it has record index ID.
- * Store it in cur_obj, and set cur_id and cur_obj_is_blank accordingly.
+ * Store it in cur_obj, and set cur_id accordingly.
* Ensure we're omitting the same objects as the previous parts.
* Reset any omitted objects to default state.
* Return 0 on success, -1 on failure.
* it's for a const selector, unless the object is still blank, or
* it was already given in a previous part of a split table.
*/
- return (!cur_obj_is_blank && (fldca[fldno]->ca_flags & NSC_CONST))
+ return (cur_id < old_nelem && (fldca[fldno]->ca_flags & NSC_CONST))
|| fldidx[fldno] < cafldspp[i];
}