/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : SyslogUtils.cc                                                */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include <ctype.h>
#include <stdio.h>
#include <string.h>

#include "SyslogUtils.h"

///////////////////////////////////////////////////////////////////
// syslogBuffer - logs a buffer to syslog but maps unprintable
//                characters to hex values

#define BUFSIZE 128

void syslogBuffer(int priority, char *msg, int nBytes)
{
    int  i, status;
    char buffer[BUFSIZE], *bp;
	
    for ( i = 0, bp = buffer; i < nBytes; i++ )
    {
        if ( isprint(msg[i]) )
	    *bp++ = msg[i];
	else
	    if ( (status = sprintf(bp, "(%02x)", msg[i])) > 0) 
	       bp += status;

	if ((bp - buffer) > (BUFSIZE - 10))
	{
	    *bp = NULL;		// Null terminate string
	    syslog(priority, "%s", buffer);
	    bp = buffer;
	} /* if */
    } /* for */
   
    if (bp != buffer) 
    {
        *bp = NULL;		// Null terminate string
	syslog(priority, "%s", buffer);
    } 

    syslog(priority, "\n");
} /* syslogBuffer() */

void syslogCharacter(int priority, char c)
{
    int  i, status;

    if ( isprint(c) ) 
	syslog(priority, "%c", c);
    else
        syslog(priority, "(%02x)", c );
} /* syslogCharacter() */

////////////////////////////////////////////////////////////////////////
//  Revision control message strings

void syslogRcs( int priority, const char *rev, const char *date )
{
    char msg_buf[512];

    strncat( strcpy(msg_buf, "\t"), rev + 1, strlen(rev) - 3 );
    if ( date )
	strncat( strcat(msg_buf, ", "), date + 1, strlen(date) - 3 );
    strcat( msg_buf, "\n" );
    syslog(priority, "%s\n", msg_buf);
}




