blob: cd7bdf567e545a99feae361c9a80a6997b0588df [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
#ifndef TCTI_CMD_H
#define TCTI_CMD_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <limits.h>
#include "tcti-common.h"
#include "util/io.h"
#define TCTI_CMD_NAME "tcti-cmd"
#define TCTI_CMD_DESCRIPTION "TCTI module for using a process to send and receive data."
#define TCTI_CMD_HELP "string used as command, passed to " \
"execl(\"/bin/sh\", \"sh\", \"-c\", command, (char *) 0);."
#define TCTI_CMD_MAGIC 0xf05b04cd9f02728dULL
typedef struct TSS2_TCTI_CMD_CONTEXT TSS2_TCTI_CMD_CONTEXT;
struct TSS2_TCTI_CMD_CONTEXT {
TSS2_TCTI_COMMON_CONTEXT common;
/* stdin of the subprocess */
FILE *sink;
/* stdout of the subprocess */
FILE *source;
pid_t child_pid;
};
/*
* create some wrapper functions so we don't have to mock syscalls with wrap.
* This can lead to issues with things other than this code making said syscalls,
* like code coverage. We make them weak functions so we can overide them at link
* time with wrapped definitions from the unit test main code.
*/
#ifdef UNIT
#define WEAK __attribute__((weak))
WEAK int tcti_cmd_pipe (int pipefd[2]);
WEAK int tcti_cmd_fork (void);
WEAK FILE *tcti_cmd_fdopen (int fd, const char *mode);
WEAK int tcti_cmd_sigprocmask (int how, const sigset_t *set, sigset_t *oldset);
WEAK size_t tcti_cmd_fwrite (const void *ptr, size_t size, size_t nmemb,
FILE *stream);
WEAK size_t tcti_cmd_fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
WEAK int tcti_cmd_ferror (FILE *stream);
#endif
#endif /* TCTI_CMD_H */