subprocess.h
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 // Author: kenton@google.com (Kenton Varda)
32 
33 #ifndef GOOGLE_PROTOBUF_COMPILER_SUBPROCESS_H__
34 #define GOOGLE_PROTOBUF_COMPILER_SUBPROCESS_H__
35 
36 #ifdef _WIN32
37 #define WIN32_LEAN_AND_MEAN // right...
38 #include <windows.h>
39 #else // _WIN32
40 #include <sys/types.h>
41 #include <unistd.h>
42 #endif // !_WIN32
44 
45 #include <string>
46 
47 #include <google/protobuf/port_def.inc>
48 
49 namespace google {
50 namespace protobuf {
51 
52 class Message;
53 
54 namespace compiler {
55 
56 // Utility class for launching sub-processes.
57 class PROTOC_EXPORT Subprocess {
58  public:
59  Subprocess();
60  ~Subprocess();
61 
62  enum SearchMode {
63  SEARCH_PATH, // Use PATH environment variable.
64  EXACT_NAME // Program is an exact file name; don't use the PATH.
65  };
66 
67  // Start the subprocess. Currently we don't provide a way to specify
68  // arguments as protoc plugins don't have any.
69  void Start(const std::string& program, SearchMode search_mode);
70 
71  // Serialize the input message and pipe it to the subprocess's stdin, then
72  // close the pipe. Meanwhile, read from the subprocess's stdout and parse
73  // the data into *output. All this is done carefully to avoid deadlocks.
74  // Returns true if successful. On any sort of error, returns false and sets
75  // *error to a description of the problem.
76  bool Communicate(const Message& input, Message* output, std::string* error);
77 
78 #ifdef _WIN32
79  // Given an error code, returns a human-readable error message. This is
80  // defined here so that CommandLineInterface can share it.
81  static std::string Win32ErrorMessage(DWORD error_code);
82 #endif
83 
84  private:
85 #ifdef _WIN32
86  DWORD process_start_error_;
87  HANDLE child_handle_;
88 
89  // The file handles for our end of the child's pipes. We close each and
90  // set it to NULL when no longer needed.
91  HANDLE child_stdin_;
92  HANDLE child_stdout_;
93 
94 #else // _WIN32
95  pid_t child_pid_;
96 
97  // The file descriptors for our end of the child's pipes. We close each and
98  // set it to -1 when no longer needed.
101 
102 #endif // !_WIN32
103 };
104 
105 } // namespace compiler
106 } // namespace protobuf
107 } // namespace google
108 
109 #include <google/protobuf/port_undef.inc>
110 
111 #endif // GOOGLE_PROTOBUF_COMPILER_SUBPROCESS_H__
google::protobuf::compiler::Subprocess::SEARCH_PATH
@ SEARCH_PATH
Definition: subprocess.h:63
input
std::string input
Definition: tokenizer_unittest.cc:197
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
google::protobuf::compiler::Subprocess::child_pid_
pid_t child_pid_
Definition: subprocess.h:95
error
Definition: cJSON.c:88
gmock_test_utils.Subprocess
Subprocess
Definition: gmock_test_utils.py:96
google::protobuf::compiler::Subprocess::SearchMode
SearchMode
Definition: subprocess.h:62
google::protobuf::compiler::Subprocess::child_stdin_
int child_stdin_
Definition: subprocess.h:99
google::protobuf::Message
Definition: src/google/protobuf/message.h:205
common.h
HANDLE
void * HANDLE
Definition: wepoll.c:70
program
GLbitfield GLuint program
Definition: glcorearb.h:4044
google::protobuf::compiler::Subprocess::child_stdout_
int child_stdout_
Definition: subprocess.h:100
output
const upb_json_parsermethod const upb_symtab upb_sink * output
Definition: ruby/ext/google/protobuf_c/upb.h:10503
compiler
Definition: plugin.pb.cc:22
google
Definition: data_proto2_to_proto3_util.h:11
google::protobuf::compiler::Subprocess
Definition: subprocess.h:57


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:59