1 /* utils.c --- Auxilliary help functions.
2 * Copyright (C) 2002, 2003, 2004, 2006, 2007 Simon Josefsson
4 * This file is part of Shishi.
6 * Shishi is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * Shishi is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Shishi; if not, see http://www.gnu.org/licenses or write
18 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
19 * Floor, Boston, MA 02110-1301, USA
29 _shishi_escapeprint (const char *str
, int len
)
34 for (i
= 0; i
< len
; i
++)
35 if ((str
[i
] >= 'A' && str
[i
] <= 'Z') ||
36 (str
[i
] >= 'a' && str
[i
] <= 'z') ||
37 (str
[i
] >= '0' && str
[i
] <= '9') || str
[i
] == '.')
38 printf ("%c", str
[i
] & 0xFF);
40 printf ("\\x%02x", str
[i
] & 0xFF);
41 printf ("' (length %d bytes)\n", len
);
45 _shishi_hexprint (const char *str
, int len
)
50 for (i
= 0; i
< len
; i
++)
52 printf ("%02x ", str
[i
] & 0xFF);
55 if ((i
+ 1) % 16 == 0 && i
+ 1 < len
)
62 _shishi_binprint (const char *str
, int len
)
67 for (i
= 0; i
< len
; i
++)
69 printf ("%d%d%d%d%d%d%d%d ",
70 str
[i
] & 0x80 ? 1 : 0,
71 str
[i
] & 0x40 ? 1 : 0,
72 str
[i
] & 0x20 ? 1 : 0,
73 str
[i
] & 0x10 ? 1 : 0,
74 str
[i
] & 0x08 ? 1 : 0,
75 str
[i
] & 0x04 ? 1 : 0,
76 str
[i
] & 0x02 ? 1 : 0, str
[i
] & 0x01 ? 1 : 0);
79 if ((i
+ 1) % 6 == 0 && i
+ 1 < len
)
86 _shishi_bin7print (const char *str
, int len
)
91 for (i
= 0; i
< len
; i
++)
93 printf ("%d%d%d%d%d%d%d ",
94 str
[i
] & 0x40 ? 1 : 0,
95 str
[i
] & 0x20 ? 1 : 0,
96 str
[i
] & 0x10 ? 1 : 0,
97 str
[i
] & 0x08 ? 1 : 0,
98 str
[i
] & 0x04 ? 1 : 0,
99 str
[i
] & 0x02 ? 1 : 0, str
[i
] & 0x01 ? 1 : 0);
100 if ((i
+ 1) % 3 == 0)
102 if ((i
+ 1) % 6 == 0 && i
+ 1 < len
)
114 if (now
== (time_t) - 1)
124 shishi_get_date (const char *p
, const time_t * now
)
126 struct timespec nowspec
= { 0, 0 };
127 struct timespec thenspec
;
130 nowspec
.tv_sec
= *now
;
132 nowspec
.tv_sec
= time (NULL
);
134 if (!get_date (&thenspec
, p
, &nowspec
))
136 thenspec
.tv_sec
= (time_t) - 1;
137 thenspec
.tv_nsec
= 0;
140 return thenspec
.tv_sec
;
143 /* If non-NULL, call this function when memory is exhausted. */
144 void (*shishi_alloc_fail_function
) (void) = 0;
147 shishi_xalloc_die (void)
149 if (shishi_alloc_fail_function
)
150 (*shishi_alloc_fail_function
) ();
152 fprintf (stderr
, _("%s: Memory allocation failed\n"), PACKAGE
);