Exemple #1
0
static void
ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
{
	struct ptable *table;
	struct disk *dp, bsd;
	char line[80], size[6];

	dp = (struct disk *)arg;
	sprintf(line, "  %s%s: %s", dp->file ? "disk0": dp->name, pname,
	    parttype2str(part->type));
	humanize_number(size, sizeof(size),
	    (part->end - part->start + 1) * dp->sectorsize, "",
	    HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
	printf("%-*s%s\n", PWIDTH, line, size);
	if (part->type == PART_FREEBSD) {
		sprintf(line, "%s%s", dp->file ? "disk0": dp->name, pname);
		bsd.name = line;
		bsd.fd = dp->fd;
		bsd.file = 0;	/* to use dp->name in the next sprintf */
		bsd.offset = dp->offset + part->start;
		bsd.sectorsize = dp->sectorsize;
		bsd.mediasize = (part->end - part->start + 1) * dp->sectorsize;
		table = ptable_open(&bsd, bsd.mediasize / bsd.sectorsize,
		    bsd.sectorsize, diskread);
		if (table == NULL)
			return;
		ptable_iterate(table, &bsd, ptable_print);
		ptable_close(table);
	}
}
Exemple #2
0
static void
inspect_disk(struct disk *dp)
{
	struct ptable *table;

	table = ptable_open(dp, dp->mediasize / dp->sectorsize,
	    dp->sectorsize, diskread);
	if (table == NULL) {
		printf("ptable_open failed\n");
		return;
	}
	printf("Partition table detected: %s\n", ptable_type2str(table));
	ptable_iterate(table, dp, ptable_print);
	ptable_close(table);
}
/*
 * Inicia o skeleton da tabela.
 * O main() do servidor deve chamar este método antes de usar a
 * funço invoke(). O parâmetro n_lists define o número de listas a serem
 * usadas pela tabela mantida no servidor. O parâmetro filename corresponde ao
 * nome a ser usado nos ficheiros de log e checkpoint.
 * Retorna 0 (OK) ou -1 (erro, por exemplo OUT OF MEMORY).
 */
int table_skel_init(int n_lists, char *filename) {

    //verifica a validade dos parâmetros
    if(n_lists <= 0 || filename == NULL) {
        ERROR("table_skel: NULL filename or invalid nlists");
        return -1;
    }

    if(!sharedPtable) {
        //cria e verifica uma nova tabela
        struct table_t *sharedTable;
        if((sharedTable = table_create(n_lists)) == NULL) {
            ERROR("table_skel: table_create");
            return -1;
        }

        //cria e verifica um novo persistence_manager
        struct pmanager_t *sharedPmanager;
        if((sharedPmanager = pmanager_create(filename, MAX_LOG_SIZE, MODE_DSYNC)) == NULL) {
            ERROR("table_skel: pmanager_create");
            table_destroy(sharedTable);
            return -1;
        }

        //cria e verifica um persistent_table
        if((sharedPtable = ptable_open(sharedTable, sharedPmanager)) == NULL) {
            ERROR("table_skel: ptable_open");
            table_destroy(sharedTable);
            pmanager_destroy(sharedPmanager);
            return -1;
        }
		
		// Garbage collection
		ptable_collect_garbage(sharedPtable);
    }

    //em caso de sucesso
    return 0;

}