BLSetOFLabelForDevice.c [plain text]
#include <sys/types.h>
#include <CoreFoundation/CoreFoundation.h>
#include "bless.h"
#include "bless_private.h"
int BLSetOFLabelForDevice(BLContextPtr context,
const char * device,
const CFDataRef label)
{
int status;
BLUpdateBooterFileSpec array[2];
bzero(array, sizeof(array));
array[0].version = 0;
array[0].reqType = kBL_OSTYPE_PPC_TYPE_OFLABEL;
array[0].reqCreator = kBL_OSTYPE_PPC_CREATOR_CHRP;
array[0].reqFilename = NULL;
array[0].payloadData = label;
array[0].postType = 0; array[0].postCreator = 0; array[0].foundFile = 0;
array[0].updatedFile = 0;
array[1].version = 0;
array[1].reqType = kBL_OSTYPE_PPC_TYPE_OFLABEL_PLACEHOLDER;
array[1].reqCreator = kBL_OSTYPE_PPC_CREATOR_CHRP;
array[1].reqFilename = NULL;
array[1].payloadData = label;
array[1].postType = kBL_OSTYPE_PPC_TYPE_OFLABEL;
array[1].postCreator = 0; array[1].foundFile = 0;
array[1].updatedFile = 0;
status = BLUpdateBooter(context, device, array, 2);
if(status) {
contextprintf(context, kBLLogLevelError, "Error enumerating HFS+ volume\n");
return 1;
}
if(!(array[0].foundFile || array[1].foundFile)) {
contextprintf(context, kBLLogLevelError, "No pre-existing OF label found in HFS+ volume\n");
return 1;
}
if(!(array[0].updatedFile || array[1].updatedFile)) {
contextprintf(context, kBLLogLevelError, "OF label was not updated\n");
return 2;
}
return 0;
}