rem: for (i = files_index - 1; i >= 0; i--)
add: for (i = files_index; i-- != 0; )
context: extract_dirs_from_files (const char *dirname, int ignore_dot_and_dot_dot){  register int i, j;  if (*dirname && LOOP_DETECT)    {      /* Insert a marker entry first.  When we dequeue this marker entry,	 we'll know that DIRNAME has been processed and may be removed	 from the set of active directories.  */      queue_directory (NULL, dirname);    }  /* Queue the directories last one first, because queueing reverses the     order.  */  for (i = files_index - 1; i >= 0; i--)    if ((files[i].filetype == directory || files[i].filetype == arg_directory)	&& (!ignore_dot_and_dot_dot	    || !basename_is_dot_or_dotdot (files[i].name)))      {	if (files[i].name[0] == '/' || dirname[0] == 0)	  {	    queue_directory (files[i].name, files[i].linkname);	  }	else	  {	    char *path = path_concat (dirname, files[i].name, NULL);	    queue_directory (path, files[i].linkname);	    free (path);	  }	if (files[i].filetype == arg_directory)	  free (files[i].name);      }  /* Now delete the directories from the table, compacting all the remaining     entries.  */  for (i = 0, j = 0; i < files_index; i++)    if (files[i].filetype != arg_directory)      files[j++] = files[i];  files_index = j;}