1/*
2 * Copyright 2005-2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <errno.h>
8#include <stdio.h>
9#include <stdlib.h>
10#include <string.h>
11
12#include "fs_shell_command.h"
13
14
15bool gUsesFifos = true;
16
17
18bool
19send_external_command(const char* command, int* result)
20{
21	// open the pipe to the FS shell
22	FILE* out = fdopen(4, "w");
23	if (out == NULL) {
24		fprintf(stderr, "Error: Failed to open command output: %s\n",
25			strerror(errno));
26		return false;
27	}
28
29	// open the pipe from the FS shell
30	FILE* in = fdopen(3, "r");
31	if (in == NULL) {
32		fprintf(stderr, "Error: Failed to open command reply input: %s\n",
33			strerror(errno));
34		return false;
35	}
36
37	// write the command
38	if (fputs(command, out) == EOF || fputc('\n', out) == EOF
39		|| fflush(out) == EOF) {
40		fprintf(stderr, "Error: Failed to write command to FS shell: %s\n",
41			strerror(errno));
42		return false;
43	}
44
45	// read the reply
46	char buffer[16];
47	if (fgets(buffer, sizeof(buffer), in) == NULL) {
48		fprintf(stderr, "Error: Failed to get command reply: %s\n",
49			strerror(errno));
50		return false;
51	}
52
53	// parse the number
54	char* end;
55	*result = strtol(buffer, &end, 10);
56	if (end == buffer) {
57		fprintf(stderr, "Error: Read non-number command reply from FS shell: "
58			"\"%s\"\n", buffer);
59		return false;
60	}
61
62	return true;
63}
64
65