Annotation of ircnowd/src/tool/tool.c, Revision 1.1
1.1 ! tomglok 1: /*
! 2: * ngIRCd -- The Next Generation IRC Daemon
! 3: * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify
! 6: * it under the terms of the GNU General Public License as published by
! 7: * the Free Software Foundation; either version 2 of the License, or
! 8: * (at your option) any later version.
! 9: * Please read the file COPYING, README and AUTHORS for more information.
! 10: */
! 11:
! 12: #include "portab.h"
! 13:
! 14: /**
! 15: * @file
! 16: * Tool functions
! 17: */
! 18:
! 19: #include <assert.h>
! 20: #include <ctype.h>
! 21: #include <stdio.h>
! 22: #include <stdlib.h>
! 23: #include <string.h>
! 24: #include <sys/time.h>
! 25:
! 26: #include <netinet/in.h>
! 27:
! 28: #ifdef SYSLOG
! 29: #define SYSLOG_NAMES 1
! 30: #include <syslog.h>
! 31: #endif
! 32:
! 33: #include "tool.h"
! 34:
! 35:
! 36: /**
! 37: * Removes all leading and trailing whitespaces of a string.
! 38: * @param String The string to remove whitespaces from.
! 39: */
! 40: GLOBAL void
! 41: ngt_TrimStr(char *String)
! 42: {
! 43: char *start, *end;
! 44:
! 45: assert(String != NULL);
! 46:
! 47: start = String;
! 48:
! 49: /* Remove whitespaces at the beginning of the string ... */
! 50: while (*start == ' ' || *start == '\t' ||
! 51: *start == '\n' || *start == '\r')
! 52: start++;
! 53:
! 54: if (!*start) {
! 55: *String = '\0';
! 56: return;
! 57: }
! 58:
! 59: /* ... and at the end: */
! 60: end = strchr(start, '\0');
! 61: end--;
! 62: while ((*end == ' ' || *end == '\t' || *end == '\n' || *end == '\r')
! 63: && end >= start)
! 64: end--;
! 65:
! 66: /* New trailing NULL byte */
! 67: *(++end) = '\0';
! 68:
! 69: memmove(String, start, (size_t)(end - start)+1);
! 70: } /* ngt_TrimStr */
! 71:
! 72:
! 73: /**
! 74: * Convert a string to uppercase letters.
! 75: */
! 76: GLOBAL char *
! 77: ngt_UpperStr(char *String)
! 78: {
! 79: char *ptr;
! 80:
! 81: assert(String != NULL);
! 82:
! 83: ptr = String;
! 84: while(*ptr) {
! 85: *ptr = (char)toupper(*ptr);
! 86: ptr++;
! 87: }
! 88: return String;
! 89: } /* ngt_UpperStr */
! 90:
! 91:
! 92: /**
! 93: * Convert a string to lowercase letters.
! 94: */
! 95: GLOBAL char *
! 96: ngt_LowerStr(char *String)
! 97: {
! 98: char *ptr;
! 99:
! 100: assert(String != NULL);
! 101:
! 102: ptr = String;
! 103: while(*ptr) {
! 104: *ptr = (char)tolower(*ptr);
! 105: ptr++;
! 106: }
! 107: return String;
! 108: } /* ngt_LowerStr */
! 109:
! 110:
! 111: GLOBAL void
! 112: ngt_TrimLastChr( char *String, const char Chr)
! 113: {
! 114: /* If last character in the string matches Chr, remove it.
! 115: * Empty strings are handled correctly. */
! 116:
! 117: size_t len;
! 118:
! 119: assert(String != NULL);
! 120:
! 121: len = strlen(String);
! 122: if(len == 0)
! 123: return;
! 124:
! 125: len--;
! 126:
! 127: if(String[len] == Chr)
! 128: String[len] = '\0';
! 129: } /* ngt_TrimLastChr */
! 130:
! 131:
! 132: /**
! 133: * Fill a String with random chars
! 134: */
! 135: GLOBAL char *
! 136: ngt_RandomStr(char *String, const size_t len)
! 137: {
! 138: static const char chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!\"#$&'()*+,-./:;<=>?@[\\]^_`";
! 139: struct timeval t;
! 140: size_t i;
! 141:
! 142: assert(String != NULL);
! 143:
! 144: gettimeofday(&t, NULL);
! 145: #ifndef HAVE_ARC4RANDOM
! 146: srand((unsigned)(t.tv_usec * t.tv_sec));
! 147:
! 148: for (i = 0; i < len; ++i) {
! 149: String[i] = chars[rand() % (sizeof(chars) - 1)];
! 150: }
! 151: #else
! 152: for (i = 0; i < len; ++i)
! 153: String[i] = chars[arc4random() % (sizeof(chars) - 1)];
! 154: #endif
! 155: String[len] = '\0';
! 156:
! 157: return String;
! 158: } /* ngt_RandomStr */
! 159:
! 160:
! 161: #ifdef SYSLOG
! 162:
! 163:
! 164: #ifndef INTERNAL_MARK
! 165:
! 166: #ifndef _code
! 167: typedef struct _code {
! 168: char *c_name;
! 169: int c_val;
! 170: } CODE;
! 171: #endif
! 172:
! 173: CODE facilitynames[] = {
! 174: #ifdef LOG_AUTH
! 175: { "auth", LOG_AUTH },
! 176: #endif
! 177: #ifdef LOG_AUTHPRIV
! 178: { "authpriv", LOG_AUTHPRIV },
! 179: #endif
! 180: #ifdef LOG_CRON
! 181: { "cron", LOG_CRON },
! 182: #endif
! 183: #ifdef LOG_DAEMON
! 184: { "daemon", LOG_DAEMON },
! 185: #endif
! 186: #ifdef LOG_FTP
! 187: { "ftp", LOG_FTP },
! 188: #endif
! 189: #ifdef LOG_LPR
! 190: { "lpr", LOG_LPR },
! 191: #endif
! 192: #ifdef LOG_MAIL
! 193: { "mail", LOG_MAIL },
! 194: #endif
! 195: #ifdef LOG_NEWS
! 196: { "news", LOG_NEWS },
! 197: #endif
! 198: #ifdef LOG_UUCP
! 199: { "uucp", LOG_UUCP },
! 200: #endif
! 201: #ifdef LOG_USER
! 202: { "user", LOG_USER },
! 203: #endif
! 204: #ifdef LOG_LOCAL7
! 205: { "local0", LOG_LOCAL0 },
! 206: { "local1", LOG_LOCAL1 },
! 207: { "local2", LOG_LOCAL2 },
! 208: { "local3", LOG_LOCAL3 },
! 209: { "local4", LOG_LOCAL4 },
! 210: { "local5", LOG_LOCAL5 },
! 211: { "local6", LOG_LOCAL6 },
! 212: { "local7", LOG_LOCAL7 },
! 213: #endif
! 214: { 0, -1 }
! 215: };
! 216:
! 217: #endif
! 218:
! 219:
! 220: GLOBAL const char*
! 221: ngt_SyslogFacilityName(int Facility)
! 222: {
! 223: int i = 0;
! 224: while(facilitynames[i].c_name) {
! 225: if (facilitynames[i].c_val == Facility)
! 226: return facilitynames[i].c_name;
! 227: i++;
! 228: }
! 229: return "unknown";
! 230: }
! 231:
! 232:
! 233: GLOBAL int
! 234: ngt_SyslogFacilityID(char *Name, int DefaultFacility)
! 235: {
! 236: int i = 0;
! 237: while(facilitynames[i].c_name) {
! 238: if (strcasecmp(facilitynames[i].c_name, Name) == 0)
! 239: return facilitynames[i].c_val;
! 240: i++;
! 241: }
! 242: return DefaultFacility;
! 243: }
! 244:
! 245:
! 246: #endif
! 247:
! 248:
! 249: /* -eof- */
CVSweb