Return to logwrap.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers |
1.1 ! misho 1: /* ! 2: * Copyright (c) 2011 Todd C. Miller <Todd.Miller@courtesan.com> ! 3: * ! 4: * Permission to use, copy, modify, and distribute this software for any ! 5: * purpose with or without fee is hereby granted, provided that the above ! 6: * copyright notice and this permission notice appear in all copies. ! 7: * ! 8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ! 9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ! 10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ! 11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! 12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! 13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ! 14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! 15: */ ! 16: ! 17: #include <config.h> ! 18: ! 19: #include <sys/types.h> ! 20: #include <stdio.h> ! 21: #ifdef STDC_HEADERS ! 22: # include <stdlib.h> ! 23: # include <stddef.h> ! 24: #else ! 25: # ifdef HAVE_STDLIB_H ! 26: # include <stdlib.h> ! 27: # endif ! 28: #endif /* STDC_HEADERS */ ! 29: #ifdef HAVE_STRING_H ! 30: # include <string.h> ! 31: #endif /* HAVE_STRING_H */ ! 32: #ifdef HAVE_STRINGS_H ! 33: # include <strings.h> ! 34: #endif /* HAVE_STRINGS_H */ ! 35: ! 36: #include "sudoers.h" ! 37: ! 38: void ! 39: writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen) ! 40: { ! 41: char *indent = ""; ! 42: char *beg = line; ! 43: char *end; ! 44: ! 45: /* ! 46: * Print out line with word wrap around maxlen characters. ! 47: */ ! 48: beg = line; ! 49: while (len > maxlen) { ! 50: end = beg + maxlen; ! 51: while (end != beg && *end != ' ') ! 52: end--; ! 53: if (beg == end) { ! 54: /* Unable to find word break within maxlen, look beyond. */ ! 55: end = strchr(beg + maxlen, ' '); ! 56: if (end == NULL) ! 57: break; /* no word break */ ! 58: } ! 59: fprintf(fp, "%s%.*s\n", indent, (int)(end - beg), beg); ! 60: while (*end == ' ') ! 61: end++; ! 62: len -= (end - beg); ! 63: beg = end; ! 64: if (indent[0] == '\0') { ! 65: indent = LOG_INDENT; ! 66: maxlen -= sizeof(LOG_INDENT) - 1; ! 67: } ! 68: } ! 69: /* Print remainder, if any. */ ! 70: if (len) ! 71: fprintf(fp, "%s%s\n", indent, beg); ! 72: }