Esempio n. 1
0
static void
partition(int fd, int bsize, Header *h)
{
	ulong nblock, ndata, nlabel;
	ulong lpb;

	if(bsize % 512 != 0)
		sysfatal("block size must be a multiple of 512 bytes");
	if(bsize > VtMaxLumpSize)
		sysfatal("block size must be less than %d", VtMaxLumpSize);

	memset(h, 0, sizeof(*h));
	h->blockSize = bsize;

	lpb = bsize/LabelSize;

	nblock = fdsize(fd)/bsize;

	/* sanity check */
	if(nblock < (HeaderOffset*10)/bsize)
		vtFatal("file too small");

	h->super = (HeaderOffset + 2*bsize)/bsize;
	h->label = h->super + 1;
	ndata = ((u64int)lpb)*(nblock - h->label)/(lpb+1);
	nlabel = (ndata + lpb - 1)/lpb;
	h->data = h->label + nlabel;
	h->end = h->data + ndata;

}
Esempio n. 2
0
int main(int argc, char *argv[]) {
    
    if (argc < 2) {
        fprintf(stderr, "usage: %s file.ldif\n", argv[0]);
        return 1;
    }

    char *ldif_fn = argv[1];
	int fd = open(ldif_fn, O_RDONLY);
	if (fd < 0) {
		fprintf(stderr, "Unable to open %s: %s\n", ldif_fn, strerror(errno));
		exit(1);
	}

	size_t ldif_len = fdsize(fd);
	if (ldif_len == 0) {
		puts("0");
		goto close;
	}

	void *ldif_mm = mmap(0, ldif_len, PROT_READ, MAP_FILE | MAP_NOCACHE | MAP_SHARED, fd, 0);
	if (MAP_FAILED == ldif_mm) {
		fprintf(stderr, "Unable to memory map %s: %s\n", ldif_fn, strerror(errno));
		exit(2);
	}

    // size_t num_newlines = count_newlines(ldif_mm, ldif_len);
    // printf("%llu\n", (unsigned long long)num_newlines);
    dump_cns(ldif_mm, ldif_len);

	munmap(ldif_mm, ldif_len);
	
	close: close(fd);
}