/* Copyright (C) 2020 C. McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Additional permission under GNU GPL version 3 section 7: * * If you modify this Program, or any covered work, by linking or * combining it with LibreSSL (or a modified version of that library), * containing parts covered by the terms of the OpenSSL License and the * original SSLeay license, the licensors of this Program grant you * additional permission to convey the resulting work. Corresponding * Source for a non-source form of such a combination shall include the * source code for the parts of LibreSSL used as well as that of the * covered work. */ #include #include #include #include #include #include "archive.h" int mboxFrom(FILE *file) { int n = fprintf(file, "From mboxrd@z Thu Jan 1 00:00:00 1970\n"); return (n < 0 ? n : 0); } int mboxHeader(FILE *file, const char *header) { for (const char *crlf; (crlf = strstr(header, "\r\n")); header = &crlf[2]) { if (crlf - header) { size_t n = fwrite(header, crlf - header, 1, file); if (!n) return -1; } if (fprintf(file, "\n") < 0) return -1; } return 0; } int mboxBody(FILE *file, const char *body) { for (const char *crlf; (crlf = strstr(body, "\r\n")); body = &crlf[2]) { const char *from = body; while (*from == '>') from++; if (!strncmp(from, "From ", 5)) { if (fprintf(file, ">") < 0) return -1; } if (crlf - body) { size_t n = fwrite(body, crlf - body, 1, file); if (!n) return -1; } if (fprintf(file, "\n") < 0) return -1; } return (fprintf(file, "\n" ) < 0 ? -1 : 0); }