summaryrefslogtreecommitdiffstats
path: root/fastbootd/other/gptedit.c
diff options
context:
space:
mode:
Diffstat (limited to 'fastbootd/other/gptedit.c')
-rw-r--r--fastbootd/other/gptedit.c304
1 files changed, 0 insertions, 304 deletions
diff --git a/fastbootd/other/gptedit.c b/fastbootd/other/gptedit.c
deleted file mode 100644
index 2b65a01..0000000
--- a/fastbootd/other/gptedit.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2009-2013, Google 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 Google, Inc. 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 THE
- * COPYRIGHT OWNER OR CONTRIBUTORS 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 <getopt.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <cutils/klog.h>
-
-#include "commands/partitions.h"
-#include "debug.h"
-
-unsigned int debug_level = DEBUG;
-//TODO: add tool to generate config file
-
-void usage() {
- fprintf(stderr,
- "usage: test_gpt [ <option> ] <file>\n"
- "\n"
- "options:\n"
- " -p print partitions\n"
- " -c print config file\n"
- " -a adds new partition\n"
- " -d deletes partition (-o needed)\n"
- "\n"
- " -n name@startlba,endlba new partition detail\n"
- " -o old partition name\n"
- " -t type guid\n"
- " -g partition guid\n"
- " -l gpt_location specyfies gpt secto\n"
- );
-
-}
-
-void printGPT(struct GPT_entry_table *table);
-void addGPT(struct GPT_entry_table *table, const char *arg, const char *guid, const char *tguid);
-void deleteGPT(struct GPT_entry_table *table, const char *name);
-void configPrintGPT(struct GPT_entry_table *table);
-
-int main(int argc, char *argv[]) {
- int print_cmd = 0;
- int config_cmd = 0;
- int add_cmd = 0;
- int del_cmd = 0;
- int sync_cmd = 0;
- int c;
- const char *new_partition = NULL;
- const char *old_partition = NULL;
- const char *type_guid = NULL;
- const char *partition_guid = NULL;
- unsigned gpt_location = 1;
-
- klog_init();
- klog_set_level(6);
-
- const struct option longopts[] = {
- {"print", no_argument, 0, 'p'},
- {"config-print", no_argument, 0, 'c'},
- {"add", no_argument, 0, 'a'},
- {"del", no_argument, 0, 'd'},
- {"new", required_argument, 0, 'n'},
- {"old", required_argument, 0, 'o'},
- {"type", required_argument, 0, 't'},
- {"sync", required_argument, 0, 's'},
- {"guid", required_argument, 0, 'g'},
- {"location", required_argument, 0, 'l'},
- {0, 0, 0, 0}
- };
-
- while (1) {
- c = getopt_long(argc, argv, "pcadt:g:n:o:sl:", longopts, NULL);
- /* Alphabetical cases */
- if (c < 0)
- break;
- switch (c) {
- case 'p':
- print_cmd = 1;
- break;
- case 'c':
- config_cmd = 1;
- break;
- case 'a':
- add_cmd = 1;
- break;
- case 'd':
- del_cmd = 1;
- break;
- case 'n':
- new_partition = optarg;
- break;
- case 'o':
- old_partition = optarg;
- break;
- case 't':
- type_guid = optarg;
- case 'g':
- partition_guid = optarg;
- break;
- case 's':
- sync_cmd = 1;
- break;
- case 'l':
- gpt_location = strtoul(optarg, NULL, 10);
- fprintf(stderr, "Got offset as %d", gpt_location);
- break;
- case '?':
- return 1;
- default:
- abort();
- }
- }
-
- argc -= optind;
- argv += optind;
-
- if (argc < 1) {
- usage();
- return 1;
- }
-
- const char *path = argv[0];
- struct GPT_entry_table *table = GPT_get_device(path, gpt_location);
- if (table == NULL) {
- fprintf(stderr, "unable to get GPT table from %s\n", path);
- return 1;
- }
-
- if (add_cmd)
- addGPT(table, new_partition, partition_guid, type_guid);
- if (del_cmd)
- deleteGPT(table, old_partition);
- if (print_cmd)
- printGPT(table);
- if (config_cmd)
- configPrintGPT(table);
- if (sync_cmd)
- GPT_sync(table);
-
- GPT_release_device(table);
-
- return 0;
-}
-
-void printGPT(struct GPT_entry_table *table) {
- struct GPT_entry_raw *entry = table->entries;
- unsigned n, m;
- char name[GPT_NAMELEN + 1];
-
- printf("ptn start block end block name\n");
- printf("---- ------------- -------------\n");
-
- for (n = 0; n < table->header->entries_count; n++, entry++) {
- if (entry->type_guid[0] == 0)
- continue;
- for (m = 0; m < GPT_NAMELEN; m++) {
- name[m] = entry->name[m] & 127;
- }
- name[m] = 0;
- printf("#%03d %13"PRId64" %13"PRId64" %s\n",
- n + 1, entry->first_lba, entry->last_lba, name);
- }
-}
-
-void configPrintGPT(struct GPT_entry_table *table) {
- struct GPT_entry_raw *entry = table->entries;
- unsigned n, m;
- char name[GPT_NAMELEN + 1];
- char temp_guid[17];
- temp_guid[16] = 0;
-
- printf("header_lba %"PRId64"\n", table->header->current_lba);
- printf("backup_lba %"PRId64"\n", table->header->backup_lba);
- printf("first_lba %"PRId64"\n", table->header->first_usable_lba);
- printf("last_lba %"PRId64"\n", table->header->last_usable_lba);
- printf("entries_lba %"PRId64"\n", table->header->entries_lba);
- snprintf(temp_guid, 17, "%s", table->header->disk_guid);
- printf("guid \"%s\"", temp_guid);
-
- printf("\npartitions {\n");
-
- for (n = 0; n < table->header->entries_count; n++, entry++) {
- uint64_t size = entry->last_lba - entry->first_lba + 1;
-
- if (entry->type_guid[0] == 0)
- continue;
- for (m = 0; m < GPT_NAMELEN; m++) {
- name[m] = entry->name[m] & 127;
- }
- name[m] = 0;
-
- printf(" %s {\n", name);
- snprintf(temp_guid, 17, "%s", entry->partition_guid);
- printf(" guid \"%s\"\n", temp_guid);
- printf(" first_lba %"PRId64"\n", entry->first_lba);
- printf(" partition_size %"PRId64"\n", size);
- if (entry->flags & GPT_FLAG_SYSTEM)
- printf(" system\n");
- if (entry->flags & GPT_FLAG_BOOTABLE)
- printf(" bootable\n");
- if (entry->flags & GPT_FLAG_READONLY)
- printf(" readonly\n");
- if (entry->flags & GPT_FLAG_DOAUTOMOUNT)
- printf(" automount\n");
- printf(" }\n\n");
- }
- printf("}\n");
-}
-
-void addGPT(struct GPT_entry_table *table, const char *str , const char *guid, const char *tguid) {
- char *c, *c2;
- char *arg = malloc(strlen(str));
- char *name = arg;
- unsigned start, end;
- strcpy(arg, str);
- if (guid == NULL || tguid == NULL) {
- fprintf(stderr, "Type guid and partion guid needed");
- free(arg);
- return;
- }
-
- c = strchr(arg, '@');
-
- if (c == NULL) {
- fprintf(stderr, "Wrong entry format");
- free(arg);
- return;
- }
-
- *c++ = '\0';
-
- c2 = strchr(c, ',');
-
- if (c2 == NULL) {
- fprintf(stderr, "Wrong entry format");
- free(arg);
- return;
- }
-
- start = strtoul(c, NULL, 10);
- *c2++ = '\0';
- end = strtoul(c2, NULL, 10);
-
- struct GPT_entry_raw data;
- strncpy((char *)data.partition_guid, guid, 15);
- data.partition_guid[15] = '\0';
- strncpy((char *)data.type_guid, tguid, 15);
- data.type_guid[15] = '\0';
- GPT_to_UTF16(data.name, name, GPT_NAMELEN);
- data.first_lba = start;
- data.last_lba = end;
-
- fprintf(stderr, "Adding (%d,%d) %s as, [%s, %s]", start, end, name, (char *) data.type_guid, (char *) data.partition_guid);
- GPT_add_entry(table, &data);
- free(arg);
-}
-
-void deleteGPT(struct GPT_entry_table *table, const char *name) {
- struct GPT_entry_raw *entry;
-
- if (name == NULL) {
- fprintf(stderr, "Need partition name");
- return;
- }
-
- entry = GPT_get_pointer_by_name(table, name);
-
- if (!entry) {
- fprintf(stderr, "Unable to find partition: %s", name);
- return;
- }
- GPT_delete_entry(table, entry);
-}
-