예제 #1
0
파일: cmd3.c 프로젝트: Gwenio/DragonFlyBSD
/*
 * Reply to a list of messages.  Extract each name from the
 * message header and send them off to mail1()
 */
int
dorespond(int *msgvec)
{
    struct message *mp;
    char *cp, *rcv, *replyto;
    char **ap;
    struct name *np;
    struct header head;

    if (msgvec[1] != 0) {
        printf("Sorry, can't reply to multiple messages at once\n");
        return (1);
    }
    mp = &message[msgvec[0] - 1];
    touch(mp);
    dot = mp;
    if ((rcv = skin(hfield("from", mp))) == NULL)
        rcv = skin(nameof(mp, 1));
    if ((replyto = skin(hfield("reply-to", mp))) != NULL)
        np = extract(replyto, GTO);
    else if ((cp = skin(hfield("to", mp))) != NULL)
        np = extract(cp, GTO);
    else
        np = NULL;
    np = elide(np);
    /*
     * Delete my name from the reply list,
     * and with it, all my alternate names.
     */
    np = delname(np, myname);
    if (altnames)
        for (ap = altnames; *ap != NULL; ap++)
            np = delname(np, *ap);
    if (np != NULL && replyto == NULL)
        np = cat(np, extract(rcv, GTO));
    else if (np == NULL) {
        if (replyto != NULL)
            printf("Empty reply-to field -- replying to author\n");
        np = extract(rcv, GTO);
    }
    head.h_to = np;
    if ((head.h_subject = hfield("subject", mp)) == NULL)
        head.h_subject = hfield("subj", mp);
    head.h_subject = reedit(head.h_subject);
    if (replyto == NULL && (cp = skin(hfield("cc", mp))) != NULL) {
        np = elide(extract(cp, GCC));
        np = delname(np, myname);
        if (altnames != 0)
            for (ap = altnames; *ap != NULL; ap++)
                np = delname(np, *ap);
        head.h_cc = np;
    } else
        head.h_cc = NULL;
    head.h_bcc = NULL;
    head.h_smopts = NULL;
    head.h_replyto = value("REPLYTO");
    head.h_inreplyto = skin(hfield("message-id", mp));
    mail1(&head, 1);
    return (0);
}
예제 #2
0
void eBackgroundFileEraser::erase(const std::string& filename)
{
	if (!filename.empty())
	{
		std::string delname(filename);
		delname.append(".del");
		if (rename(filename.c_str(), delname.c_str())<0)
		{
			// if rename fails with ENOENT (file doesn't exist), do nothing
			if (errno == ENOENT)
			{
				return;
			} else
			// if rename fails, try deleting the file itself without renaming.
			{
				eDebug("[eBackgroundFileEraser] Rename %s -> %s failed: %m", filename.c_str(), delname.c_str());
				delname = filename;
			}
		}
		messages.send(Message(delname));
		run();
	}
}