Merge "zipalign: use getopt"

This commit is contained in:
Jooyung Han
2021-07-19 22:53:21 +00:00
committed by Gerrit Code Review

View File

@@ -20,6 +20,7 @@
#include "ZipAlign.h" #include "ZipAlign.h"
#include <getopt.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -60,69 +61,53 @@ int main(int argc, char* const argv[])
int alignment; int alignment;
char* endp; char* endp;
if (argc < 4) { int opt;
wantUsage = true; while ((opt = getopt(argc, argv, "fcpvz")) != -1) {
goto bail; switch (opt) {
} case 'c':
check = true;
argc--; break;
argv++; case 'f':
force = true;
while (argc && argv[0][0] == '-') { break;
const char* cp = argv[0] +1; case 'v':
verbose = true;
while (*cp != '\0') { break;
switch (*cp) { case 'z':
case 'c': zopfli = true;
check = true; break;
break; case 'p':
case 'f': pageAlignSharedLibs = true;
force = true; break;
break; default:
case 'v': fprintf(stderr, "ERROR: unknown flag -%c\n", opt);
verbose = true; wantUsage = true;
break; goto bail;
case 'z':
zopfli = true;
break;
case 'p':
pageAlignSharedLibs = true;
break;
default:
fprintf(stderr, "ERROR: unknown flag -%c\n", *cp);
wantUsage = true;
goto bail;
}
cp++;
} }
argc--;
argv++;
} }
if (!((check && argc == 2) || (!check && argc == 3))) { if (!((check && (argc - optind) == 2) || (!check && (argc - optind) == 3))) {
wantUsage = true; wantUsage = true;
goto bail; goto bail;
} }
alignment = strtol(argv[0], &endp, 10); alignment = strtol(argv[optind], &endp, 10);
if (*endp != '\0' || alignment <= 0) { if (*endp != '\0' || alignment <= 0) {
fprintf(stderr, "Invalid value for alignment: %s\n", argv[0]); fprintf(stderr, "Invalid value for alignment: %s\n", argv[optind]);
wantUsage = true; wantUsage = true;
goto bail; goto bail;
} }
if (check) { if (check) {
/* check existing archive for correct alignment */ /* check existing archive for correct alignment */
result = verify(argv[1], alignment, verbose, pageAlignSharedLibs); result = verify(argv[optind + 1], alignment, verbose, pageAlignSharedLibs);
} else { } else {
/* create the new archive */ /* create the new archive */
result = process(argv[1], argv[2], alignment, force, zopfli, pageAlignSharedLibs); result = process(argv[optind + 1], argv[optind + 2], alignment, force, zopfli, pageAlignSharedLibs);
/* trust, but verify */ /* trust, but verify */
if (result == 0) { if (result == 0) {
result = verify(argv[2], alignment, verbose, pageAlignSharedLibs); result = verify(argv[optind + 2], alignment, verbose, pageAlignSharedLibs);
} }
} }