2 Proprietary Rand Corporation
, 1981.
3 Further distribution of
this software
4 subject to the terms of the Rand
11 #include <sys/types.h>
17 m_file(folder
, msg
, folders
, nfolders
, prsrvf
, setcur
)
20 struct st_fold folders
[];
25 char newmsg
[256], buf
[BUFSIZ
];
28 register struct st_fold
*fp
;
29 struct stat stbuf
, stbf1
;
32 for(fp
= folders
; fp
< &folders
[nfolders
]; fp
++) {
36 if (fp
->f_mp
->hghmsg
>= MAXFOLDER
) {
38 "Can't file msg %s -- folder %s is full.\n",
42 nmsg
= m_name(fp
->f_mp
->hghmsg
++ + 1);
44 VOID
copy(nmsg
, copy("/", copy(m_maildir(fp
->f_name
), newmsg
)));
45 if(link(msg
, newmsg
) < 0) {
47 if(linkerr
== EEXIST
||
48 (linkerr
== EXDEV
&& stat(newmsg
, &stbuf
) != -1)) {
49 if(linkerr
!= EEXIST
|| stat(msg
, &stbf1
) < 0 ||
50 stat(newmsg
, &stbuf
) < 0 ||
51 stbf1
.st_ino
!= stbuf
.st_ino
) {
52 fprintf(stderr
, "Message %s:%s already exists.\n",
58 if(linkerr
== EXDEV
) {
59 if((o
= open(msg
, 0)) == -1) {
60 fprintf(stderr
, "Can't open %s:%s.\n",
64 VOID
fstat(o
, &stbuf
);
65 if((n
= creat(newmsg
, (int)stbuf
.st_mode
&0777)) == -1) {
66 fprintf(stderr
, "Can't create %s:%s.\n",
72 if((i
=read(o
, buf
, sizeof buf
)) < 0 ||
73 write(n
, buf
, i
) == -1) {
74 fprintf(stderr
, "Copy error on %s:%s to %s:%s!\n",
75 folder
, msg
, fp
->f_name
, nmsg
);
76 VOID
close(o
); VOID
close(n
);
79 while(i
== sizeof buf
);
80 VOID
close(n
); VOID
close(o
);
82 fprintf(stderr
, "Error on link %s:%s to %s:",
83 folder
, msg
, fp
->f_name
);
89 && ( (i
= atoi(nmsg
)) < fp
->f_mp
->curmsg