Mercurial > noffle
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 ); +}