Fail with a proper error message if input file is not found.

Previously, if the input file was missing, the symupload tool on Mac
would happily process, try to parse it (calling a method on nil) and
fail when trying to create the payload to send to the server as one
of the method raised a NSInvalidArgumentException when receiving a
nil value.

Change to code to instead check the file for existence which makes it
easier to understand what is happening when part of the build system
is misconfigured and invoke symupload without first creating the symbol
file.

BUG=449348

Change-Id: Icc0f08958114da4be0cbbd7a7c2aeef905bc0db1
Reviewed-on: https://chromium-review.googlesource.com/367260
Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
Sylvain Defresne 2016-08-09 12:43:39 -07:00
parent 0fc6d0c8df
commit 600ec35c5b

View file

@ -38,6 +38,8 @@
// cpu: the CPU that the module was built for (x86 or ppc)
// symbol_file: the contents of the breakpad-format symbol file
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <Foundation/Foundation.h>
@ -165,6 +167,25 @@ SetupOptions(int argc, const char *argv[], Options *options) {
exit(1);
}
int fd = open(argv[optind], O_RDONLY);
if (fd < 0) {
fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
exit(1);
}
struct stat statbuf;
if (fstat(fd, &statbuf) < 0) {
fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno));
close(fd);
exit(1);
}
close(fd);
if (!S_ISREG(statbuf.st_mode)) {
fprintf(stderr, "%s: %s: not a regular file\n", argv[0], argv[optind]);
exit(1);
}
options->symbolsPath = [NSString stringWithUTF8String:argv[optind]];
options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]];
}