--- xanim2801/xa_input.c.orig	2006-02-24 23:01:28.000000000 +0900
+++ xanim2801/xa_input.c	2006-02-24 23:07:28.000000000 +0900
@@ -952,13 +952,6 @@
   else						return(xaFALSE);
 }
 
-xaULONG xa_ftp_abort(xin)
-XA_INPUT xin;
-{
-  return(xaFALSE);
-}
-
-
 /************************
  *
  *********/
@@ -1025,28 +1018,28 @@
   memset(&data,0,sizeof(data));
   memset(&from,0,sizeof(from));
   if (gethostname(hostname, sizeof(hostname)) < 0)
-						return(xa_ftp_abort(xin));
+						return(xaFALSE);
   if ((host= (struct hostent *)gethostbyname(hostname)) == 0)
-						return(xa_ftp_abort(xin));
+						return(xaFALSE);
   data.sin_family = host->h_addrtype;
   memcpy( (char *)&data.sin_addr, (char *)host->h_addr_list[0], host->h_length);
   if ((tmp_sock = socket ( AF_INET  , SOCK_STREAM , 0 )) < 0)
-						return(xa_ftp_abort(xin));
+						return(xaFALSE);
   len = 1;
   if (setsockopt(tmp_sock, SOL_SOCKET, SO_REUSEADDR,
 			(char *)(&len), sizeof(len)) < 0)
-			{ close(tmp_sock); return(xa_ftp_abort(xin)); }
+			{ close(tmp_sock); return(xaFALSE); }
 
   data.sin_port = 0;
   if ( bind(tmp_sock, (struct sockaddr *)&data, sizeof(data)) < 0 )
-			{ close(tmp_sock); return(xa_ftp_abort(xin)); }
+			{ close(tmp_sock); return(xaFALSE); }
 
   len = sizeof(data);
   if (getsockname(tmp_sock, (struct sockaddr *)&data, &len) < 0 )
-			{ close(tmp_sock); return(xa_ftp_abort(xin)); }
+			{ close(tmp_sock); return(xaFALSE); }
 
   if (listen(tmp_sock, 4) < 0 )
-			{ close(tmp_sock); return(xa_ftp_abort(xin)); }
+			{ close(tmp_sock); return(xaFALSE); }
 
      /* POD add support for PORT command? */
   addr = (xaUBYTE *) (&data.sin_addr);
@@ -1059,15 +1052,15 @@
 
   if (xa_ftp_send_cmd(xin, port_cmd, &retcode) == xaFALSE) 
 	{ fprintf(stderr,"FTP: send cmd err\n"); 
-	  close(tmp_sock); return(xa_ftp_abort(xin)); }
+	  close(tmp_sock); return(xaFALSE); }
 
   if (xa_ftp_send_cmd(xin, file_cmd, &retcode) == xaFALSE) 
 	{ fprintf(stderr,"FTP: send cmd err\n"); 
-	  close(tmp_sock); return(xa_ftp_abort(xin)); }
+	  close(tmp_sock); return(xaFALSE); }
 
   len = sizeof(from);
   xin->dsock = accept((int)tmp_sock, (struct sockaddr *) &from, (int *)&len);
-  if (xin->dsock < 0) { close(tmp_sock); return(xa_ftp_abort(xin)); }
+  if (xin->dsock < 0) { close(tmp_sock); return(xaFALSE); }
   close(tmp_sock);
   return(xaTRUE);
 }
