Home | History | Annotate | Line # | Download | only in ps
      1 /*	$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $	*/
      2 
      3 #include <sys/cdefs.h>
      4 __RCSID("$NetBSD: fmt.c,v 1.21 2007/12/12 22:55:43 lukem Exp $");
      5 
      6 #include <kvm.h>
      7 #include <stdio.h>
      8 #include <stdlib.h>
      9 #include <string.h>
     10 #include <unistd.h>
     11 #include <vis.h>
     12 #include <sys/time.h>
     13 #include <sys/resource.h>
     14 #include "ps.h"
     15 
     16 void
     17 fmt_puts(char *s, int *leftp)
     18 {
     19 	static char *v = 0;
     20 	static int maxlen = 0;
     21 	char *nv;
     22 	int len, nlen;
     23 
     24 	if (*leftp == 0)
     25 		return;
     26 	len = strlen(s) * 4 + 1;
     27 	if (len > maxlen) {
     28 		if (maxlen == 0)
     29 			nlen = getpagesize();
     30 		else
     31 			nlen = maxlen;
     32 		while (len > nlen)
     33 			nlen *= 2;
     34 		nv = realloc(v, nlen);
     35 		if (nv == 0)
     36 			return;
     37 		v = nv;
     38 		maxlen = nlen;
     39 	}
     40 	len = strvis(v, s, VIS_TAB | VIS_NL | VIS_CSTYLE);
     41 	if (*leftp != -1) {
     42 		if (len > *leftp) {
     43 			v[*leftp] = '\0';
     44 			*leftp = 0;
     45 		} else
     46 			*leftp -= len;
     47 	}
     48 	(void)printf("%s", v);
     49 }
     50 
     51 void
     52 fmt_putc(int c, int *leftp)
     53 {
     54 
     55 	if (*leftp == 0)
     56 		return;
     57 	if (*leftp != -1)
     58 		*leftp -= 1;
     59 	putchar(c);
     60 }
     61