qmail cygwin port successfull

linamat@moldtelecom.md linamat@moldtelecom.md
Wed May 28 12:43:00 GMT 2003


I am successfully ported qmail-1.03 and it seems to work good.
I've replaced flock() with fcntl() such as somebody did from one japan site.
Problem with spooling (absent mkfifo() and UNIX named pipe implementation
under Cygwin) was resolved by turning to UNIX socket. The only one problem
that the first message is not triggered immediately after sending, but
with the next all OK.
And now in my ISP filials where Win2k lives qmail+vpopmail+mysql under
Win32 works.
Here is a only qmail patch.
I can send Win32 binaries
======cut======
Allow work under CYGWIN
Copyright Samsi Sergey, 2003, linamat@moldtelecom.md
*** qmail-1.03-orig/Makefile Wed May 14 13:49:27 2003
--- qmail-1.03/Makefile Wed May 14 14:20:23 2003
***************
*** 308,314 ****
 clean: \
 TARGETS
! rm -f `cat TARGETS`
 coe.o: \
 compile coe.c coe.h
--- 308,314 ----
 clean: \
 TARGETS
! rm -f `cat TARGETS` *.exe
 coe.o: \
 compile coe.c coe.h
***************
*** 403,410 ****
 alloc.a error.a fs.a str.a
 ( ( ./compile tryrsolv.c && ./load tryrsolv dns.o \
 ipalloc.o ip.o stralloc.a alloc.a error.a fs.a str.a \
! -lresolv `cat socket.lib` ) >/dev/null 2>&1 \
! && echo -lresolv || exit 0 ) > dns.lib
 rm -f tryrsolv.o tryrsolv
 dns.o: \
--- 403,410 ----
 alloc.a error.a fs.a str.a
 ( ( ./compile tryrsolv.c && ./load tryrsolv dns.o \
 ipalloc.o ip.o stralloc.a alloc.a error.a fs.a str.a \
! -I/usr/local/bind/include -L/usr/local/bind/lib -lbind `cat
socket.lib`
) >/dev/null 2>&1 \
! && echo "-I/usr/local/bind/include -L/usr/local/bind/lib -lbind" ||
exit 0 ) > dns.lib
 rm -f tryrsolv.o tryrsolv
 dns.o: \
*** qmail-1.03-orig/TARGETS Wed May 14 13:49:27 2003
--- qmail-1.03/TARGETS Wed May 14 14:23:19 2003
***************
*** 262,268 ****
 qmail-smtpd.o
 qmail-smtpd
 sendmail.o
- sendmail
 tcp-env.o
 remoteinfo.o
 tcp-env
--- 262,267 ----
***************
*** 316,322 ****
 install.o
 install-big
 hier.o
- install
 instcheck.o
 instcheck
 home
--- 315,320 ----
*** qmail-1.03-orig/chkspawn.c Wed May 14 13:49:26 2003
--- qmail-1.03/chkspawn.c Wed May 14 14:07:49 2003
***************
*** 42,48 ****
--- 42,53 ----
 substdio_put(subfderr,num,fmt_ulong(num,(unsigned long) auto_spawn));
 substdio_puts(subfderr,".\n");
 substdio_flush(subfderr);
+ #ifndef __CYGWIN__
+ /* oops, incorrect value in header.
+ * Although allow Win32 default FD_SET() limit (512)
+ */
 _exit(1);
+ #endif
 }
 _exit(0);
 }
*** qmail-1.03-orig/conf-qmail Wed May 14 13:49:30 2003
--- qmail-1.03/conf-qmail Sat Apr 26 10:28:50 2003
***************
*** 1 ****
! /opt/home/mail/usr/qmail
--- 1 ----
! /opt/home/qmail
*** qmail-1.03-orig/conf-spawn Wed May 14 13:49:30 2003
--- qmail-1.03/conf-spawn Sat Apr 26 10:36:19 2003
***************
*** 1 ****
! 509
--- 1 ----
! 512
*** qmail-1.03-orig/conf-users Mon Jun 15 13:53:16 1998
--- qmail-1.03/conf-users Sat May 3 08:55:57 2003
***************
*** 1,7 ****
 alias
 qmaild
 qmaill
! root
 qmailp
 qmailq
 qmailr
--- 1,7 ----
 alias
 qmaild
 qmaill
! Administrator
 qmailp
 qmailq
 qmailr
