// Copyright 2016 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include #include #include #include #include #include #include #include #include const char* prog_name; void print_usage(void) { printf("Usage:\n"); printf("\n"); printf("%s save\n", prog_name); printf("save: Issue a TPM_SaveState command.\n"); } int cmd_save_state(int fd, int argc, const char** argv) { ssize_t ret = ioctl_tpm_save_state(fd); if (ret < 0) { printf("Error when saving state: (%zd)\n", ret); return 1; } return 0; } int main(int argc, const char** argv) { if (argc < 1) return 1; prog_name = argv[0]; if (argc < 2) { print_usage(); return 1; } const char* cmd = argv[1]; argc -= 2; argv += 2; int fd = open("/dev/class/tpm/000", O_RDWR); if (fd < 0) { printf("Error opening TPM device.\n"); return 1; } if (!strcmp("save", cmd)) { return cmd_save_state(fd, argc, argv); } else { printf("Unrecognized command %s.\n", cmd); print_usage(); return 1; } printf("We should never get here!.\n"); return 1; }