iidaの日記: lftp 4.3.1をsunでコンパイル
SSL/TLSにも対応したFTPクライアントであるlftpの4.3.1をSolarisにインストールしてみた。しかし、そのままではコンパイルできない。sockaddr_un構造体型の変数sunがSolarisのsunプリプロセッサ・マクロと衝突するのだ。sunをsun_と書き換え、未定義のSUN_LENマクロを、
#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
と定義してやると、コンパイルが通った。
--- lftp-4.3.1/src/attach.h~ 2011-06-17 12:58:31 +0000
+++ lftp-4.3.1/src/attach.h 2011-07-27 06:45:10 +0000
@@ -88,9 +88,9 @@
TimeoutS(1);
return m;
}
- struct sockaddr_un sun;
- socklen_t sa_len=sizeof(sun);
- a_sock=accept(sock,(sockaddr*)&sun,&sa_len);
+ struct sockaddr_un sun_;
+ socklen_t sa_len=sizeof(sun_);
+ a_sock=accept(sock,(sockaddr*)&sun_,&sa_len);
if(a_sock==-1 && E_RETRY(errno)) {
Block(sock,POLLIN);
return m;
@@ -161,11 +161,14 @@
int fl=fcntl(sock,F_GETFL);
fcntl(sock,F_SETFL,fl|O_NONBLOCK);
fcntl(sock,F_SETFD,FD_CLOEXEC);
- struct sockaddr_un sun;
- memset(&sun,0,sizeof(sun));
- sun.sun_family=AF_UNIX;
- strncpy(sun.sun_path,path,sizeof(sun.sun_path));
- if(bind(sock,(sockaddr*)&sun,SUN_LEN(&sun))==-1) {
+ struct sockaddr_un sun_;
+ memset(&sun_,0,sizeof(sun_));
+ sun_.sun_family=AF_UNIX;
+ strncpy(sun_.sun_path,path,sizeof(sun_.sun_path));
+#ifndef SUN_LEN
+#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
+#endif
+ if(bind(sock,(sockaddr*)&sun_,SUN_LEN(&sun_))==-1) {
perror("bind");
close(sock);
sock=-1;
@@ -219,12 +222,12 @@
m=MOVED;
}
if(!connected) {
- struct sockaddr_un sun;
- memset(&sun,0,sizeof(sun));
- sun.sun_family=AF_UNIX;
+ struct sockaddr_un sun_;
+ memset(&sun_,0,sizeof(sun_));
+ sun_.sun_family=AF_UNIX;
const char *path=AcceptTermFD::get_sock_path(pid);
- strncpy(sun.sun_path,path,sizeof(sun.sun_path));
- int res=connect(sock,(sockaddr*)&sun,SUN_LEN(&sun));
+ strncpy(sun_.sun_path,path,sizeof(sun_.sun_path));
+ int res=connect(sock,(sockaddr*)&sun_,SUN_LEN(&sun_));
if(res==-1 && !NonFatalError(errno)) {
error=Error::Fatal(xstring::format("connect(%s): %s",path,strerror(errno)));
return MOVED;
このパッチを作者に送ってみた。
- - - - -
(2011-08-02 後記 作者から「Thanks! Patch applied (with minor changes).」との連絡あり。)
lftp 4.3.1をsunでコンパイル More ログイン