/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-message-cache.c: Class for a Camel cache. * * Authors: Michael Zucchi * * Copyright (C) 2001 Ximian, Inc. (www.ximian.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #ifdef HAVE_ALLOCA_H #include #endif #include "camel-data-cache.h" #include "camel-exception.h" #include "camel-stream-fs.h" #include "camel-stream-mem.h" #include "camel-file-utils.h" extern int camel_verbose_debug; #define dd(x) (camel_verbose_debug?(x):0) #define d(x) static void stream_finalised(CamelObject *o, void *event_data, void *data); /* how many 'bits' of hash are used to key the toplevel directory */ #define CAMEL_DATA_CACHE_BITS (6) #define CAMEL_DATA_CACHE_MASK ((1<priv->l) #define CDC_UNLOCK(c, l) g_mutex_unlock(((CamelDataCache *)(c))->priv->l) #else #define CDC_LOCK(c, l) #define CDC_UNLOCK(c, l) #endif }; static CamelObject *camel_data_cache_parent; static void data_cache_class_init(CamelDataCacheClass *klass) { camel_data_cache_parent = (CamelObject *)camel_type_get_global_classfuncs (camel_object_get_type ()); #if 0 klass->add = data_cache_add; klass->get = data_cache_get; klass->close = data_cache_close; klass->remove = data_cache_remove; klass->clear = data_cache_clear; #endif } static void data_cache_init(CamelDataCache *cdc, CamelDataCacheClass *klass) { struct _CamelDataCachePrivate *p; p = cdc->priv = g_malloc0(sizeof(*cdc->priv)); p->busy_stream = g_hash_table_new(NULL, NULL); p->busy_path = g_hash_table_new(g_str_hash, g_str_equal); #ifdef ENABLE_THREADS p->lock = g_mutex_new(); #endif } static void free_busy(CamelStream *stream, char *path, CamelDataCache *cdc) { d(printf(" Freeing busy stream %p path %s\n", stream, path)); camel_object_unhook_event((CamelObject *)stream, "finalize", stream_finalised, cdc); camel_object_unref((CamelObject *)stream); g_free(path); } static void data_cache_finalise(CamelDataCache *cdc) { struct _CamelDataCachePrivate *p; p = cdc->priv; d(printf("cache finalised, %d (= %d?) streams reamining\n", g_hash_table_size(p->busy_stream), g_hash_table_size(p->busy_path))); g_hash_table_foreach(p->busy_stream, (GHFunc)free_busy, cdc); g_hash_table_destroy(p->busy_path); g_hash_table_destroy(p->busy_stream); #ifdef ENABLE_THREADS g_mutex_free(p->lock); #endif g_free(p); g_free (cdc->path); } CamelType camel_data_cache_get_type(void) { static CamelType camel_data_cache_type = CAMEL_INVALID_TYPE; if (camel_data_cache_type == CAMEL_INVALID_TYPE) { camel_data_cache_type = camel_type_register( CAMEL_OBJECT_TYPE, "CamelDataCache", sizeof (CamelDataCache), sizeof (CamelDataCacheClass), (CamelObjectClassInitFunc) data_cache_class_init, NULL, (CamelObjectInitFunc) data_cache_init, (CamelObjectFinalizeFunc) data_cache_finalise); } return camel_data_cache_type; } /** * camel_data_cache_new: * @path: Base path of cache, subdirectories will be created here. * @flags: Open flags, none defined. * @ex: * * Create a new data cache. * * Return value: A new cache object, or NULL if the base path cannot * be written to. **/ CamelDataCache * camel_data_cache_new(const char *path, guint32 flags, CamelException *ex) { CamelDataCache *cdc; if (camel_file_util_mkdir(path, 0700) == -1) { camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("Unable to create cache path")); return NULL; } cdc = (CamelDataCache *)camel_object_new(CAMEL_DATA_CACHE_TYPE); cdc->path = g_strdup(path); cdc->flags = flags; cdc->expire_age = -1; cdc->expire_access = -1; return cdc; } /** * camel_data_cache_set_expire_age: * @cdc: * @when: Timeout for age expiry, or -1 to disable. * * Set the cache expiration policy for aged entries. * * Items in the cache older than @when seconds may be * flushed at any time. Items are expired in a lazy * manner, so it is indeterminate when the items will * physically be removed. * * Note you can set both an age and an access limit. The * age acts as a hard limit on cache entries. **/ void camel_data_cache_set_expire_age(CamelDataCache *cdc, time_t when) { cdc->expire_age = when; } /** * camel_data_cache_set_expire_access: * @cdc: * @when: Timeout for access, or -1 to disable access expiry. * * Set the cache expiration policy for access times. * * Items in the cache which haven't been accessed for @when * seconds may be expired at any time. Items are expired in a lazy * manner, so it is indeterminate when the items will * physically be removed. * * Note you can set both an age and an access limit. The * age acts as a hard limit on cache entries. **/ void camel_data_cache_set_expire_access(CamelDataCache *cdc, time_t when) { cdc->expire_access = when; } static void data_cache_expire(CamelDataCache *cdc, const char *path, const char *keep, time_t now) { DIR *dir; struct dirent *d; GString *s; struct stat st; char *oldpath; CamelStream *stream; dir = opendir(path); if (dir == NULL) return; s = g_string_new(""); while ( (d = readdir(dir)) ) { if (strcmp(d->d_name, keep) == 0) continue; g_string_sprintf(s, "%s/%s", path, d->d_name); dd(printf("Checking '%s' for expiry\n", s->str)); if (stat(s->str, &st) == 0 && S_ISREG(st.st_mode) && ((cdc->expire_age != -1 && st.st_mtime + cdc->expire_age < now) || (cdc->expire_access != -1 && st.st_atime + cdc->expire_access < now))) { dd(printf("Has expired! Removing!\n")); unlink(s->str); if (g_hash_table_lookup_extended(cdc->priv->busy_path, s->str, (void **)&oldpath, (void **)&stream)) { g_hash_table_remove(cdc->priv->busy_path, path); g_hash_table_remove(cdc->priv->busy_stream, stream); g_free(oldpath); } } } g_string_free(s, TRUE); closedir(dir); } /* Since we have to stat the directory anyway, we use this opportunity to lazily expire old data. If it is this directories 'turn', and we haven't done it for CYCLE_TIME seconds, then we perform an expiry run */ static char * data_cache_path(CamelDataCache *cdc, int create, const char *path, const char *key) { char *dir, *real, *tmp; guint32 hash; hash = g_str_hash(key); hash = (hash>>5)&CAMEL_DATA_CACHE_MASK; dir = alloca(strlen(cdc->path) + strlen(path) + 8); sprintf(dir, "%s/%s/%02x", cdc->path, path, hash); if (access(dir, F_OK) == -1) { if (create) camel_file_util_mkdir(dir, 0700); } else if (cdc->priv->expire_inc == hash && (cdc->expire_age != -1 || cdc->expire_access != -1)) { time_t now; dd(printf("Checking expire cycle time on dir '%s'\n", dir)); now = time(0); if (cdc->priv->expire_last[hash] + CAMEL_DATA_CACHE_CYCLE_TIME < now) { data_cache_expire(cdc, dir, key, now); cdc->priv->expire_last[hash] = now; } cdc->priv->expire_inc = (cdc->priv->expire_inc + 1) & CAMEL_DATA_CACHE_MASK; } tmp = camel_file_util_safe_filename(key); real = g_strdup_printf("%s/%s", dir, tmp); g_free(tmp); return real; } static void stream_finalised(CamelObject *o, void *event_data, void *data) { CamelDataCache *cdc = data; char *key; d(printf("Stream finalised '%p'\n", data)); CDC_LOCK(cdc, lock); key = g_hash_table_lookup(cdc->priv->busy_stream, o); if (key) { d(printf(" For path '%s'\n", key)); g_hash_table_remove(cdc->priv->busy_path, key); g_hash_table_remove(cdc->priv->busy_stream, o); g_free(key); } else { d(printf(" Unknown stream?!\n")); } CDC_UNLOCK(cdc, lock); } /** * camel_data_cache_add: * @cdc: * @path: Relative path of item to add. * @key: Key of item to add. * @ex: * * Add a new item to the cache. * * The key and the path combine to form a unique key used to store * the item. * * Potentially, expiry processing will be performed while this call * is executing. * * Return value: A CamelStream (file) opened in read-write mode. * The caller must unref this when finished. **/ CamelStream * camel_data_cache_add(CamelDataCache *cdc, const char *path, const char *key, CamelException *ex) { char *real, *oldpath; CamelStream *stream; CDC_LOCK(cdc, lock); real = data_cache_path(cdc, TRUE, path, key); if (g_hash_table_lookup_extended(cdc->priv->busy_path, real, (void **)&oldpath, (void **)&stream)) { g_hash_table_remove(cdc->priv->busy_path, oldpath); g_hash_table_remove(cdc->priv->busy_stream, stream); unlink(oldpath); g_free(oldpath); } stream = camel_stream_fs_new_with_name(real, O_RDWR|O_CREAT|O_TRUNC, 0600); if (stream) { camel_object_hook_event((CamelObject *)stream, "finalize", stream_finalised, cdc); g_hash_table_insert(cdc->priv->busy_stream, stream, real); g_hash_table_insert(cdc->priv->busy_path, real, stream); } else { g_free(real); } CDC_UNLOCK(cdc, lock); return stream; } /** * camel_data_cache_get: * @cdc: * @path: Path to the (sub) cache the item exists in. * @key: Key for the cache item. * @ex: * * Lookup an item in the cache. If the item exists, a stream * is returned for the item. The stream may be shared by * multiple callers, so ensure the stream is in a valid state * through external locking. * * Return value: A cache item, or NULL if the cache item does not exist. **/ CamelStream * camel_data_cache_get(CamelDataCache *cdc, const char *path, const char *key, CamelException *ex) { char *real; CamelStream *stream; CDC_LOCK(cdc, lock); real = data_cache_path(cdc, FALSE, path, key); stream = g_hash_table_lookup(cdc->priv->busy_path, real); if (stream) { camel_object_ref((CamelObject *)stream); g_free(real); } else { stream = camel_stream_fs_new_with_name(real, O_RDWR, 0600); if (stream) { camel_object_hook_event((CamelObject *)stream, "finalize", stream_finalised, cdc); g_hash_table_insert(cdc->priv->busy_stream, stream, real); g_hash_table_insert(cdc->priv->busy_path, real, stream); } else { g_free (real); } } CDC_UNLOCK(cdc, lock); return stream; } /** * camel_data_cache_remove: * @cdc: * @path: * @key: * @ex: * * Remove/expire a cache item. * * Return value: **/ int camel_data_cache_remove(CamelDataCache *cdc, const char *path, const char *key, CamelException *ex) { CamelStream *stream; char *real, *oldpath; int ret; CDC_LOCK(cdc, lock); real = data_cache_path(cdc, FALSE, path, key); if (g_hash_table_lookup_extended(cdc->priv->busy_path, real, (void **)&oldpath, (void **)&stream)) { g_hash_table_remove(cdc->priv->busy_path, path); g_hash_table_remove(cdc->priv->busy_stream, stream); g_free(oldpath); } /* maybe we were a mem stream */ if (unlink(real) == -1 && errno != ENOENT) { camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM, _("Could not remove cache entry: %s: %s"), real, strerror(errno)); ret = -1; } else { ret = 0; } g_free(real); CDC_UNLOCK(cdc, lock); return ret; } /** * camel_data_cache_rename: * @cache: * @old: * @new: * @ex: * * Rename a cache path. All cache items accessed from the old path * are accessible using the new path. * * CURRENTLY UNIMPLEMENTED * * Return value: -1 on error. **/ int camel_data_cache_rename(CamelDataCache *cache, const char *old, const char *new, CamelException *ex) { /* blah dont care yet */ return -1; } /** * camel_data_cache_clear: * @cache: * @path: Path to clear, or NULL to clear all items in * all paths. * @ex: * * Clear all items in a given cache path or all items in the cache. * * CURRENTLY_UNIMPLEMENTED * * Return value: -1 on error. **/ int camel_data_cache_clear(CamelDataCache *cache, const char *path, CamelException *ex) { /* nor for this? */ return -1; } e79cac36'>upgrade to 2.0ijliao2005-07-192-3/+4 * Define default charset as "iso_1". FreeTDS crashes when we pass NULL.mi2005-07-192-1/+2 * Unbreak the manual pages installation and help file generation:mi2005-07-192-22/+30 * BROKEN should be quoted here.linimon2005-07-191-2/+2 * This port should be IGNORE, not BROKEN, since the problem is structurallinimon2005-07-191-2/+2 * Use the usual email address.wes2005-07-191-1/+1 * - Update to 1.1pav2005-07-192-6/+9 * Update to 1.74, which adds some minor checks, changes thefenner2005-07-192-3/+3 * - Update to 1.4.2pav2005-07-192-4/+4 * - Update to 1.0.5pav2005-07-192-4/+3 * - Use PLIST_FILESpav2005-07-193-2/+4 * penguinsap --> ports/audio/penguinsappav2005-07-191-0/+1 * A simple command line player for playing 8bit Atari(TM) .sap (Slight Ataripav2005-07-195-0/+62 * exmars --> ports/games/exmarspav2005-07-191-0/+1 * exMARS combines the latest advance in corewar simulation technology, withpav2005-07-196-0/+138 * py-protocols --> ports/devel/py-protocolspav2005-07-191-0/+1 * PyProtocols extends the PEP 246 adapt() function with a new "declaration API"pav2005-07-199-0/+169 * - Don't overwrite config file on updatepav2005-07-192-2/+14 * - Update to 1.1.0pav2005-07-1913-107/+212 * cgiirc --> ports/irc/cgiircpav2005-07-191-0/+1 * GGI:IRC is a Perl/CGI program that lets you access IRC from a web browser, it ispav2005-07-195-0/+164 * - Fix build on FreeBSD 7pav2005-07-191-7/+4 * Upgrade to 2.3.1.thierry2005-07-192-4/+4 * o add kdebase (kate) vulnarability.mich2005-07-191-0/+33 * - Use PLIST_FILESpav2005-07-192-2/+2 * - Update to 0.4.1pav2005-07-192-3/+8 * Upgrade to version 1.150.olgeni2005-07-192-3/+3 * Upgrade to version 1.220.olgeni2005-07-192-16/+5 * - Update to 0.2.1pav2005-07-192-4/+4 * - Update to 1.4pav2005-07-192-11/+8 * maven2 --> ports/devel/maven2hq2005-07-191-0/+1 * Maven is a software project management and comprehension tool. Based on thehq2005-07-195-0/+70 * update to 20050518garga2005-07-193-5/+26 * Update to 4537jeh2005-07-192-3/+3 * Update to 0.8.5garga2005-07-192-3/+3 * update to 1.18garga2005-07-194-6/+17 * cursor-jimmac-theme --> ports/x11-themes/cursor-jimmac-themepav2005-07-191-0/+1 * This is a theme based on the cursor work of the re-known desktoppav2005-07-195-0/+92 * py-crack --> ports/security/py-crackpav2005-07-191-0/+1 * This module brings to Python programs the capability of evaluating passwordpav2005-07-195-0/+58 * py-paida --> ports/science/py-paidapav2005-07-191-0/+1 * PAIDA is pure Python scientific analysis package and implements AIDA (Abstractpav2005-07-195-0/+336 * - Update to 2.0beta.2pav2005-07-194-16/+27 * - Fix WITH_LANG knobpav2005-07-192-4/+6 * - Patch nine bugs:pav2005-07-1981-116/+6676 * - Update to 1.3.2pav2005-07-193-4/+5 * - Update to 20050718pav2005-07-1810-332/+114 * Move to MASTER_SITE_LOCAL .fenner2005-07-181-2/+3 * - Support CC/CFLAGS properlypav2005-07-183-30/+17 * - Update to 5.3.2pav2005-07-183-12/+12 * Fix installation/deinstallation in case the PREFIX contains the string lib.gerald2005-07-181-1/+1 * Update to the 20050716 snapshot of GCC 4.1.0 (with two new .info files).gerald2005-07-1818-135/+144 * OPTIONify.sumikawa2005-07-182-4/+24 * - Update to 2.9.18pav2005-07-1844-620/+298 * Backport support for FreeBSD 7 and drop support for FreeBSD 3.perky2005-07-186-40/+1288 * Upgrade to 0.9.9.011.vanilla2005-07-1818-27/+39 * Fix WWW.vanilla2005-07-183-2/+4 * - Update to 1.0.2pav2005-07-184-16/+16 * p5-Search-VectorSpace --> ports/textproc/p5-Search-VectorSpaceerwin2005-07-181-0/+1 * Add p5-Search-VectorSpace 0.02, a very basic vector-space search engineerwin2005-07-185-0/+52 * - fix manpagesdinoex2005-07-181-2/+0 * Update to version 2.52.demon2005-07-183-5/+7 * p5-Text-NSP --> ports/textproc/p5-Text-NSPerwin2005-07-181-0/+1 * Add p5-Text-NSP 0.71, perl5 modules for Ngram Statistics Package.erwin2005-07-187-0/+170 * - Correct the spelling of word "slovak"dinoex2005-07-181-1/+1 * - Update to 13.1sem2005-07-182-70/+70 * Fix build on 4.x.kwm2005-07-181-0/+3 * - Update to 4.2sem2005-07-182-13/+13 * p5-Template-Multilingual --> ports/www/p5-Template-Multilingualerwin2005-07-181-0/+1 * Add p5-Template-Multilingual 0.05, multilingual templates for Templateerwin2005-07-185-0/+56 * Unbreak the build on 4.X.danfe2005-07-181-2/+2 * Remove already-merged-patch.kuriyama2005-07-186-417/+0 * Upgrade to 0.8.kuriyama2005-07-182-3/+3 * Add CVE names to recent bugzilla entry.simon2005-07-181-0/+3 * Upgrade to 1.3.2: Return-by-Reference fix for PHP 4.4 (Bug #4814).thierry2005-07-182-3/+3 * - Grabclement2005-07-185-5/+5 * Fix the checksum issues.mbr2005-07-182-3/+1 * - Fix MASTER_SITESpav2005-07-181-1/+1 * - Update to 0.9.2pav2005-07-183-3/+23 * - Update to 0.3.3pav2005-07-183-54/+22 * - Add a dependency on database backend, bsddb by default, gdbm aspav2005-07-181-3/+13 * - Fix typopav2005-07-182-0/+12 * - Update to 0.5.4pav2005-07-184-17/+18 * Hardcode LATEST_LINK to waimea-devel so that it's different fromadamw2005-07-181-0/+2 * Make sure LATEST_LINK is unique from that of the calife-nondevel port.adamw2005-07-181-0/+2 * Ensure that LATEST_LINK is unique for the tcl84-thread port.adamw2005-07-181-1/+1 * Don't clobber LATEST_LINK (ensures that LATEST_LINK is uniqueadamw2005-07-181-1/+1 * Ensure that LATEST_LINK is different for all mew2-based ports.adamw2005-07-181-0/+3 * - Fix detection of FreeBSD 7barner2005-07-182-2/+2 * . Update to 3.2.7.glewis2005-07-182-4/+4 * - Add missed pkg-config dependencysem2005-07-181-0/+1 * - Update to 1.8.31ahze2005-07-183-4/+4 * - Update to 1.3pav2005-07-182-6/+10 * - Update to 2.2.1pav2005-07-182-3/+3 * - Update to 2.06pav2005-07-182-3/+3 * - Update to 0.0.9pav2005-07-183-39/+47 * Add -g in CFLAGS and STRIP= #empty when use WITH_DEBUG knob.mezz2005-07-182-0/+4 * With portmgr hat on, reset eik's ports since he has been inactive forlinimon2005-07-1816-16/+16 * Note replacement of net/ldap21-* ports by ldap22 versions.linimon2005-07-181-0/+4 * Remove expired net/openldap21*/ ports.linimon2005-07-181-4/+0 * Remove expired openldap21* ports.linimon2005-07-181-4/+0 * As previously announced, remove these expired ports.linimon2005-07-1819-1017/+0 * Let gtk-sharp(-devel) to take care of ${LOCALBASE}/share/gapi(-2.0) too to fixmezz2005-07-188-2/+24 * fixed compilation errorsuz2005-07-182-0/+22 * Update to 1.3.3perky2005-07-183-10/+12 * Update to 1.4.markp2005-07-183-3/+5 * Update to 1.3.1perky2005-07-183-4/+90 * Update to 0.7.0perky2005-07-183-502/+508 * - unbreak this port (forgot to remove BROKEN in previous commit)leeym2005-07-181-2/+0 * - change the order of PLIST to fix mtree problemleeym2005-07-181-2/+2 * Upgrade to 2.3.thierry2005-07-183-4/+5 * Update to 0.8.8krion2005-07-182-3/+3 * Update to 10.21krion2005-07-182-3/+3 * Update to 1.1.1krion2005-07-182-3/+3 * Update to 0.5.18krion2005-07-186-10/+12 * Update to version 203krion2005-07-182-3/+3 * Chase TK upgrade and unbreak.thierry2005-07-182-5/+13 * Fix the build on FreeBSD 7.x by teach it. I need to contact with mainstreammezz2005-07-181-0/+4 * - fix installation of start script on 4.xleeym2005-07-181-0/+5 * Update to 4.1.3lioux2005-07-188-16/+96 * - Update MASTER_SITESpav2005-07-182-4/+2 * - Update to 1.4.2pav2005-07-185-6/+57 * - Update to 2.8.2pav2005-07-183-24/+28 * - Update to 2.510pav2005-07-182-3/+3 * - Reset long term unresponsive maintainerpav2005-07-182-2/+2 * - BUILD_DEPENDS are also RUN_DEPENDSpav2005-07-182-0/+4 * - Fix WWWpav2005-07-181-1/+1 * - Update to 2.0pav2005-07-184-31/+170 * Fix alignment problems when checking socket credentials on non-i386marcus2005-07-183-15/+141 * Unbreak default GL lib dependency.netchild2005-07-185-5/+5 * BROKEN: Checksum mismatchkris2005-07-181-0/+2 * unbreak ia64.sf2005-07-181-0/+3 * Reset undeliverable maintainer address:kris2005-07-181-1/+1 * BROKEN on !i386: Configure failskris2005-07-182-0/+8 * BROKEN: Incomplete pkg-plistkris2005-07-181-0/+2 * BROKEN: Unfetchablekris2005-07-185-0/+9 * BROKEN: Install failskris2005-07-181-0/+2 * BROKEN: Does not buildkris2005-07-183-0/+6 * BROKEN: Broken dependencykris2005-07-182-0/+4 * BROKEN: Incomplete pkg-plistkris2005-07-181-0/+2 * BROKEN: incomplete pkg-plistkris2005-07-185-0/+10 * BROKEN: Incomplete pkg-plistkris2005-07-184-0/+8 * - Remove reference to yuvdeinterlace in pkg-descrahze2005-07-181-6/+0 * - Don't build/install yuvdeinterlace since it is installedahze2005-07-183-21/+1 * - Chase mjpegtools lib versionahze2005-07-181-1/+2 * Fix plist.novel2005-07-181-0/+1 * - Fix typo in plistahze2005-07-181-1/+1 * - Fix build on amd64pav2005-07-181-1/+1 * - Update to 4.0.10pav2005-07-1811-263/+559 * tcl84-thread --> ports/lang/tcl84-threadpav2005-07-181-0/+1 * New slave port of tcl84 that enabled threading support.pav2005-07-182-0/+13 * py-visual --> ports/graphics/py-visualpav2005-07-181-0/+1 * With this Python module a program can create 3D objects (such as spheres,pav2005-07-185-0/+178 * - Unbreak on 7-current.kuriyama2005-07-179-0/+48 * - update to 0.09clsung2005-07-172-3/+3 * - update to 1.36clsung2005-07-173-4/+7 * - update to 0.600clsung2005-07-172-3/+3 * - update to 1.7clsung2005-07-172-3/+3 * - update to 0.13clsung2005-07-172-3/+3 * - linux_mesa3 -> linux_drinetchild2005-07-175-5/+10 * Mark deprecated, expiration date set.netchild2005-07-171-0/+3 * - respect WITH_NVIDIA_GL settingnetchild2005-07-172-4/+14 * - USE_MESA is deprecatednetchild2005-07-171-2/+4 * Use linux_dri instead of linux_mesa3. This allows hardware accelerationnetchild2005-07-171-2/+6 * Update to 1.9.12.netchild2005-07-1710-162/+22 * 1. Update 2.5.12 --> 2.5.13.cy2005-07-173-40/+5 * Update to 1.2.2.perky2005-07-174-6/+6 * The grand-daddy site of VietNet gone :~-( R.I.P. media.mit.eduobrien2005-07-171-1/+2 * Fix build. Luckily the only pre-build result we really need is readme.var.obrien2005-07-171-5/+1 * Add note how to make localized packagesmaho2005-07-178-60/+104 * Register conflicts.cy2005-07-172-0/+4 * Watch over this VN port.obrien2005-07-171-1/+1 * The grand-daddy site of VietNet gone :~-( R.I.P. media.mit.eduobrien2005-07-175-10/+6 * openclipart --> ports/graphics/openclipartahze2005-07-171-0/+1 * - Add openclipartahze2005-07-174-0/+59 * The grand-daddy site of VietNet gone :~-( R.I.P. media.mit.eduobrien2005-07-171-2/+1 * Fix alignment problems on non-i386 platforms.marcus2005-07-176-58/+56 * Move to using the bzip2'ed distfile.obrien2005-07-172-2/+3 * Add dependency on dns/p5-Net-DNSedwin2005-07-171-0/+1 * Update to 1.0b4.girgen2005-07-173-23/+5 * - Update to 1.6r2pav2005-07-172-5/+5 * Gamin was using its own, debugging, versions of the g_list glib functions.marcus2005-07-173-6/+32 * - Update to 0.50.1 and unbreakpav2005-07-1718-495/+502 * - Fix dependency list: sulci use mueller dictionary by defaultpav2005-07-172-6/+12 * py-beautifulsoup --> ports/www/py-beautifulsouppav2005-07-171-0/+1 * Beautiful Soup parses arbitrarily invalid XML- or HTML-like substancepav2005-07-179-0/+87 * - Update to 2.5.3pav2005-07-172-4/+3 * tinybsd --> ports/sysutils/tinybsdpav2005-07-171-0/+1 * With TinyBSD you can create embedded systems based on FreeBSD 5.X and 6-CURRENTpav2005-07-176-0/+65 * Update to version 1.2.2.1.thierry2005-07-1724-270/+238 * Update to 4.0.3lioux2005-07-174-6/+6 * Update to 0.5.2.ume2005-07-172-5/+5 * Fix build with IPv6 support.novel2005-07-171-8/+27 * Chase dbus update to 3.5.1 again by update plist.mezz2005-07-172-5/+5 * Update to 2.10.2.mezz2005-07-174-6/+6 * Update to 0.35.1.marcus2005-07-174-19/+8 * -Chase dbus update to 0.35 by update plist.mezz2005-07-172-9/+9 * - Fix a patch which did not apply [1]jylefort2005-07-165-116/+38 * Drop maintainership.erwin2005-07-161-1/+1 * p5-Text-LevenshteinXS --> ports/devel/p5-Text-LevenshteinXSerwin2005-07-161-0/+1 * Add p5-Text-LevenshteinXS 0.03, text::LevenshteinXS - CPAN Levenshteinerwin2005-07-165-0/+46 * p5-JavaScript-SpiderMonkey --> ports/lang/p5-JavaScript-SpiderMonkeyerwin2005-07-161-0/+1 * Add p5-JavaScript-SpiderMonkey 0.11, perl interface to Mozillaerwin2005-07-165-0/+55 * p5-Unix-Mknod --> ports/sysutils/p5-Unix-Mknoderwin2005-07-161-0/+1 * Add p5-Unix-Mknod 0.02, perl5 module to create special files.erwin2005-07-165-0/+44 * - Update to 1.76jylefort2005-07-162-11/+5 * - Update to 1.17jylefort2005-07-162-11/+5 * - Remove epsxe-install; the epsxe shell script now maintains ~/.epsxejylefort2005-07-166-147/+77 * linux-pete-xgl2gpu --> ports/emulators/linux-pete-xgl2gpujylefort2005-07-161-0/+1 * Add linux-pete-xgl2gpu.jylefort2005-07-165-0/+86 * - Document firefox & mozilla -- multiple vulnerabilities.simon2005-07-161-1/+126 * make it compile on 7oliver2005-07-161-2/+2 * wxMaxima --> ports/math/wxMaximaerwin2005-07-161-0/+1 * - Update to 1.3.3pav2005-07-167-35/+43 * xmms-rateplug --> ports/audio/xmms-rateplugpav2005-07-161-0/+1 * Add song rating control to the XMMS playlistpav2005-07-166-0/+82 * install run-mailcapoliver2005-07-161-1/+4 * No longer put target specific files and include files at the verygerald2005-07-169-45/+45 * p5-File-Stat-Bits --> ports/sysutils/p5-File-Stat-Bitserwin2005-07-161-0/+1 * Add p5-File-Stat-Bits 0.18, perl5 module interface to theerwin2005-07-165-0/+40 * Forced commit to note that the previous update was:erwin2005-07-160-0/+0 * Update to 2.02erwin2005-07-162-3/+3 * Update to 1.32erwin2005-07-162-3/+3 * Update to 1.32erwin2005-07-162-3/+3 * Add an entry for the drupal vulnerabilities.erwin2005-07-161-0/+27 * Update to 5.0.9 release.ale2005-07-1623-47/+42 * - Update to 4.6.2, which fixes major security problempav2005-07-1615-775/+785 * Update to 0.1.0.nork2005-07-162-5/+6 * Update to 1.9m117maho2005-07-1624-48/+48 * Update to 0.35.marcus2005-07-162-4/+7 * Update to 0.35, and hopefully fix cmsgcred alignment on non-i386 platforms.marcus2005-07-1610-86/+174 * Update to 20050715.thierry2005-07-16