Metropoli BBS
VIEWER: misc.c MODE: TEXT (ASCII)
/*
 * This part was written by Harald Kipp
 *
 * Bug reports should be sent to
 *
 *  harald@os2point.ping.de
 *  harald@sesam.com
 *  Fido: 2:2448/434
 *
 * Purging articles by reading the history file.
 *
 */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

#include <lprintf.h>

#include "config.h"
#include "expire.h"

/************************************************************************/
/*                                                                      */
/************************************************************************/
int get_histlist(char *hist_list[], char *list)
{
    int histcount = 0;

    while(*list) {
	for (; *list == ' ' || *list == '\t'; list++) ;

	if (*list == '\0' || *list == '\n')
	    break;

	if (histcount < 20)
	    hist_list[histcount++] = list;

	for (; *list && *list != ',' && *list != '\n'; list++) ;

	if (*list)
            *list++ = '\0';
    }

    hist_list[histcount] = (char *)NULL;

    return (histcount);
}

/************************************************************************/
/*                                                                      */
/************************************************************************/
int del_history(char *name)
{
    int result = 0;
    char *path = malloc(_MAX_PATH);

    strcat(strcpy(path, name), ".pag");
    if(unlink(path) == 0)
        result++;
    strcat(strcpy(path, name), ".dir");
    if(unlink(path) == 0)
        result++;

    free(path);
    return(result);
}

/************************************************************************/
/*                                                                      */
/************************************************************************/
int rename_history(char *oldname, char *newname)
{
    int result;
    char *oldpath = malloc(_MAX_PATH);
    char *newpath = malloc(_MAX_PATH);

    strcat(strcpy(oldpath, oldname), ".pag");
    strcat(strcpy(newpath, newname), ".pag");
    if((result = rename(oldpath, newpath)) != 0)
        lprintf("Failed renaming %s to %s", oldpath, newpath);
    else {
        strcat(strcpy(oldpath, oldname), ".dir");
        strcat(strcpy(newpath, newname), ".dir");
        if((result = rename(oldpath, newpath)) != 0) {
            lprintf("Failed renaming %s to %s", oldpath, newpath);
            strcat(strcpy(oldpath, oldname), ".pag");
            strcat(strcpy(newpath, newname), ".pag");
            if(rename(newpath, oldpath))
                lprintf("Failed re-renaming %s to %s", oldpath, newpath);
        }
    }
    free(oldpath);
    free(newpath);

    return(result);
}

/************************************************************************/
/*                                                                      */
/************************************************************************/
time_t get_id_expire(FILE *fp, char *msgid)
{
    time_t result = 0;
    int gotex = 0;
    int gotid = (msgid == NULL);
    int max_len = 1024;
    char *line = malloc(max_len);
    char *cp;

    while(fgets(line, max_len, fp)) {
        if((cp = strchr(line, '\r')) == NULL)
            cp = strchr(line, '\n');
        if(cp)
            *cp = '\0';
        if(*line == '\0')
            break;
        if(!gotex && strnicmp(line, "Expires:", strlen("Expires:")) == 0) {
            result = getdate(line + strlen("Expires:"));
            if(gotid)
                break;
            else
                gotex = 1;
        }
        else if(!gotid && strnicmp(line, "Message-ID:", strlen("Message-ID:")) == 0) {
            cp = line + strlen("Message-ID:");
            while(*cp == ' ' || *cp == '\t')
                cp++;
            while(*cp && *cp != ' ' && *cp != '\t')
                *msgid++ = *cp++;
            if(gotex)
                break;
            else
                gotid = 1;
        }
    }
    if(msgid)
        *msgid = '\0';
    free(line);

    return(result);
}
[ RETURN TO DIRECTORY ]