You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.1 KiB
149 lines
3.1 KiB
/*
|
|
* Copyright (c) Cyril Hrubis chrubis@suse.cz 2009
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
|
* the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <sys/uio.h>
|
|
#include <inttypes.h>
|
|
#include <limits.h>
|
|
#include <assert.h>
|
|
#include "test.h"
|
|
#include "libftest.h"
|
|
|
|
/*
|
|
* Dump content of iov structure.
|
|
*/
|
|
void ft_dumpiov(struct iovec *iov)
|
|
{
|
|
char *buf, val;
|
|
int idx, nout, i;
|
|
|
|
tst_resm(TINFO, "\tBuf:");
|
|
|
|
nout = 0;
|
|
idx = 0;
|
|
buf = (char *)iov->iov_base;
|
|
val = *((char *)buf);
|
|
|
|
for (i = 0; (unsigned int)i < iov->iov_len; i++) {
|
|
|
|
if (buf[i] != val) {
|
|
if (i == idx + 1)
|
|
tst_resm(TINFO, "\t%" PRIx32 "x,",
|
|
buf[idx] & 0xff);
|
|
else
|
|
tst_resm(TINFO, "\t%d*%" PRIx32 "x, ", i - idx,
|
|
buf[idx] & 0xff);
|
|
idx = i;
|
|
++nout;
|
|
}
|
|
|
|
if (nout > 10) {
|
|
tst_resm(TINFO, "\t ... more");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (i == idx + 1)
|
|
tst_resm(TINFO, "\t%" PRIx32 "x", buf[idx] & 0xff);
|
|
else
|
|
tst_resm(TINFO, "\t%d*%" PRIx32 "x", i - idx, buf[idx]);
|
|
}
|
|
|
|
/*
|
|
* Dump bits string.
|
|
*/
|
|
void ft_dumpbits(void *bits, size_t size)
|
|
{
|
|
void *buf;
|
|
|
|
tst_resm(TINFO, "\tBits array:");
|
|
|
|
for (buf = bits; size > 0; --size, ++buf) {
|
|
tst_resm(TINFO, "\t%td:\t", 8 * (buf - bits));
|
|
if ((buf - bits) % 16 == 0) {
|
|
assert(0 < (buf - bits));
|
|
tst_resm(TINFO, "\t%td:\t", 8 * (buf - bits));
|
|
}
|
|
tst_resm(TINFO, "\t%02" PRIx32 "x ", *((char *)buf) & 0xff);
|
|
}
|
|
|
|
tst_resm(TINFO, "\t");
|
|
}
|
|
|
|
/*
|
|
* Do logical or of hold and bits (of size)
|
|
* fields and store result into hold field.
|
|
*/
|
|
void ft_orbits(char *hold, char *bits, int size)
|
|
{
|
|
while (size-- > 0)
|
|
*hold++ |= *bits++;
|
|
}
|
|
|
|
/*
|
|
* Dumps buffer in hexadecimal format.
|
|
*/
|
|
void ft_dumpbuf(char *buf, int csize)
|
|
{
|
|
char val;
|
|
int idx, nout, i;
|
|
|
|
tst_resm(TINFO, "\tBuf:");
|
|
nout = 0;
|
|
idx = 0;
|
|
val = buf[0];
|
|
|
|
for (i = 0; i < csize; i++) {
|
|
if (buf[i] != val) {
|
|
if (i == idx + 1)
|
|
tst_resm(TINFO, "\t%x, ", buf[idx] & 0xff);
|
|
else
|
|
tst_resm(TINFO, "\t%d*%x, ", i - idx,
|
|
buf[idx] & 0xff);
|
|
idx = i;
|
|
++nout;
|
|
}
|
|
if (nout > 10) {
|
|
tst_resm(TINFO, "\t ... more");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (i == idx + 1)
|
|
tst_resm(TINFO, "\t%x", buf[idx] & 0xff);
|
|
else
|
|
tst_resm(TINFO, "\t%d*%x", i - idx, buf[idx]);
|
|
}
|
|
|
|
/*
|
|
* Creates filename from path and numbers.
|
|
*
|
|
* TODO: name is big enough?
|
|
*/
|
|
void ft_mkname(char *name, char *dirname, int me, int idx)
|
|
{
|
|
char a, b;
|
|
|
|
a = 'A' + (me % 26);
|
|
b = 'a' + (idx % 26);
|
|
|
|
if (dirname[0] != '\0')
|
|
snprintf(name, PATH_MAX, "%s/%c%c", dirname, a, b);
|
|
else
|
|
snprintf(name, PATH_MAX, "%c%c", a, b);
|
|
}
|