⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmail-rspawn.c

📁 linux下qmail的源码 本人加了一些注释
💻 C
字号:
//qmail-rspawn由qmail-send调用,qmail-send判断邮件是发给谁的,发给远程主机的,
//就调用qmail-rspawn程序,该程序为每一个邮件消息的接受方决定目的邮件服务器,
//再调用qmail-remote程序发送

#include "fd.h"#include "wait.h"#include "substdio.h"#include "exit.h"#include "fork.h"#include "error.h"#include "tcpto.h"void initialize(argc,argv)int argc;char **argv;{ tcpto_clean();}int truncreport = 0;void report(ss,wstat,s,len)substdio *ss;int wstat;char *s;int len;{ int j; int k; int result; int orr; if (wait_crashed(wstat))  { substdio_puts(ss,"Zqmail-remote crashed.\n"); return; } switch(wait_exitcode(wstat))  {   case 0: break;   case 111: substdio_puts(ss,"ZUnable to run qmail-remote.\n"); return;   default: substdio_puts(ss,"DUnable to run qmail-remote.\n"); return;  } if (!len)  { substdio_puts(ss,"Zqmail-remote produced no output.\n"); return; } result = -1; j = 0; for (k = 0;k < len;++k)   if (!s[k])    {     if (s[j] == 'K') { result = 1; break; }     if (s[j] == 'Z') { result = 0; break; }     if (s[j] == 'D') break;     j = k + 1;    } orr = result; switch(s[0])  {   case 's': orr = 0; break;   case 'h': orr = -1;  } switch(orr)  {   case 1: substdio_put(ss,"K",1); break;   case 0: substdio_put(ss,"Z",1); break;   case -1: substdio_put(ss,"D",1); break;  } for (k = 1;k < len;)   if (!s[k++])    {     substdio_puts(ss,s + 1);     if (result <= orr)       if (k < len)	 switch(s[k])	  {	   case 'Z': case 'D': case 'K':             substdio_puts(ss,s + k + 1);	  }     break;    }}int spawn(fdmess,fdout,s,r,at)int fdmess; int fdout;char *s; char *r; int at;{ int f; char *(args[5]); args[0] = "qmail-remote"; args[1] = r + at + 1; args[2] = s; args[3] = r; args[4] = 0; if (!(f = vfork()))  {   if (fd_move(0,fdmess) == -1) _exit(111);   if (fd_move(1,fdout) == -1) _exit(111);   if (fd_copy(2,1) == -1) _exit(111);   execvp(*args,args);   if (error_temp(errno)) _exit(111);   _exit(100);  } return f;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -