rem: error (0, 0, _("specified target, %s is not a directory"), quote (target_directory));
add: error (0, 0, _("extra operand %s"), quote (file[2]));
context: main (int argc, char **argv){  int c;  int errors;  int make_backups = 0;  int dest_is_dir;  char *backup_suffix_string;  char *version_control_string = NULL;  struct cp_options x;  char *target_directory = NULL;  int target_directory_specified;  unsigned int n_files;  char **file;  program_name = argv[0];  setlocale (LC_ALL, "");  bindtextdomain (PACKAGE, LOCALEDIR);  textdomain (PACKAGE);  atexit (close_stdout);  cp_option_init (&x);  /* FIXME: consider not calling getenv for SIMPLE_BACKUP_SUFFIX unless     we'll actually use backup_suffix_string.  */  backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");  errors = 0;  while ((c = getopt_long (argc, argv, "bfiuvS:V:", long_options, NULL)) != -1)    {      switch (c)	{	case 0:	  break;	case 'V':  /* FIXME: this is deprecated.  Remove it in 2001.  */	  error (0, 0,		 _("warning: --version-control (-V) is obsolete;  support for\ it\nwill be removed in some future release.  Use --backup=%s instead."		   ), optarg);	  /* Fall through.  */	case 'b':	  make_backups = 1;	  if (optarg)	    version_control_string = optarg;	  break;	case 'f':	  x.interactive = I_ALWAYS_YES;	  break;	case 'i':	  x.interactive = I_ASK_USER;	  break;	case REPLY_OPTION:	  x.interactive = XARGMATCH ("--reply", optarg,				     reply_args, reply_vals);	  break;	case STRIP_TRAILING_SLASHES_OPTION:	  remove_trailing_slashes = 1;	  break;	case TARGET_DIRECTORY_OPTION:	  target_directory = optarg;	  break;	case 'u':	  x.update = 1;	  break;	case 'v':	  x.verbose = 1;	  break;	case 'S':	  make_backups = 1;	  backup_suffix_string = optarg;	  break;	case_GETOPT_HELP_CHAR;	case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);	default:	  usage (EXIT_FAILURE);	}    }  n_files = argc - optind;  file = argv + optind;  target_directory_specified = (target_directory != NULL);  if (target_directory == NULL && n_files != 0)    target_directory = file[n_files - 1];  dest_is_dir = (n_files > 0 && isdir (target_directory));  if (n_files == 0 || (n_files == 1 && !target_directory_specified))    {      error (0, 0, _("missing file argument"));      usage (EXIT_FAILURE);    }  if (target_directory_specified)    {      if (!dest_is_dir)	{	  error (0, 0, _("specified target, %s is not a directory"),		 quote (target_directory));	  usage (EXIT_FAILURE);	}    }  else if (n_files > 2 && !dest_is_dir)    {      error (0, 0,	    _("when moving multiple files, last argument must be a directory"));      usage (EXIT_FAILURE);    }  if (backup_suffix_string)    simple_backup_suffix = xstrdup (backup_suffix_string);  x.backup_type = (make_backups		   ? xget_version (_("backup type"),				   version_control_string)		   : none);  /* Move each arg but the last into the target_directory.  */  {    unsigned int last_file_idx = (target_directory_specified				  ? n_files - 1				  : n_files - 2);    unsigned int i;    /* Initialize the hash table only if we'll need it.       The problem it is used to detect can arise only if there are       two or more files to move.  */    if (last_file_idx)      dest_info_init (&x);    for (i = 0; i <= last_file_idx; ++i)      errors |= movefile (file[i], target_directory, dest_is_dir, &x);  }  exit (errors);}