/* * gpt.c: * * Copyright (c) 2007 James McKenzie , * All rights reserved. * */ static char rcsid[] = "$Id: gpt.c,v 1.10 2007/10/16 10:37:15 james Exp $"; /* * $Log: gpt.c,v $ * Revision 1.10 2007/10/16 10:37:15 james * *** empty log message *** * * Revision 1.9 2007/10/16 10:36:11 james * *** empty log message *** * * Revision 1.8 2007/10/16 10:20:57 james * *** empty log message *** * * Revision 1.7 2007/10/16 10:07:49 james * *** empty log message *** * * Revision 1.6 2007/09/10 11:23:08 root * *** empty log message *** * * Revision 1.4 2007/09/09 22:30:05 root * *** empty log message *** * * Revision 1.3 2007/09/09 22:29:50 root * *** empty log message *** * * Revision 1.2 2007/09/08 18:21:23 root * *** empty log message *** * * Revision 1.1 2007/09/08 16:49:37 root * *** empty log message *** * */ #include "project.h" void usage(void) { fprintf(stderr, "Usage:\n" "gpt -h show help\n" "gpt -d disk-device -l list partitions\n" "gpt -d disk-device -s print the address of frist usable sector\n" " on the disk\n" " the last usable sector on the disk\n" "gpt -d disk-device -e print the address of the sector after the\n" " the last addressable sector on the disk\n" "gpt -d disk-device -u print the address of the last sector\n" " usable in a partition\n" "gpt -d disk-device -f n print the lba of sector immediately after\n" " the end of parition n\n" "gpt -d disk-device -n write a new blank parition table to the disk\n" " the end of parition n\n" "gpt -d disk-device -a n name type start end\n" " set partiton n, type can either be a named\n" " type or a hexadecimal GUID\n" ); exit(1); } int main (int argc, char *argv[]) { DISK *d=NULL; GPT_headers h; GPT_entry e; int c; int n; int aflag=0; uint64_t start_lba,end_lba; extern char *optarg; extern int optind; while ((c=getopt(argc,argv,"d:hlsef:una"))!=EOF) { switch(c) { case 'd': d=disk_open(optarg); if (!d) { fprintf(stderr,"failed to open disk %s\n",optarg); perror("open"); return -1; } break; case 'e': if (!d) usage(); h=headers_get(d); printf("%lld\n",(long long) h.header.last_usable_lba); return 0; case 's': if (!d) usage(); h=headers_get(d); printf("%lld\n",(long long) h.header.first_usable_lba); return 0; case 'u': if (!d) usage(); h=headers_get(d); printf("%lld\n",(long long) h.header.last_usable_lba); return 0; case 'f': h=headers_get(d); n=atoi(optarg); e=entry_read(d,&h.header,n); printf("%lld\n",e.end); return 0; case 'n': if (!d) usage(); new(d); return 0; case 'a': aflag++; break; case 'l': if (!d) usage(); show(d); return 0; default: usage(); } } if (!aflag) usage(); if (!d) usage(); if ((argc-optind)!=5) usage(); start_lba=strtoll(argv[optind+3],NULL,0); end_lba=strtoll(argv[optind+4],NULL,0); //printf("%lld %lld\n",(long long)start_lba,(long long) end_lba); n=atoi(argv[optind]); modify(d,n,argv[optind+1] ,argv[optind+2],start_lba,end_lba); show(d); return 0; }