*** qmail-1.03-orig/dns.c Wed May 14 13:49:26 2003
--- qmail-1.03/dns.c Wed May 14 14:05:11 2003
***************
*** 2,9 ****
--- 2,15 ----
 #include <netdb.h>
 #include <sys/types.h>
 #include <netinet/in.h>
+ #ifndef __CYGWIN__
 #include <arpa/nameser.h>
 #include <resolv.h>
+ #else
+ /* you need specify where */
+ #include "/usr/local/bind/include/arpa/nameser.h"
+ #include "/usr/local/bind/include/resolv.h"
+ #endif
 #include <errno.h>
 extern int res_query();
 extern int res_search();
*** qmail-1.03-orig/hier.c Wed May 14 13:49:25 2003
--- qmail-1.03/hier.c Wed May 14 14:32:17 2003
***************
*** 64,70 ****
--- 64,72 ----
 d(auto_qmail,"queue/lock",auto_uidq,auto_gidq,0750);
 z(auto_qmail,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
 z(auto_qmail,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
+ #ifndef __CYGWIN__
 p(auto_qmail,"queue/lock/trigger",auto_uids,auto_gidq,0622);
+ #endif
 c(auto_qmail,"boot","home",auto_uido,auto_gidq,0755);
 c(auto_qmail,"boot","home+df",auto_uido,auto_gidq,0755);
***************
*** 101,106 ****
--- 103,128 ----
 c(auto_qmail,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
 c(auto_qmail,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
+ #ifdef __CYGWIN__
+ c(auto_qmail,"bin","qmail-queue.exe",auto_uidq,auto_gidq,04711);
+ c(auto_qmail,"bin","qmail-lspawn.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-start.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-getpw.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-local.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-remote.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-rspawn.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-clean.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-send.exe",auto_uido,auto_gidq,0711);
+ #ifdef EXTERNAL_TODO
+ c(auto_qmail,"bin","qmail-todo.exe",auto_uido,auto_gidq,0711);
+ #endif
+ c(auto_qmail,"bin","splogger.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-newu.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-newmrh.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-pw2u.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-inject.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","predate.exe",auto_uido,auto_gidq,0755);
+ #else
 c(auto_qmail,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
 c(auto_qmail,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
 c(auto_qmail,"bin","qmail-start",auto_uido,auto_gidq,0700);
***************
*** 119,129 ****
--- 141,180 ----
 c(auto_qmail,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
 c(auto_qmail,"bin","qmail-inject",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","predate",auto_uido,auto_gidq,0755);
+ #endif
 c(auto_qmail,"bin","datemail",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","mailsubj",auto_uido,auto_gidq,0755);
+ #ifdef __CYGWIN__
+ c(auto_qmail,"bin","qmail-showctl.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qread.exe",auto_uido,auto_gidq,0755);
+ #else
 c(auto_qmail,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","qmail-qread",auto_uido,auto_gidq,0755);
+ #endif
 c(auto_qmail,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
+ #ifdef __CYGWIN__
+ c(auto_qmail,"bin","qmail-tcpto.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-tcpok.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-pop3d.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-popup.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-qmqpc.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qmqpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qmtpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-smtpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","sendmail.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","tcp-env.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qreceipt.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qsmhook.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qbiff.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","forward.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","preline.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","condredirect.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","bouncesaying.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","except.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildirmake.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildir2mbox.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildirwatch.exe",auto_uido,auto_gidq,0755);
+ #else
 c(auto_qmail,"bin","qmail-tcpto",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","qmail-tcpok",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","qmail-pop3d",auto_uido,auto_gidq,0755);
***************
*** 145,150 ****
--- 196,202 ----
 c(auto_qmail,"bin","maildirmake",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","maildirwatch",auto_uido,auto_gidq,0755);
+ #endif
 c(auto_qmail,"bin","qail",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","elq",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","pinq",auto_uido,auto_gidq,0755);
*** qmail-1.03-orig/install-big.c Wed May 14 13:49:25 2003
--- qmail-1.03/install-big.c Wed May 14 14:31:31 2003
***************
*** 29,35 ****
--- 29,37 ----
 void hier()
 {
+ #ifndef __CYGWIN
 h(auto_qmail,auto_uido,auto_gidq,0755);
+ #endif
 d(auto_qmail,"control",auto_uido,auto_gidq,0755);
 d(auto_qmail,"users",auto_uido,auto_gidq,0755);
***************
*** 62,68 ****
--- 64,72 ----
 d(auto_qmail,"queue/lock",auto_uidq,auto_gidq,0750);
 z(auto_qmail,"queue/lock/tcpto",1024,auto_uidr,auto_gidq,0644);
 z(auto_qmail,"queue/lock/sendmutex",0,auto_uids,auto_gidq,0600);
+ #ifndef __CYGWIN__
 p(auto_qmail,"queue/lock/trigger",auto_uids,auto_gidq,0622);
+ #endif
 c(auto_qmail,"boot","home",auto_uido,auto_gidq,0755);
 c(auto_qmail,"boot","home+df",auto_uido,auto_gidq,0755);
***************
*** 99,104 ****
--- 103,128 ----
 c(auto_qmail,"doc","PIC.relaygood",auto_uido,auto_gidq,0644);
 c(auto_qmail,"doc","PIC.rem2local",auto_uido,auto_gidq,0644);
+ #ifdef __CYGWIN__
+ c(auto_qmail,"bin","qmail-queue.exe",auto_uidq,auto_gidq,04711);
+ c(auto_qmail,"bin","qmail-lspawn.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-start.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-getpw.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-local.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-remote.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-rspawn.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-clean.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-send.exe",auto_uido,auto_gidq,0711);
+ #ifdef EXTERNAL_TODO
+ c(auto_qmail,"bin","qmail-todo.exe",auto_uido,auto_gidq,0711);
+ #endif
+ c(auto_qmail,"bin","splogger.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-newu.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-newmrh.exe",auto_uido,auto_gidq,0700);
+ c(auto_qmail,"bin","qmail-pw2u.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-inject.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","predate.exe",auto_uido,auto_gidq,0755);
+ #else
 c(auto_qmail,"bin","qmail-queue",auto_uidq,auto_gidq,04711);
 c(auto_qmail,"bin","qmail-lspawn",auto_uido,auto_gidq,0700);
 c(auto_qmail,"bin","qmail-start",auto_uido,auto_gidq,0700);
***************
*** 117,124 ****
--- 141,175 ----
 c(auto_qmail,"bin","qmail-pw2u",auto_uido,auto_gidq,0711);
 c(auto_qmail,"bin","qmail-inject",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","predate",auto_uido,auto_gidq,0755);
+ #endif
 c(auto_qmail,"bin","datemail",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","mailsubj",auto_uido,auto_gidq,0755);
+ #ifdef __CYGWIN__
+ c(auto_qmail,"bin","qmail-showctl.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qread.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-tcpto.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-tcpok.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-pop3d.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-popup.exe",auto_uido,auto_gidq,0711);
+ c(auto_qmail,"bin","qmail-qmqpc.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qmqpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-qmtpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qmail-smtpd.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","sendmail.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","tcp-env.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qreceipt.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qsmhook.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","qbiff.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","forward.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","preline.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","condredirect.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","bouncesaying.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","except.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildirmake.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildir2mbox.exe",auto_uido,auto_gidq,0755);
+ c(auto_qmail,"bin","maildirwatch.exe",auto_uido,auto_gidq,0755);
+ #else
 c(auto_qmail,"bin","qmail-showctl",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","qmail-qread",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","qmail-qstat",auto_uido,auto_gidq,0755);
***************
*** 143,148 ****
--- 194,200 ----
 c(auto_qmail,"bin","maildirmake",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","maildir2mbox",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","maildirwatch",auto_uido,auto_gidq,0755);
+ #endif
 c(auto_qmail,"bin","qail",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","elq",auto_uido,auto_gidq,0755);
 c(auto_qmail,"bin","pinq",auto_uido,auto_gidq,0755);
*** qmail-1.03-orig/install.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/install.c Wed May 14 14:33:43 2003
***************
*** 53,58 ****
--- 53,60 ----
 {
 if (chdir(home) == -1)
 strerr_die4sys(111,FATAL,"unable to switch to ",home,": ");
+ #ifndef __CYGWIN
+ /* mkfifo not supported */
 if (fifo_make(fifo,0700) == -1)
 if (errno != error_exist)
 strerr_die6sys(111,FATAL,"unable to mkfifo ",home,"/",fifo,": ");
***************
*** 60,65 ****
--- 62,68 ----
 strerr_die6sys(111,FATAL,"unable to chown ",home,"/",fifo,": ");
 if (chmod(fifo,mode) == -1)
 strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",fifo,": ");
+ #endif
 }
 char inbuf[SUBSTDIO_INSIZE];
*** qmail-1.03-orig/lock.h Mon Jun 15 13:53:16 1998
--- qmail-1.03/lock.h Wed May 14 14:36:01 2003
***************
*** 1,8 ****
 #ifndef LOCK_H
 #define LOCK_H
! extern int lock_ex();
! extern int lock_un();
! extern int lock_exnb();
 #endif
--- 1,15 ----
 #ifndef LOCK_H
 #define LOCK_H
! #ifdef __CYGWIN__
! #define LOCK_SH 0x01
! #define LOCK_EX 0x02
! #define LOCK_NB 0x04
! #define LOCK_UN 0x08
! #endif
!
! extern int lock_ex(int);
! extern int lock_un(int);
! extern int lock_exnb(int);
 #endif
*** qmail-1.03-orig/lock_ex.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/lock_ex.c Wed May 14 14:19:36 2003
***************
*** 4,11 ****
 #include "hasflock.h"
 #include "lock.h"
 #ifdef HASFLOCK
! int lock_ex(fd) int fd; { return flock(fd,LOCK_EX); }
 #else
! int lock_ex(fd) int fd; { return lockf(fd,1,0); }
 #endif
--- 4,42 ----
 #include "hasflock.h"
 #include "lock.h"
+ #ifdef __CYGWIN__
+ #include <unistd.h>
+ #include <errno.h>
+
+ int fcntl_flock(int fd,int op)
+ {
+ struct flock fl;
+ /* lock applies to entire file */
+ fl.l_whence = fl.l_start = fl.l_len = 0;
+ fl.l_pid = getpid ();/* shouldn't be necessary */
+ switch (op & ~LOCK_NB) {/* translate to fcntl() operation */
+ case LOCK_EX:/* exclusive */
+ fl.l_type = F_WRLCK;
+ break;
+ case LOCK_SH:/* shared */
+ fl.l_type = F_RDLCK;
+ break;
+ case LOCK_UN:/* unlock */
+ fl.l_type = F_UNLCK;
+ break;
+ default:/* default */
+ errno = EINVAL;
+ return -1;
+ }
+ return (fcntl (fd,(op & LOCK_NB) ? F_SETLK : F_SETLKW,&fl) == -1) ? -1
: 0;
+ }
+
+ int flock(int fd,int op)
+ { return fcntl_flock(fd,op); }
+ #endif
+
 #ifdef HASFLOCK
! int lock_ex(int fd) { return flock(fd,LOCK_EX); }
 #else
! int lock_ex(int fd) { return lockf(fd,1,0); }
 #endif
*** qmail-1.03-orig/lock_exnb.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/lock_exnb.c Wed May 14 14:19:42 2003
***************
*** 4,11 ****
 #include "hasflock.h"
 #include "lock.h"
 #ifdef HASFLOCK
! int lock_exnb(fd) int fd; { return flock(fd,LOCK_EX | LOCK_NB); }
 #else
! int lock_exnb(fd) int fd; { return lockf(fd,2,0); }
 #endif
--- 4,43 ----
 #include "hasflock.h"
 #include "lock.h"
+ #ifdef __CYGWIN__
+ #include <unistd.h>
+ #include <errno.h>
+
+ int fcntl_nbflock(int fd,int op)
+ {
+ struct flock fl;
+ /* lock applies to entire file */
+ fl.l_whence = fl.l_start = fl.l_len = 0;
+ fl.l_pid = getpid ();/* shouldn't be necessary */
+ switch (op & ~LOCK_NB) {/* translate to fcntl() operation */
+ case LOCK_EX:/* exclusive */
+ fl.l_type = F_WRLCK;
+ break;
+ case LOCK_SH:/* shared */
+ fl.l_type = F_RDLCK;
+ break;
+ case LOCK_UN:/* unlock */
+ fl.l_type = F_UNLCK;
+ break;
+ default:/* default */
+ errno = EINVAL;
+ return -1;
+ }
+ return (fcntl (fd,(op & LOCK_NB) ? F_SETLK : F_SETLKW,&fl) == -1) ? -1
: 0;
+ }
+ #endif
+
 #ifdef HASFLOCK
! #ifdef __CYGWIN__
! int lock_exnb(int fd) { return fcntl_nbflock(fd,LOCK_EX | LOCK_NB); }
! #else
! int lock_exnb(int fd) { return flock(fd,LOCK_EX | LOCK_NB); }
! #endif
 #else
! int lock_exnb(int fd) { return lockf(fd,2,0); }
 #endif
*** qmail-1.03-orig/lock_un.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/lock_un.c Wed May 14 14:19:47 2003
***************
*** 4,11 ****
 #include "hasflock.h"
 #include "lock.h"
 #ifdef HASFLOCK
! int lock_un(fd) int fd; { return flock(fd,LOCK_UN); }
 #else
! int lock_un(fd) int fd; { return lockf(fd,0,0); }
 #endif
--- 4,43 ----
 #include "hasflock.h"
 #include "lock.h"
+ #ifdef __CYGWIN__
+ #include <unistd.h>
+ #include <errno.h>
+
+ int fcntl_unflock(int fd,int op)
+ {
+ struct flock fl;
+ /* lock applies to entire file */
+ fl.l_whence = fl.l_start = fl.l_len = 0;
+ fl.l_pid = getpid ();/* shouldn't be necessary */
+ switch (op & ~LOCK_NB) {/* translate to fcntl() operation */
+ case LOCK_EX:/* exclusive */
+ fl.l_type = F_WRLCK;
+ break;
+ case LOCK_SH:/* shared */
+ fl.l_type = F_RDLCK;
+ break;
+ case LOCK_UN:/* unlock */
+ fl.l_type = F_UNLCK;
+ break;
+ default:/* default */
+ errno = EINVAL;
+ return -1;
+ }
+ return (fcntl (fd,(op & LOCK_NB) ? F_SETLK : F_SETLKW,&fl) == -1) ? -1
: 0;
+ }
+ #endif
+
 #ifdef HASFLOCK
! #ifdef __CYGWIN__
! int lock_un(int fd) { return fcntl_unflock(fd,LOCK_UN); }
! #else
! int lock_un(int fd) { return flock(fd,LOCK_UN); }
! #endif
 #else
! int lock_un(int fd) { return lockf(fd,0,0); }
 #endif
*** qmail-1.03-orig/prot.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/prot.c Sun May 11 16:43:04 2003
***************
*** 5,10 ****
--- 5,14 ----
 int prot_gid(gid) int gid;
 {
+ #ifdef __CYGWIN__
+ /* setgid() not implemented */
+ return(0);
+ #else
 #ifdef HASSHORTSETGROUPS
 short x[2];
 x[0] = gid; x[1] = 73; /* catch errors */
***************
*** 13,21 ****
--- 17,31 ----
 if (setgroups(1,&gid) == -1) return -1;
 #endif
 return setgid(gid); /* _should_ be redundant, but on some systems it
isn't */
+ #endif
 }
 int prot_uid(uid) int uid;
 {
+ #ifdef __CYGWIN__
+ /* setuid() not implemented */
+ return(0);
+ #else
 return setuid(uid);
+ #endif
 }
*** qmail-1.03-orig/trigger.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/trigger.c Wed May 14 12:13:28 2003
***************
*** 2,23 ****
 #include "open.h"
 #include "trigger.h"
 #include "hasnpbg1.h"
 static int fd = -1;
! #ifdef HASNAMEDPIPEBUG1
 static int fdw = -1;
 #endif
 void trigger_set()
 {
 if (fd != -1)
 close(fd);
! #ifdef HASNAMEDPIPEBUG1
 if (fdw != -1)
 close(fdw);
 #endif
 fd = open_read("lock/trigger");
! #ifdef HASNAMEDPIPEBUG1
 fdw = open_write("lock/trigger");
 #endif
 }
--- 2,49 ----
 #include "open.h"
 #include "trigger.h"
 #include "hasnpbg1.h"
+ #ifdef __CYGWIN__
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <stdio.h>
+
+ struct sockaddr trigger_sock;
+ int fds = -1, trigger_sock_len;
+ #endif
 static int fd = -1;
! #if defined HASNAMEDPIPEBUG1 && !defined __CYGWIN__
 static int fdw = -1;
 #endif
 void trigger_set()
 {
+ #ifdef __CYGWIN__
+ unlink("lock/trigger");
+ fds = socket(AF_UNIX,SOCK_STREAM,0);
+ if (fds >= 0) {
+ trigger_sock.sa_family = AF_UNIX;
+ strcpy(trigger_sock.sa_data,"lock/trigger");
+ trigger_sock_len = strlen(trigger_sock.sa_data) +
+ sizeof(trigger_sock.sa_family);
+ if (bind(fds,&trigger_sock,trigger_sock_len) >= 0)
+ if (listen(fds,1) >= 0) {
+ #endif
 if (fd != -1)
 close(fd);
! #if defined HASNAMEDPIPEBUG1 && !defined __CYGWIN__
 if (fdw != -1)
 close(fdw);
 #endif
+ #ifndef __CYGWIN__
 fd = open_read("lock/trigger");
! #else
! if ((fd = accept(fds,&trigger_sock,&trigger_sock_len)) >= 0)
! close(fds);
! }
! }
! #endif
! #if defined HASNAMEDPIPEBUG1 && !defined __CYGWIN__
 fdw = open_write("lock/trigger");
 #endif
 }
*** qmail-1.03-orig/triggerpull.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/triggerpull.c Wed May 14 11:48:52 2003
***************
*** 1,16 ****
 #include "ndelay.h"
 #include "open.h"
 #include "triggerpull.h"
 void triggerpull()
 {
 int fd;
!
 fd = open_write("lock/trigger");
 if (fd >= 0)
 {
 ndelay_on(fd);
 write(fd,"",1); /* if it fails, bummer */
 close(fd);
 }
 }
--- 1,36 ----
 #include "ndelay.h"
 #include "open.h"
 #include "triggerpull.h"
+ #ifdef __CYGWIN__
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/stdio.h>
+ #endif
 void triggerpull()
 {
 int fd;
! #ifndef __CYGWIN__
 fd = open_write("lock/trigger");
+ #else
+ int trigger_sock_len;
+ struct sockaddr trigger_sock;
+
+ fd = socket(AF_UNIX,SOCK_STREAM,0);
+ if (fd >= 0) {
+ trigger_sock.sa_family = AF_UNIX;
+ strcpy(trigger_sock.sa_data,"lock/trigger");
+ trigger_sock_len = strlen(trigger_sock.sa_data) +
+ sizeof(trigger_sock.sa_family);
+ if (connect(fd,&trigger_sock,trigger_sock_len) >= 0)
+ #endif
 if (fd >= 0)
 {
 ndelay_on(fd);
 write(fd,"",1); /* if it fails, bummer */
 close(fd);
 }
+ #ifdef __CYGWIN__
+ }
+ #endif
 }
*** qmail-1.03-orig/tryflock.c Mon Jun 15 13:53:16 1998
--- qmail-1.03/tryflock.c Wed May 14 14:19:30 2003
***************
*** 2,8 ****
 #include <sys/file.h>
 #include <fcntl.h>
! void main()
 {
 flock(0,LOCK_EX | LOCK_UN | LOCK_NB);
 }
--- 2,40 ----
 #include <sys/file.h>
 #include <fcntl.h>
! #ifdef __CYGWIN__
! #include "lock.h"
! #include <unistd.h>
! #include <errno.h>
!
! int fcntl_flock(int fd,int op)
! {
! struct flock fl;
! /* lock applies to entire file */
! fl.l_whence = fl.l_start = fl.l_len = 0;
! fl.l_pid = getpid ();/* shouldn't be necessary */
! switch (op & ~LOCK_NB) {/* translate to fcntl() operation */
! case LOCK_EX:/* exclusive */
! fl.l_type = F_WRLCK;
! break;
! case LOCK_SH:/* shared */
! fl.l_type = F_RDLCK;
! break;
! case LOCK_UN:/* unlock */
! fl.l_type = F_UNLCK;
! break;
! default:/* default */
! errno = EINVAL;
! return -1;
! }
! return (fcntl (fd,(op & LOCK_NB) ? F_SETLK : F_SETLKW,&fl) == -1) ? -1
: 0;
! }
!
! int flock(int fd,int op)
! { return fcntl_flock(fd,op); }
! #endif
!
! main()
 {
 flock(0,LOCK_EX | LOCK_UN | LOCK_NB);
 }
======cut======
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/


More information about the Cygwin mailing list

AltStyle によって変換されたページ (->オリジナル) /