Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Jan 2015 19:12:47 +1100
From:      Peter Jeremy <peter@rulingia.com>
To:        freebsd-arm@freebsd.org
Subject:   Re: read(2) into some addresses doesn't return data on RPi
Message-ID:  <20150110081247.GF77914@server.rulingia.com>
In-Reply-To: <20150110060412.GE77914@server.rulingia.com>
References:  <20150110060412.GE77914@server.rulingia.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--0/kgSOzhNoDC5T3a
Content-Type: multipart/mixed; boundary="1ccMZA6j1vT5UqiK"
Content-Disposition: inline


--1ccMZA6j1vT5UqiK
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On 2015-Jan-10 17:04:12 +1100, Peter Jeremy <peter@rulingia.com> wrote:
>Running the attached program on /dev/mmcsd0s1 gave me the following result=
s:

Which got stripped (hence the signature failure).

--=20
Peter Jeremy

--1ccMZA6j1vT5UqiK
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="read_check.c"

#include <fcntl.h>
#include <unistd.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>

#define RLEN 512

static void check(int fd, int num, char *buf);
static void initbuf(char *buf);
static void checkbuf(char *buf, int num);

int main(int argc, char **argv) {
	char buf[65536];
	int fd, off;

	fd = open(argv[1], O_RDONLY);
	if (fd < 0)
		err(1, "open %s failed", argv[1]);

	for (off = 2*RLEN; off < sizeof(buf) - 2*RLEN; off += 8)
		check(fd, 1, buf + off);
}

static void check(int fd, int num, char *buf) {
	initbuf(buf);
	if (read(fd, buf, RLEN) != RLEN)
		err(1, "read%d failed", num);
	checkbuf(buf, num);
}

static void initbuf(char *buf) {
	int i;
	for (i = -RLEN; i < RLEN*2; i += sizeof(0ULL)) {
		*(unsigned long long *)(buf + i) = 0xfeedbabedeadbeefULL;
	}
}

#define FAIL (RLEN / sizeof(0ULL))

static void checkbuf(char *buf, int num) {
	int i, j;

	for (i = -RLEN, j = 0; i < 0; i += sizeof(0ULL)) {
		if (*(unsigned long long *)(buf + i) != 0xfeedbabedeadbeefULL)
			j++;
	}
	printf("read%d(%p) pre:%s", num, buf,
	       (j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");
	fprintf(stderr, "read%d(%p) pre:%s", num, buf,
	       (j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");

	for (i = 0, j = 0; i < RLEN; i += sizeof(0ULL)) {
		if (*(unsigned long long *)(buf + i) == 0xfeedbabedeadbeefULL)
			j++;
	}
	printf(" buf:%s", (j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");
	fprintf(stderr, " buf:%s",
		(j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");

	for (i = RLEN, j = 0; i < RLEN*2; i += sizeof(0ULL)) {
		if (*(unsigned long long *)(buf + i) != 0xfeedbabedeadbeefULL)
			j++;
	}
	printf(" post:%s\n", (j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");
	fprintf(stderr, " post:%s\n",
		(j == 0) ? "OK" : (j == FAIL) ? "FAIL" : "PFAIL");
	fflush(stdout);
	fsync(1);
	fflush(stderr);
	fsync(2);
}

--1ccMZA6j1vT5UqiK--

--0/kgSOzhNoDC5T3a
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQJ8BAEBCgBmBQJUsN7/XxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRFRUIyOTg2QzMwNjcxRTc0RTY1QzIyN0Ux
NkE1OTdBMEU0QTIwQjM0AAoJEBall6Dkogs0MakP/0aCQnb+Kk598SmSsNtONDMP
mgfQxWu+eJb4akxQ7mrSME1SorduNUqbI9iAywNZerJaMYy/rrjibbYwYc1cgO8N
By3UJKSnK7PoTnvoEl90PppXMcgJ5fgJcdS8nNjwaT/KIrEJbo0oKJxEJ5UrRLRZ
1hQ9KAZtfxIK3hgRi9wH1PefjLz6ZDyDOKzPgCa1PtFamR3CclIYOD5aFcaL7JUr
8a0krBI7mR885Ooc+Ze81kZOgTrffrZKcbIcYNcvd530+qlodCgnld7J54ovtMzt
UEhj2Qiqqr8k1Zhg5XNQL7rsfwX209gL4EsyKoQ9pjDxtt2wap1mfnftBFQM+OTi
0WRFPcTeBDEKnedPUWPVIW2zzYLmuQFY0QIF+a3tA425ICjF1vszjbfCDYaE86XP
evG3GNXDukdLhcQnQs7JhBGUc3kQdGlaMvXUTWm2SmYyWoO8caDT845nQqoDy8li
OcNmvnVAw0pQukthBaU2tf4QP08FmL8HA4CqGJruESiTXxLxrc0eyuzkGDG/L6aL
7tWDMd7lrmhVtvWgxSwoQjLniqpwKAUkficKM8vlYRoaRExVTXreCE02EXKTJUdQ
z8FuJOocvFLEBMlo93J8J95nikYiICvVyvY8vfcD5FT6hpD4EPA++hjrlTOTEMZt
Vuxo4IFbf443vsyNUtSw
=osM5
-----END PGP SIGNATURE-----

--0/kgSOzhNoDC5T3a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150110081247.GF77914>