diff src/util.c @ 43:2842f50feb55 noffle

[svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h, control.c, control.h, database.c, database.h, dynamicstring.c, dynamicstring.h, fetch.c, fetch.h, fetchlist.c, fetchlist.h, group.c, group.h, itemlist.c, itemlist.h, lock.c, lock.h, log.c, log.h, noffle.c, online.c, online.h, outgoing.c, outgoing.h, over.c, over.h, post.c, post.h, protocol.c, protocol.h, pseudo.c, pseudo.h, request.c, request.h, server.c, server.h, util.c, util.h, wildmat.c, wildmat.h: Moved files to the subdirectory src/ * Makefile.am, acconfig.h, configure.in, docs/Makefile.am, src/Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, install-sh, missing, mkinstalldirs, stamp-h.in, docs/Makefile.in, src/Makefile.in: Added files. They are used by aclocal, autoheader, autoconf and automake. * src/config.c, src/config.h: Renamed to configfile.c and configfile.h, because configure will generate a config.h file itself. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/noffle.c, src/online.c, src/outgoing.c, src/over.c, src/pseudo.c, src/request.c, src/server.c, src/util.c: Changed '#include "config.h"' to '#include "configfile.h"'. * src/client.c, src/content.c, src/database.c, src/fetch.c, src/fetchlist.c, src/group.c, src/lock.c, src/online.c, src/outgoing.c, src/post.c, src/protocol.c, src/request.c, src/server.c: Files now #include <config.h>. Added missing <stdio.h>. This removes the warnings about snprintf() not being declared. * Makefile: Removed. This is now generated by configure.
author uh1763
date Fri, 05 May 2000 22:45:56 +0100
parents
children 32ba1198c6fa
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/util.c	Fri May 05 22:45:56 2000 +0100
@@ -0,0 +1,255 @@
+/*
+  util.c
+
+  $Id: util.c 49 2000-05-05 21:45:56Z uh1763 $
+*/
+
+#include "util.h"
+#include <errno.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include "configfile.h"
+#include "log.h"
+#include "wildmat.h"
+
+static const char *
+nextWhiteSpace( const char *p )
+{
+    while ( *p && ! isspace( *p ) )
+        ++p;
+    return p;
+}
+
+static const char *
+nextNonWhiteSpace( const char *p )
+{
+    while ( *p && isspace( *p ) )
+        ++p;
+    return p;
+}
+
+const char *
+Utl_restOfLn( const char *line, unsigned int token )
+{
+    unsigned int i;
+    const char *p;
+
+    p = line;
+    for ( i = 0; i < token; ++i )
+    {
+        p = nextNonWhiteSpace( p );
+        p = nextWhiteSpace( p );
+    }
+    p = nextNonWhiteSpace( p );
+    return p;
+}
+
+const char *
+Utl_getLn( Str result, const char *pos )
+{
+    int len = 0;
+    const char *p = pos;
+
+    if ( ! p )
+        return NULL;
+    while ( *p != '\n' )
+    {
+        if ( *p == '\0' )
+        {
+            if ( len > 0 )
+                Log_err( "Line not terminated by newline: '%s'", pos );
+            return NULL;
+        }
+        *(result++) = *(p++);
+        ++len;
+        if ( len >= MAXCHAR - 1 )
+        {
+            *result = '\0';
+            Log_err( "Utl_getLn: line too long: %s", result );
+            return ++p;
+        }
+    }
+    *result = '\0';
+    return ++p;
+
+}
+
+const char *
+Utl_ungetLn( const char *str, const char *p )
+{
+    if ( str == p )
+        return FALSE;
+    --p;
+    if ( *p != '\n' )
+    {
+        Log_dbg( "Utl_ungetLn: not at beginning of line" );
+        return NULL;
+    }
+    --p;
+    while ( TRUE )
+    {
+        if ( p == str )
+            return p;
+        if ( *p == '\n' )
+            return p + 1;
+        --p;
+    }
+}
+
+const char *
+Utl_getHeaderLn( Str result, const char *p )
+{
+    const char * res = Utl_getLn( result, p );
+
+    /* Look for followon line if this isn't a blank line. */
+    if ( res != NULL && !isspace( result[ 0 ] ) )
+	while ( res != NULL && res[ 0 ] != '\n' && isspace( res[ 0 ] ) )
+	{
+	    Str nextLine;
+	    const char *here;
+	    char *next;
+
+	    here = res;
+	    res = Utl_getLn( nextLine, res );
+	    next = Utl_stripWhiteSpace( nextLine );
+
+	    if ( next[ 0 ] != '\0' )
+	    {
+		Utl_catStr( result, " " );
+		Utl_catStr( result, next );
+	    }
+	    else
+	    {
+		res = here;
+		break;
+	    }
+	}
+
+    return res;
+}
+
+void
+Utl_toLower( Str line )
+{
+    char *p;
+
+    p = line;
+    while ( *p )
+    {
+        *p = tolower( *p );
+        ++p;
+    }
+}
+
+char *
+Utl_stripWhiteSpace( char *line )
+{
+    char *p;
+
+    while ( isspace( *line ) )
+        ++line;
+    p = line + strlen( line ) - 1;
+    while ( isspace( *p ) )
+    {
+        *p = '\0';
+        --p;
+    }
+    return line;
+}
+
+void
+Utl_stripComment( char *line )
+{
+    for ( ; *line != '\0'; line++ )
+	if ( *line =='#' )
+	{
+	    *line = '\0';
+	    break;
+	}
+}
+
+void
+Utl_cpyStr( Str dst, const char *src )
+{
+    dst[ 0 ] = '\0';
+    strncat( dst, src, MAXCHAR );
+}
+
+void
+Utl_cpyStrN( Str dst, const char *src, size_t n )
+{
+    if ( n > MAXCHAR )
+    	n = MAXCHAR;
+    dst[ 0 ] = '\0';
+    strncat( dst, src, n );
+}
+
+void
+Utl_catStr( Str dst, const char *src )
+{
+    strncat( dst, src, MAXCHAR - strlen( dst ) );
+}
+
+void
+Utl_catStrN( Str dst, const char *src, size_t n )
+{
+    if ( n > MAXCHAR - strlen( dst ) )
+    	n = MAXCHAR - strlen( dst );
+    strncat( dst, src, n );
+}
+
+void
+Utl_stamp( Str file )
+{
+    FILE *f;
+    time_t t;
+
+    time( &t );
+    if ( ! ( f = fopen( file, "w" ) ) )
+    {
+        Log_err( "Could not open %s for writing (%s)",
+                 file, strerror( errno ) );
+        return;
+    }
+    fprintf( f, "%lu\n", t );
+    fclose( f );
+}
+
+Bool
+Utl_getStamp( time_t *result, Str file )
+{
+    FILE *f;
+
+    if ( ! ( f = fopen( file, "r" ) ) )
+        return FALSE;
+    if ( fscanf( f, "%lu", result ) != 1 )
+    {
+        Log_err( "File %s corrupted", file );
+        fclose( f );
+        return FALSE;
+    }
+    fclose( f );
+    return TRUE;
+}
+
+void
+Utl_rfc822Date( time_t t, Str res )
+{
+    strftime( res, MAXCHAR,"%a, %d %b %Y %H:%M:%S %z", localtime( &t ) );
+}
+
+void
+Utl_allocAndCpy( char **dst, const char *src )
+{
+    int len = strlen( src );
+    if ( ! ( *dst = (char *)malloc( len + 1 ) ) )
+    {
+        Log_err( "Cannot allocate string with length %lu", strlen( src ) );
+        exit( EXIT_FAILURE );
+    }
+    memcpy( *dst, src, len + 1 );
+}