Mercurial > noffle
view src/util.c @ 45:32ba1198c6fa noffle
[svn] * Makefile.in, configure, configure.in, docs/Makefile.in, src/Makefile.in:
Added checks for the mail and sort programs. ./configure will abort if
they're not found.
* README: Removed the paragraph about news client software, as it's the same
as the one in docs/NOTES.
* TODO: Removed 'expiring by groups' and
'move some text from noffle.1 to noffle.conf.5'.
* docs/NOTES: Changed the text about -DDEBUG to explain one should use
'./configure --enable-debug'.
* docs/noffle.1, docs/noffle.conf.5: Minor fixes. Added myself and Jim Hague
to the AUTHORS section :-)
* src/client.h, src/common.h, src/configfile.h, src/content.c, src/content.h,
src/control.c, src/control.h, src/database.h, src/dynamicstring.c,
src/dynamicstring.h, src/fetch.h, src/fetchlist.h, src/group.h,
src/itemlist.c, src/itemlist.h, src/lock.h, src/log.c, src/log.h,
src/noffle.c, src/online.h, src/outgoing.h, src/over.c, src/over.h,
src/post.h, src/protocol.h, src/pseudo.h, src/request.h, src/server.h,
src/util.c, src/util.h: Added the <config.h> include.
* src/content.c: Added missing include "content.h". Added a missing 'void'
in the declaration of clearCont().
* src/fetchlist.c: Casted fetchlist.size to (size_t) in a call to qsort(),
as qsort() expects a size_t. This removes a warning.
* src/noffle.c: Made doRequested() static. Added missing void to
enableCorefiles().
* src/log.c, src/protocol.c, src/online.c, src/pseudo.c: Added missing
includes.
* src/pseudo.c: Made genOv() and genPseudo() static.
* src/server.c: Added missing void to postArts(). Made touchArticle() static.
* src/util.c: Casted arguments of malloc() and memcpy() to size_t.
* src/dynamicstring.c, src/itemlist.c, src/over.c, src/request.c, src/util.c:
Removed casting of the result of malloc(). This is not necessary and
can hide a missing include of <stdlib.h>.
author | uh1763 |
---|---|
date | Sat, 06 May 2000 00:49:38 +0100 |
parents | 2842f50feb55 |
children | 125d79c9e586 |
line wrap: on
line source
/* util.c $Id: util.c 51 2000-05-05 23:49:38Z uh1763 $ */ #if HAVE_CONFIG_H #include <config.h> #endif #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 = malloc( (size_t)len + 1 ) ) ) { Log_err( "Cannot allocate string with length %lu", strlen( src ) ); exit( EXIT_FAILURE ); } memcpy( *dst, src, (size_t)len + 1 ); }