/* Copyright 2021 The Chromium OS 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 "test_util.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "util.h"

#define MAX_PIPE_CAPACITY (4096)

FILE *write_to_pipe(const std::string& content)
{
	int pipefd[2];
	if (pipe(pipefd) == -1) {
		die("pipe(pipefd) failed");
	}

	size_t len = content.length();
	if (len > MAX_PIPE_CAPACITY)
		die("write_to_pipe cannot handle >4KB content.");
	size_t i = 0;
	unsigned int attempts = 0;
	ssize_t ret;
	while (i < len) {
		ret = write(pipefd[1], content.c_str() + i, len - i);
		if (ret == -1) {
			close(pipefd[0]);
			close(pipefd[1]);
			return NULL;
		}

		/* If we write 0 bytes three times in a row, fail. */
		if (ret == 0) {
			if (++attempts >= 3) {
				close(pipefd[0]);
				close(pipefd[1]);
				warn("write() returned 0 three times in a row");
				return NULL;
			}
			continue;
		}

		attempts = 0;
		i += (size_t)ret;
	}

	close(pipefd[1]);
	return fdopen(pipefd[0], "r");
}

std::string source_path(const std::string& file) {
	std::string srcdir = getenv("SRC") ? : ".";
	return srcdir + "/" + file;
}
