rem: column_info = XMALLOC (struct column_info, max_idx); allocate = 1;
add: size_t new_column_info_alloc; size_t *p;  if (max_cols < max_idx / 2) {  column_info = xnrealloc (column_info, max_cols, 2 * sizeof *column_info); new_column_info_alloc = 2 * max_cols; } else { column_info = xnrealloc (column_info, max_idx, sizeof *column_info); new_column_info_alloc = max_idx; }   { size_t column_info_growth = new_column_info_alloc - column_info_alloc; size_t s = column_info_alloc + 1 + new_column_info_alloc; size_t t = s * column_info_growth; if (s < new_column_info_alloc || t / column_info_growth != s) xalloc_die (); p = xnmalloc (t / 2, sizeof *p); }   for (i = column_info_alloc; i < new_column_info_alloc; i++) { column_info[i].col_arr = p; p += i + 1; }  column_info_alloc = new_column_info_alloc;
context: init_column_info (void){  int i;  int allocate = 0;  max_idx = line_length / MIN_COLUMN_WIDTH;  if (max_idx == 0)    max_idx = 1;  if (column_info == NULL)    {      column_info = XMALLOC (struct column_info, max_idx);      allocate = 1;    }  for (i = 0; i < max_idx; ++i)    {      int j;      column_info[i].valid_len = 1;      column_info[i].line_len = (i + 1) * MIN_COLUMN_WIDTH;      if (allocate)	column_info[i].col_arr = XMALLOC (int, i + 1);      for (j = 0; j <= i; ++j)	column_info[i].col_arr[j] = MIN_COLUMN_WIDTH;    }}