testsetboot.c   [plain text]


/*
 * Copyright (c) 2011 Apple Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

// CFLAGS: -g -lbless -L. -o testsetboot -framework CoreFoundation -framework IOKit -framework DiskArbitration

#include <err.h>
#include <stdio.h>
#include <sysexits.h>

#include "bless.h"

int32_t
mylog(void *filterp, int32_t level, const char *str)
{
    if (*(int32_t*)filterp & level)
        printf("%s", str);

    return 0;
}

int main (int argc, char *argv[])
{
    char *bsdName;
    int result;
    int32_t loglevel=kBLLogLevelVerbose | kBLLogLevelNormal | kBLLogLevelError;
    BLContext bcon = { 0, mylog, &loglevel };

    if (argc != 2) {
        errx(EX_USAGE, "testsetboot <bsdName>");
    }

    bsdName = argv[1];
    result = BLSetEFIBootDevice(&bcon, bsdName);
    printf("BLSetEFIBootDevice(%s): %x\n", bsdName, result);

    exit (result == 0);
}