diff util.c @ 0:04124a4423d4 noffle

[svn] Initial revision
author enz
date Tue, 04 Jan 2000 11:35:42 +0000
parents
children 526a4c34ee2e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util.c	Tue Jan 04 11:35:42 2000 +0000
@@ -0,0 +1,198 @@
+/*
+  util.c
+
+  $Id: util.c 3 2000-01-04 11:35:42Z enz $
+*/
+
+#include "util.h"
+#include <errno.h>
+#include <ctype.h>
+#include <fnmatch.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include "config.h"
+#include "log.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;
+    }
+}
+
+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_cpyStr( Str dst, const char *src )
+{
+    dst[ 0 ] = '\0';
+    strncat( dst, src, MAXCHAR );
+}
+
+void
+Utl_cpyStrN( Str dst, const char *src, size_t n )
+{
+    dst[ 0 ] = '\0';
+    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_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 );
+}
+
+Bool
+Utl_matchPattern( const char *text, const char *pattern )
+{
+    if ( pattern[ 0 ] == '*' && pattern[ 1 ] == '\0' )
+        return TRUE;
+    return ( fnmatch( pattern, text, 0 ) == 0 );
+}