summaryrefslogtreecommitdiff
path: root/com32/chain
diff options
context:
space:
mode:
authorMichal Soltys <soltys@ziu.info>2010-09-30 23:21:11 +0200
committerMichal Soltys <soltys@ziu.info>2010-10-08 12:40:51 +0200
commitf167db559451bfdca148a712ba256d1c616b7af6 (patch)
tree41b15de2ab6be9c19d9cfa911a8f365cbc8fe52d /com32/chain
parent17919c262e19656409d42f5c88c6d4473d8eb99e (diff)
downloadsyslinux-f167db559451bfdca148a712ba256d1c616b7af6.tar.gz
com32/chain: Add unhide and unhideall options
It could be useful to be able to simply unhide partitions. This short patch adds such functionality. Signed-off-by: Michal Soltys <soltys@ziu.info>
Diffstat (limited to 'com32/chain')
-rw-r--r--com32/chain/chain.c14
-rw-r--r--com32/chain/options.c11
2 files changed, 14 insertions, 11 deletions
diff --git a/com32/chain/chain.c b/com32/chain/chain.c
index cb619fb2..ae46fec0 100644
--- a/com32/chain/chain.c
+++ b/com32/chain/chain.c
@@ -349,7 +349,7 @@ static int pem_sethide(struct part_iter *miter, struct part_iter *iter)
if ((t <= 0x1f) && ((mask >> (t & ~0x10u)) & 1)) {
/* It's a hideable partition type */
- if (miter->index == iter->index)
+ if (miter->index == iter->index || opt.hide & 4)
t &= (uint8_t)(~0x10u); /* unhide */
else
t |= 0x10u; /* hide */
@@ -398,22 +398,22 @@ static int pentry_mangle(struct part_iter *miter)
int ridx;
if (miter->type != typedos) {
- error("Partition entry mangling ('hide[all]', 'mbrchs')\n"
+ error("Partition entry mangling ('[un]hide[all]', 'mbrchs')\n"
"is meaningful only for legacy partition scheme.");
goto bail;
}
- if ((miter->index < 1 || miter->index > 4) && opt.hide == 1)
- error("WARNING: option 'hide' specified with a non-primary partition.\n");
+ if ((miter->index < 1 || miter->index > 4) && opt.hide & 1)
+ error("WARNING: option '[un]hide' specified with a non-primary partition.\n");
if (!(iter = pi_begin(&miter->di, 1))) /* turn on stepall */
goto bail;
- while (!pi_next(&iter) && !werr && (opt.hide == 2 || opt.mbrchs)) {
+ while (!pi_next(&iter) && !werr && (opt.hide & 2 || opt.mbrchs)) {
ridx = iter->rawindex;
dp = (struct disk_dos_part_entry *)iter->record;
if (dp->ostype) {
- if (opt.hide == 2 || (opt.hide == 1 && ridx <= 4)) {
+ if (opt.hide & 2 || (opt.hide & 1 && ridx <= 4)) {
wb |= pem_sethide(miter, iter);
}
if (opt.mbrchs) {
@@ -436,7 +436,7 @@ bail:
pi_del(&iter);
if (werr)
error("WARNING: failed to write E/MBR for partition\n"
- "mangling options ('hide[all]', 'mbrchs').\n");
+ "mangling options ('[un]hide[all]', 'mbrchs').\n");
return 0;
}
diff --git a/com32/chain/options.c b/com32/chain/options.c
index 14c96d7b..2c3d0ff8 100644
--- a/com32/chain/options.c
+++ b/com32/chain/options.c
@@ -225,13 +225,16 @@ int parse_args(int argc, char *argv[])
opt.swap = true;
} else if (!strcmp(argv[i], "noswap")) {
opt.swap = false;
- } else if (!strcmp(argv[i], "nohide") ||
- !strcmp(argv[i], "nohideall")) {
+ } else if (!strcmp(argv[i], "nohide")) {
opt.hide = 0;
} else if (!strcmp(argv[i], "hide")) {
- opt.hide = 1;
+ opt.hide = 1; /* 001b */
} else if (!strcmp(argv[i], "hideall")) {
- opt.hide = 2;
+ opt.hide = 2; /* 010b */
+ } else if (!strcmp(argv[i], "unhide")) {
+ opt.hide = 5; /* 101b */
+ } else if (!strcmp(argv[i], "unhideall")) {
+ opt.hide = 6; /* 110b */
} else if (!strcmp(argv[i], "setbpb")) {
opt.setbpb = true;
} else if (!strcmp(argv[i], "nosetbpb")) {