Completely new implementation of NNTP.

2001-11-30  Not Zed  <NotZed@Ximian.com>

        * providers/nntp/camel-nntp-*.c:

        Completely new implementation of NNTP.

        Doesn't support subscriptions yet (lists all folders), but should
        be more reliable (faster?), and has an integrated cache.

        * camel-exception.c (camel_exception_new): Use e_memchunks for
        exception blocks.
        (camel_exception_free): Same.

        * camel-data-cache.[ch]: New object for managing on-disk caches of
        anything that can be stored in a camel-stream.

        * camel-file-utils.c (camel_file_util_mkdir): New function, just a
        nicer place to put this (than camel-store), should be removed from
        camel-store.
        (camel_file_util_safe_filename): New function to url-encode a
        filename.

        * camel-mime-parser.c (drop_states): New func to drop the parser
        state to initial state.
        (folder_scan_init_with_fd):
        (folder_scan_init_with_stream): Call above func to reset state if
        the stream is changed on us so we can change streams to reuse a
        parser object.

svn path=/trunk/; revision=14822
This commit is contained in:
Not Zed
2001-11-30 03:09:38 +00:00
committed by Michael Zucci
parent 1af092ec09
commit d46cb0fd8d
18 changed files with 2438 additions and 877 deletions

View File

@ -1,6 +1,5 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Authors:
* Michael Zucchi <notzed@ximian.com>
* Dan Winship <danw@ximian.com>
@ -24,6 +23,14 @@
#include "camel-file-utils.h"
#include "camel-url.h"
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <netinet/in.h>
@ -279,4 +286,37 @@ camel_file_util_decode_string (FILE *in, char **str)
return 0;
}
/* Make a directory heirarchy.
Always use full paths */
int
camel_file_util_mkdir(const char *path, mode_t mode)
{
char *copy, *p;
g_assert(path && path[0] == '/');
p = copy = alloca(strlen(path)+1);
strcpy(copy, path);
do {
p = strchr(p + 1, '/');
if (p)
*p = '\0';
if (access(copy, F_OK) == -1) {
if (mkdir(copy, mode) == -1)
return -1;
}
if (p)
*p = '/';
} while (p);
return 0;
}
char *
camel_file_util_safe_filename(const char *name)
{
if (name == NULL)
return NULL;
return camel_url_encode(name, TRUE, "/?()'*");
}