Plan 9 from Bell Labs’s /usr/web/sources/contrib/blstuart/θfs/sunos.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/*
 * Copyright (c) 2013, Coraid, Inc.
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of Coraid nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL CORAID BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include <u.h>
#include <libc.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/vtoc.h>
#include <thread.h>
#include <fcall.h>
#include <9p.h>
#include "dat.h"

uvlong
devsize(char *dev)
{
	struct stat stbuf;
	struct extvtoc vtoc;
	int fd, n;

	if(stat(dev, &stbuf) == 0)
		return stbuf.st_size;
	fd = open(dev, OREAD);
	if(fd <= 0)
		return ~0ULL;
	n = read_extvtoc(fd, &vtoc);
	close(fd);
	if(n < 0)
		return ~0ULL;
	return vtoc.v_sectorsz * vtoc.v_part[n].p_size;
}

int
threadpid(int)
{
	return getpid();
}

static void
startcons(void *x)
{
	int *pfd;
	char *ns, *path;
	int acfd, lcfd;
	char adir[40], ldir[40];

	pfd = x;
	ns = getns();
	path = smprint("unix!%s/thetafscons", ns);
	acfd = announce(path, adir);
	if(acfd < 0)
		threadexits(nil);
	while(1) {
		lcfd = listen(adir, ldir);
		if(lcfd < 0)
			break;
		pfd[0] = lcfd;
		pfd[1] = lcfd;
		docons(nil);
	}
	threadexits(nil);
}

void
conspost(int cfd[], int pfd[])
{
	threadcreate(startcons, pfd, 8192);
	if(post9pservice(cfd[0], "thetafsctl", nil) < 0)
		fprint(2, "post9pservice failed:%r\n");
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].