1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 568079: Format C/C++ code

Added a new C/C++ formatter profile called "Unmanaged profile 'CDT'"
(name stolen from the Java formatter) that is basically K&R with the
tweak of maxium line width set to 120 (same width as for .java files).

Added enforcement of the formatter during build.

libspawner.so/jnilib have differences because the re-formatting changes
line numbers and therefore the __LINE__ macro expands to a different
value.

Change-Id: Id3a0619cb31640c7817dc684c72139f90cab0fc6
Signed-off-by: Torbjörn Svensson <azoff@svenskalinuxforeningen.se>
This commit is contained in:
Torbjörn Svensson 2020-10-21 19:59:07 +02:00 committed by Jonah Graham
parent 0429be17e1
commit c5a53bb7fe
55 changed files with 2025 additions and 1530 deletions

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName.linux.aarch64 Bundle-Name: %fragmentName.linux.aarch64
Bundle-SymbolicName: org.eclipse.cdt.core.linux.aarch64;singleton:=true Bundle-SymbolicName: org.eclipse.cdt.core.linux.aarch64;singleton:=true
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)" Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)"
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.linux.aarch64</artifactId> <artifactId>org.eclipse.cdt.core.linux.aarch64</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -3,7 +3,7 @@ Bundle-SymbolicName: org.eclipse.cdt.core.linux.ppc64le;singleton:=true
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Localization: plugin Bundle-Localization: plugin
Bundle-Name: %fragmentName.linux.ppc64le Bundle-Name: %fragmentName.linux.ppc64le
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)" Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)"
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Eclipse-PlatformFilter: (&(osgi.os=linux)(osgi.arch=ppc64le)) Eclipse-PlatformFilter: (&(osgi.os=linux)(osgi.arch=ppc64le))

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.linux.ppc64le</artifactId> <artifactId>org.eclipse.cdt.core.linux.ppc64le</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName.linux.x86_64 Bundle-Name: %fragmentName.linux.x86_64
Bundle-SymbolicName: org.eclipse.cdt.core.linux.x86_64;singleton:=true Bundle-SymbolicName: org.eclipse.cdt.core.linux.x86_64;singleton:=true
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)" Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)"
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.linux.x86_64</artifactId> <artifactId>org.eclipse.cdt.core.linux.x86_64</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName.macosx Bundle-Name: %fragmentName.macosx
Bundle-SymbolicName: org.eclipse.cdt.core.macosx; singleton:=true Bundle-SymbolicName: org.eclipse.cdt.core.macosx; singleton:=true
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)" Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)"
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.macosx</artifactId> <artifactId>org.eclipse.cdt.core.macosx</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -30,5 +30,6 @@
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View file

@ -0,0 +1,189 @@
eclipse.preferences.version=1
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_lambda_expression=20
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_linkage_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
org.eclipse.cdt.core.formatter.comment_formatter_off_tag=@formatter\:off
org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_block_comment=true
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.format_header_comment=true
org.eclipse.cdt.core.formatter.format_line_comment=true
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_linkage=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_label_compare_to_statements=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=4
org.eclipse.cdt.core.formatter.insert_new_line_after_colon_in_constructor_initializer_list=insert
org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_linkage_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_ref_qualifier_in_structured_binding=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=120
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=tab
org.eclipse.cdt.core.formatter.tabulation.size=4
org.eclipse.cdt.core.formatter.use_comment_formatter_tag=true
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

View file

@ -0,0 +1,3 @@
eclipse.preferences.version=1
formatter_profile=_Unmanaged profile 'CDT'
formatter_settings_version=1

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %pluginName Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.core.native;singleton:=true Bundle-SymbolicName: org.eclipse.cdt.core.native;singleton:=true
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Bundle-Activator: org.eclipse.cdt.internal.core.natives.CNativePlugin Bundle-Activator: org.eclipse.cdt.internal.core.natives.CNativePlugin
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -19,14 +19,9 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
extern pid_t exec0(const char *path, char *const argv[], extern pid_t exec0(const char *path, char *const argv[], char *const envp[], const char *dirpath, int channels[3]);
char *const envp[], const char *dirpath,
int channels[3]);
extern pid_t exec_pty(const char *path, char *const argv[], char *const envp[], const char *dirpath, int channels[3],
extern pid_t exec_pty(const char *path, char *const argv[], const char *pts_name, int fdm, int console);
char *const envp[], const char *dirpath,
int channels[3], const char *pts_name, int fdm,
int console);
extern int wait0(pid_t pid); extern int wait0(pid_t pid);

View file

@ -26,12 +26,10 @@
#include <termios.h> #include <termios.h>
/* from pfind.c */ /* from pfind.c */
extern char *pfind(const char *name, char * const envp[]); extern char* pfind(const char *name, char *const envp[]);
pid_t pid_t exec_pty(const char *path, char *const argv[], char *const envp[], const char *dirpath, int channels[3],
exec_pty(const char *path, char *const argv[], char *const envp[], const char *pts_name, int fdm, int console) {
const char *dirpath, int channels[3], const char *pts_name, int fdm, int console)
{
int pipe2[2]; int pipe2[2];
pid_t childpid; pid_t childpid;
char *full_path; char *full_path;
@ -60,7 +58,8 @@ exec_pty(const char *path, char *const argv[], char *const envp[],
childpid = fork(); childpid = fork();
if (childpid < 0) { if (childpid < 0) {
fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__,
__LINE__, strerror(errno));
free(full_path); free(full_path);
return -1; return -1;
} else if (childpid == 0) { /* child */ } else if (childpid == 0) { /* child */

View file

@ -23,12 +23,9 @@
#include <stdlib.h> #include <stdlib.h>
/* from pfind.c */ /* from pfind.c */
extern char *pfind(const char *name, char * const envp[]); extern char* pfind(const char *name, char *const envp[]);
pid_t pid_t exec0(const char *path, char *const argv[], char *const envp[], const char *dirpath, int channels[3]) {
exec0(const char *path, char *const argv[], char *const envp[],
const char *dirpath, int channels[3])
{
int pipe0[2], pipe1[2], pipe2[2]; int pipe0[2], pipe1[2], pipe2[2];
pid_t childpid; pid_t childpid;
char *full_path; char *full_path;
@ -48,8 +45,8 @@ exec0(const char *path, char *const argv[], char *const envp[],
*/ */
if (channels != NULL) { if (channels != NULL) {
if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) { if (pipe(pipe0) < 0 || pipe(pipe1) < 0 || pipe(pipe2) < 0) {
fprintf(stderr, "%s(%d): returning due to error.\n", fprintf(stderr, "%s(%d): returning due to error.\n", __FUNCTION__,
__FUNCTION__, __LINE__); __LINE__);
free(full_path); free(full_path);
return -1; return -1;
} }
@ -58,8 +55,8 @@ exec0(const char *path, char *const argv[], char *const envp[],
childpid = fork(); childpid = fork();
if (childpid < 0) { if (childpid < 0) {
fprintf(stderr, "%s(%d): returning due to error: %s\n", fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__,
__FUNCTION__, __LINE__, strerror(errno)); __LINE__, strerror(errno));
free(full_path); free(full_path);
return -1; return -1;
} else if (childpid == 0) { /* child */ } else if (childpid == 0) { /* child */
@ -135,9 +132,7 @@ exec0(const char *path, char *const argv[], char *const envp[],
return -1; /*NOT REACHED */ return -1; /*NOT REACHED */
} }
int wait0(pid_t pid) {
int wait0(pid_t pid)
{
int status; int status;
int val = -1; int val = -1;

View file

@ -21,8 +21,7 @@
/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerInputStream */ /* Header for class _org_eclipse_cdt_utils_spawner_SpawnerInputStream */
/* Header for class _org_eclipse_cdt_utils_spawner_SpawnerOutputStream */ /* Header for class _org_eclipse_cdt_utils_spawner_SpawnerOutputStream */
static void ThrowByName(JNIEnv *env, const char *name, const char *msg) static void ThrowByName(JNIEnv *env, const char *name, const char *msg) {
{
jclass cls = (*env)->FindClass(env, name); jclass cls = (*env)->FindClass(env, name);
if (cls != 0) /* Otherwise an exception has already been thrown */ if (cls != 0) /* Otherwise an exception has already been thrown */
@ -32,8 +31,7 @@ static void ThrowByName(JNIEnv *env, const char *name, const char *msg)
(*env)->DeleteLocalRef(env, cls); (*env)->DeleteLocalRef(env, cls);
} }
static int channelToFileDesc(JNIEnv * env, jobject channel) static int channelToFileDesc(JNIEnv *env, jobject channel) {
{
if (channel == 0) { if (channel == 0) {
ThrowByName(env, "java/io/IOException", "Invalid channel object"); ThrowByName(env, "java/io/IOException", "Invalid channel object");
return -1; return -1;
@ -56,12 +54,8 @@ static int channelToFileDesc(JNIEnv * env, jobject channel)
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env, Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv *env, jobject jobj, jobject channel, jbyteArray buf,
jobject jobj, jint buf_len) {
jobject channel,
jbyteArray buf,
jint buf_len)
{
int fd; int fd;
int status; int status;
jbyte *data; jbyte *data;
@ -71,7 +65,7 @@ Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env,
data_len = buf_len; data_len = buf_len;
fd = channelToFileDesc(env, channel); fd = channelToFileDesc(env, channel);
status = read( fd, data, data_len ); status = read(fd, data, data_len);
(*env)->ReleaseByteArrayElements(env, buf, data, 0); (*env)->ReleaseByteArrayElements(env, buf, data, 0);
if (status == 0) { if (status == 0) {
@ -90,23 +84,15 @@ Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv * env,
return status; return status;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv * env, Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv *env, jobject jobj, jobject channel) {
jobject jobj,
jobject channel)
{
int fd = channelToFileDesc(env, channel); int fd = channelToFileDesc(env, channel);
return close(fd); return close(fd);
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv * env, Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv *env, jobject jobj, jobject channel,
jobject jobj, jbyteArray buf, jint buf_len) {
jobject channel,
jbyteArray buf,
jint buf_len)
{
int status; int status;
int fd; int fd;
jbyte *data; jbyte *data;
@ -122,12 +108,8 @@ Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv * env,
return status; return status;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv * env, Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv *env, jobject jobj, jobject channel) {
jobject jobj,
jobject channel)
{
int fd = channelToFileDesc(env, channel); int fd = channelToFileDesc(env, channel);
return close(fd); return close(fd);
} }

View file

@ -35,15 +35,13 @@
* Alain Magloire. * Alain Magloire.
*/ */
int ptym_open (char *pts_name); int ptym_open(char *pts_name);
int ptys_open (int fdm, const char * pts_name); int ptys_open(int fdm, const char *pts_name);
void set_noecho(int fd); void set_noecho(int fd);
int int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) {
openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp)
{
char line[20]; char line[20];
line[0]=0; line[0] = 0;
*amaster = ptym_open(line); *amaster = ptym_open(line);
if (*amaster < 0) if (*amaster < 0)
return -1; return -1;
@ -67,12 +65,10 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct win
return 0; return 0;
} }
void void set_noecho(int fd) {
set_noecho(int fd)
{
struct termios stermios; struct termios stermios;
if (tcgetattr(fd, &stermios) < 0) { if (tcgetattr(fd, &stermios) < 0) {
return ; return;
} }
/* turn off echo */ /* turn off echo */
@ -85,9 +81,7 @@ set_noecho(int fd)
tcsetattr(fd, TCSANOW, &stermios); tcsetattr(fd, TCSANOW, &stermios);
} }
int int ptym_open(char *pts_name) {
ptym_open(char * pts_name)
{
int fdm; int fdm;
char *ptr; char *ptr;
@ -109,16 +103,14 @@ ptym_open(char * pts_name)
} }
ptr = ptsname(fdm); ptr = ptsname(fdm);
if (ptr == NULL) { /* get slave's name */ if (ptr == NULL) { /* get slave's name */
close (fdm); close(fdm);
return -4; return -4;
} }
strcpy(pts_name, ptr); /* return name of slave */ strcpy(pts_name, ptr); /* return name of slave */
return fdm; /* return fd of master */ return fdm; /* return fd of master */
} }
int int ptys_open(int fdm, const char *pts_name) {
ptys_open(int fdm, const char * pts_name)
{
int fds; int fds;
/* following should allocate controlling terminal */ /* following should allocate controlling terminal */
fds = open(pts_name, O_RDWR); fds = open(pts_name, O_RDWR);

View file

@ -15,7 +15,7 @@
*******************************************************************************/ *******************************************************************************/
#ifndef _OPENPTY_H #ifndef _OPENPTY_H
#define _OPENPTY_H #define _OPENPTY_H
int ptym_open (char *pts_name); int ptym_open(char *pts_name);
int ptys_open (int fdm, const char * pts_name); int ptys_open(int fdm, const char *pts_name);
void set_noecho(int fd); void set_noecho(int fd);
#endif #endif

View file

@ -32,15 +32,14 @@
#define PATH_DEF "PATH=" #define PATH_DEF "PATH="
const int path_def_len = 5; /* strlen(PATH_DEF); */ const int path_def_len = 5; /* strlen(PATH_DEF); */
char * path_val(char * const envp[]) char* path_val(char *const envp[]) {
{
int i; int i;
if (envp == NULL || envp[0] == NULL) if (envp == NULL || envp[0] == NULL)
return getenv("PATH" ); return getenv("PATH");
for(i = 0; envp[i] != NULL; i++){ for (i = 0; envp[i] != NULL; i++) {
char* p = envp[i]; char *p = envp[i];
if(!strncmp(PATH_DEF, p, path_def_len)){ if (!strncmp(PATH_DEF, p, path_def_len)) {
return p + path_def_len; return p + path_def_len;
} }
} }
@ -48,12 +47,11 @@ char * path_val(char * const envp[])
return NULL; return NULL;
} }
char * pfind(const char *name, char * const envp[]) char* pfind(const char *name, char *const envp[]) {
{
char *tok; char *tok;
char *sp; char *sp;
char *path; char *path;
char fullpath[PATH_MAX+1]; char fullpath[PATH_MAX + 1];
struct stat sb; struct stat sb;
/* Sanity check. */ /* Sanity check. */
@ -71,7 +69,7 @@ char * pfind(const char *name, char * const envp[])
} }
/* Search in the PATH environment. */ /* Search in the PATH environment. */
path = path_val( envp ); path = path_val(envp);
if (path == NULL || strlen(path) <= 0) { if (path == NULL || strlen(path) <= 0) {
fprintf(stderr, "Unable to get $PATH.\n"); fprintf(stderr, "Unable to get $PATH.\n");
@ -92,7 +90,7 @@ char * pfind(const char *name, char * const envp[])
} }
} }
tok = strtok_r( NULL, ":", &sp ); tok = strtok_r(NULL, ":", &sp);
} }
free(path); free(path);

View file

@ -22,7 +22,7 @@
* Signature: ()I * Signature: ()I
*/ */
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboolean console) { Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *env, jobject jobj, jboolean console) {
jfieldID fid; /* Store the field ID */ jfieldID fid; /* Store the field ID */
jstring jstr = NULL; jstring jstr = NULL;
int master = -1; int master = -1;
@ -46,7 +46,7 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboole
if (fid == NULL) { if (fid == NULL) {
return NULL; return NULL;
} }
(*env)->SetIntField(env, jobj, fid, (jint)master); (*env)->SetIntField(env, jobj, fid, (jint) master);
/* Create a new String for the slave. */ /* Create a new String for the slave. */
jstr = (*env)->NewStringUTF(env, line); jstr = (*env)->NewStringUTF(env, line);
@ -54,9 +54,8 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboole
return jstr; return jstr;
} }
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size(JNIEnv *env, jobject jobj, jint fdm,
(JNIEnv *env, jobject jobj, jint fdm, jint width, jint height) jint width, jint height) {
{
#ifdef TIOCSWINSZ #ifdef TIOCSWINSZ
struct winsize win; struct winsize win;

View file

@ -26,12 +26,7 @@
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv * env, Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv *env, jobject jobj, jint jfd, jbyteArray buf, jint buf_len) {
jobject jobj,
jint jfd,
jbyteArray buf,
jint buf_len)
{
int fd; int fd;
int status; int status;
jbyte *data; jbyte *data;
@ -41,7 +36,7 @@ Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv * env,
data_len = buf_len; data_len = buf_len;
fd = jfd; fd = jfd;
status = read( fd, data, data_len ); status = read(fd, data, data_len);
(*env)->ReleaseByteArrayElements(env, buf, data, 0); (*env)->ReleaseByteArrayElements(env, buf, data, 0);
if (status == 0) { if (status == 0) {
@ -64,17 +59,13 @@ Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv * env,
return status; return status;
} }
/* /*
* Class: org_eclipse_cdt_utils_pty_PTYInputStream * Class: org_eclipse_cdt_utils_pty_PTYInputStream
* Method: close0 * Method: close0
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv * env, Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv *env, jobject jobj, jint fd) {
jobject jobj,
jint fd)
{
return close(fd); return close(fd);
} }
@ -84,12 +75,7 @@ Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv * env,
* Signature: (II)I * Signature: (II)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv * env, Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv *env, jobject jobj, jint jfd, jbyteArray buf, jint buf_len) {
jobject jobj,
jint jfd,
jbyteArray buf,
jint buf_len)
{
int status; int status;
int fd; int fd;
jbyte *data; jbyte *data;
@ -105,16 +91,12 @@ Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv * env,
return status; return status;
} }
/* /*
* Class: org_eclipse_cdt_utils_pty_PTYOutputStream * Class: org_eclipse_cdt_utils_pty_PTYOutputStream
* Method: close0 * Method: close0
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv * env, Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv *env, jobject jobj, jint fd) {
jobject jobj,
jint fd)
{
return close(fd); return close(fd);
} }

View file

@ -23,15 +23,12 @@
#include "exec0.h" #include "exec0.h"
#include <org_eclipse_cdt_utils_spawner_Spawner.h> #include <org_eclipse_cdt_utils_spawner_Spawner.h>
#define DEBUGIT 0 #define DEBUGIT 0
/* /*
* Header for class org_eclipse_cdt_utils_spawner_Spawner * Header for class org_eclipse_cdt_utils_spawner_Spawner
*/ */
#if DEBUGIT #if DEBUGIT
static void print_array(char **c_array) static void print_array(char **c_array)
{ {
@ -49,9 +46,7 @@ static void print_array(char **c_array)
} }
#endif #endif
static char** alloc_c_array(JNIEnv *env, jobjectArray j_array) {
static char **alloc_c_array(JNIEnv * env, jobjectArray j_array)
{
int i; int i;
jint c_array_size = (*env)->GetArrayLength(env, j_array); jint c_array_size = (*env)->GetArrayLength(env, j_array);
char **c_array = calloc(c_array_size + 1, sizeof(*c_array)); char **c_array = calloc(c_array_size + 1, sizeof(*c_array));
@ -60,10 +55,9 @@ static char **alloc_c_array(JNIEnv * env, jobjectArray j_array)
return NULL; return NULL;
for (i = 0; i < c_array_size; i++) { for (i = 0; i < c_array_size; i++) {
jstring j_str = jstring j_str = (jstring)(*env)->GetObjectArrayElement(env, j_array, i);
(jstring) (*env)->GetObjectArrayElement(env, j_array, i);
const char *c_str = (*env)->GetStringUTFChars(env, j_str, NULL); const char *c_str = (*env)->GetStringUTFChars(env, j_str, NULL);
c_array[i] = (char *) strdup(c_str); c_array[i] = (char*) strdup(c_str);
(*env)->ReleaseStringUTFChars(env, j_str, c_str); (*env)->ReleaseStringUTFChars(env, j_str, c_str);
(*env)->DeleteLocalRef(env, j_str); (*env)->DeleteLocalRef(env, j_str);
} }
@ -71,9 +65,7 @@ static char **alloc_c_array(JNIEnv * env, jobjectArray j_array)
return c_array; return c_array;
} }
static void free_c_array(char **c_array) {
static void free_c_array(char **c_array)
{
if (c_array) { if (c_array) {
char **p = c_array; char **p = c_array;
for (; *p; p++) { for (; *p; p++) {
@ -85,11 +77,8 @@ static void free_c_array(char **c_array)
} }
} }
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2(JNIEnv *env, jobject jobj, jobjectArray jcmd,
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2 jobjectArray jenv, jstring jdir, jobjectArray jchannels, jstring jslaveName, jint masterFD, jboolean console) {
(JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv, jstring jdir, jobjectArray jchannels,
jstring jslaveName, jint masterFD, jboolean console)
{
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL); const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL);
char **cmd = NULL; char **cmd = NULL;
@ -128,9 +117,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
(*env)->SetObjectArrayElement(env, jchannels, i, chan); (*env)->SetObjectArrayElement(env, jchannels, i, chan);
} }
bail_out: (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
bail_out:
(*env)->ReleaseStringUTFChars(env, jdir, dirpath);
(*env)->ReleaseStringUTFChars(env, jslaveName, pts_name); (*env)->ReleaseStringUTFChars(env, jslaveName, pts_name);
if (cmd) if (cmd)
free_c_array(cmd); free_c_array(cmd);
@ -139,13 +126,9 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2
return pid; return pid;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj, Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv,
jobjectArray jcmd, jstring jdir) {
jobjectArray jenv,
jstring jdir)
{
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
char **cmd = NULL; char **cmd = NULL;
char **envp = NULL; char **envp = NULL;
@ -171,8 +154,7 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj,
if (pid < 0) if (pid < 0)
goto bail_out; goto bail_out;
bail_out: bail_out: (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
(*env)->ReleaseStringUTFChars(env, jdir, dirpath);
if (cmd) if (cmd)
free_c_array(cmd); free_c_array(cmd);
if (envp) if (envp)
@ -181,12 +163,8 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj,
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj, Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv,
jobjectArray jcmd, jstring jdir, jobjectArray jchannels) {
jobjectArray jenv,
jstring jdir,
jobjectArray jchannels)
{
const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL);
char **cmd = NULL; char **cmd = NULL;
char **envp = NULL; char **envp = NULL;
@ -230,8 +208,7 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj,
(*env)->SetObjectArrayElement(env, jchannels, i, chan); (*env)->SetObjectArrayElement(env, jchannels, i, chan);
} }
bail_out: bail_out: (*env)->ReleaseStringUTFChars(env, jdir, dirpath);
(*env)->ReleaseStringUTFChars(env, jdir, dirpath);
if (cmd) if (cmd)
free_c_array(cmd); free_c_array(cmd);
if (envp) if (envp)
@ -245,43 +222,41 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj,
* Signature: (II)I * Signature: (II)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_Spawner_raise(JNIEnv * env, jobject jobj, Java_org_eclipse_cdt_utils_spawner_Spawner_raise(JNIEnv *env, jobject jobj, jint pid, jint sig) {
jint pid, jint sig)
{
int status = -1; int status = -1;
switch (sig) { switch (sig) {
case 0: /* NOOP */ case 0: /* NOOP */
status = killpg(pid, 0); status = killpg(pid, 0);
if(status == -1) { if (status == -1) {
status = kill(pid, 0); status = kill(pid, 0);
} }
break; break;
case 2: /* INTERRUPT */ case 2: /* INTERRUPT */
status = killpg(pid, SIGINT); status = killpg(pid, SIGINT);
if(status == -1) { if (status == -1) {
status = kill(pid, SIGINT); status = kill(pid, SIGINT);
} }
break; break;
case 9: /* KILL */ case 9: /* KILL */
status = killpg(pid, SIGKILL); status = killpg(pid, SIGKILL);
if(status == -1) { if (status == -1) {
status = kill(pid, SIGKILL); status = kill(pid, SIGKILL);
} }
break; break;
case 15: /* TERM */ case 15: /* TERM */
status = killpg(pid, SIGTERM); status = killpg(pid, SIGTERM);
if(status == -1) { if (status == -1) {
status = kill(pid, SIGTERM); status = kill(pid, SIGTERM);
} }
break; break;
default: default:
status = killpg(pid, sig); /* WHAT ?? */ status = killpg(pid, sig); /* WHAT ?? */
if(status == -1) { if (status == -1) {
status = kill(pid, sig); /* WHAT ?? */ status = kill(pid, sig); /* WHAT ?? */
} }
break; break;
@ -290,16 +265,12 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_raise(JNIEnv * env, jobject jobj,
return status; return status;
} }
/* /*
* Class: org_eclipse_cdt_utils_spawner_Spawner * Class: org_eclipse_cdt_utils_spawner_Spawner
* Method: waitFor * Method: waitFor
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor(JNIEnv * env, Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor(JNIEnv *env, jobject jobj, jint pid) {
jobject jobj, jint pid)
{
return wait0(pid); return wait0(pid);
} }

View file

@ -47,7 +47,7 @@ typedef struct winpty_s winpty_t;
* *
* This function creates a new agent process and connects to it. * This function creates a new agent process and connects to it.
*/ */
WINPTY_API winpty_t *winpty_open(int cols, int rows); WINPTY_API winpty_t* winpty_open(int cols, int rows);
/* /*
* Start a child process. Either (but not both) of appname and cmdline may * Start a child process. Either (but not both) of appname and cmdline may
@ -62,10 +62,7 @@ WINPTY_API winpty_t *winpty_open(int cols, int rows);
* *
* Returns 0 on success or a Win32 error code on failure. * Returns 0 on success or a Win32 error code on failure.
*/ */
WINPTY_API int winpty_start_process(winpty_t *pc, WINPTY_API int winpty_start_process(winpty_t *pc, const wchar_t *appname, const wchar_t *cmdline, const wchar_t *cwd,
const wchar_t *appname,
const wchar_t *cmdline,
const wchar_t *cwd,
const wchar_t *env); const wchar_t *env);
/* /*

View file

@ -29,8 +29,7 @@ void ThrowByName(JNIEnv *env, const char *name, const char *msg);
#define BUFF_SIZE (1024) #define BUFF_SIZE (1024)
static HANDLE channelToHandle(JNIEnv * env, jobject channel) static HANDLE channelToHandle(JNIEnv *env, jobject channel) {
{
if (channel == 0) { if (channel == 0) {
ThrowByName(env, "java/io/IOException", "Invalid channel object"); ThrowByName(env, "java/io/IOException", "Invalid channel object");
return NULL; return NULL;
@ -49,16 +48,15 @@ static HANDLE channelToHandle(JNIEnv * env, jobject channel)
} }
jlong handle = (*env)->GetLongField(env, channel, fid); jlong handle = (*env)->GetLongField(env, channel, fid);
return (HANDLE)handle; return (HANDLE) handle;
} }
/* Inaccessible static: skipBuffer */ /* Inaccessible static: skipBuffer */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0(JNIEnv *env, jobject proc,
(JNIEnv * env, jobject proc, jobject channel, jbyteArray buf, jint len) jobject channel, jbyteArray buf, jint len) {
{
jbyte tmpBuf[BUFF_SIZE]; jbyte tmpBuf[BUFF_SIZE];
int nBuffOffset = 0; int nBuffOffset = 0;
HANDLE handle = channelToHandle(env, channel); HANDLE handle = channelToHandle(env, channel);
@ -73,23 +71,15 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea
TRUE, // initial state = signaled TRUE, // initial state = signaled
NULL); // unnamed event object NULL); // unnamed event object
if(NULL == overlapped.hEvent) { if (NULL == overlapped.hEvent) {
char * lpMsgBuf; char *lpMsgBuf;
FormatMessage( FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
FORMAT_MESSAGE_ALLOCATE_BUFFER | GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
FORMAT_MESSAGE_FROM_SYSTEM | (wchar_t*) &lpMsgBuf, 0, NULL);
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(wchar_t *) &lpMsgBuf,
0,
NULL
);
ThrowByName(env, "java/io/IOException", lpMsgBuf); ThrowByName(env, "java/io/IOException", lpMsgBuf);
// Free the buffer. // Free the buffer.
LocalFree( lpMsgBuf ); LocalFree(lpMsgBuf);
} }
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
@ -99,55 +89,41 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea
#endif #endif
#endif #endif
while(len > nBuffOffset) while (len > nBuffOffset) {
{
DWORD nNumberOfBytesToRead = min(len - nBuffOffset, BUFF_SIZE); DWORD nNumberOfBytesToRead = min(len - nBuffOffset, BUFF_SIZE);
DWORD nNumberOfBytesRead; DWORD nNumberOfBytesRead;
if(0 == ReadFile(handle, tmpBuf, nNumberOfBytesToRead, &nNumberOfBytesRead, &overlapped )) if (0 == ReadFile(handle, tmpBuf, nNumberOfBytesToRead, &nNumberOfBytesRead, &overlapped)) {
{
int err = GetLastError(); int err = GetLastError();
if(err == ERROR_IO_PENDING) if (err == ERROR_IO_PENDING) {
{
// asynchronous i/o is still in progress // asynchronous i/o is still in progress
// check on the results of the asynchronous read // check on the results of the asynchronous read
if(GetOverlappedResult(handle, &overlapped, if (GetOverlappedResult(handle, &overlapped, &nNumberOfBytesRead, TRUE))
&nNumberOfBytesRead, TRUE))
err = 0; err = 0;
// if there was a problem ... // if there was a problem ...
else else
err = GetLastError(); err = GetLastError();
} }
if(err == ERROR_BROKEN_PIPE) // Pipe was closed if (err == ERROR_BROKEN_PIPE) // Pipe was closed
break; break;
if(err != 0) if (err != 0) {
{ char *lpMsgBuf;
char * lpMsgBuf;
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
_stprintf(buffer, _T("Read failed - %i, error %i\n"), fd, err); _stprintf(buffer, _T("Read failed - %i, error %i\n"), fd, err);
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
#endif #endif
if(err != ERROR_MORE_DATA) // Otherwise error means just that there are more data if (err != ERROR_MORE_DATA) // Otherwise error means just that there are more data
{ // than buffer can accept { // than buffer can accept
FormatMessage( FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
FORMAT_MESSAGE_FROM_SYSTEM | NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
FORMAT_MESSAGE_IGNORE_INSERTS, (wchar_t*) &lpMsgBuf, 0, NULL);
NULL,
err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(wchar_t *) &lpMsgBuf,
0,
NULL
);
ThrowByName(env, "java/io/IOException", lpMsgBuf); ThrowByName(env, "java/io/IOException", lpMsgBuf);
LocalFree( lpMsgBuf ); LocalFree(lpMsgBuf);
nBuffOffset = 0; nBuffOffset = 0;
break; break;
} } else {
else
{
// buffer overflow? // buffer overflow?
// according to msdn this happens in message read mode only // according to msdn this happens in message read mode only
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
@ -159,19 +135,17 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea
} }
} }
} }
if(nNumberOfBytesRead > 0) if (nNumberOfBytesRead > 0)
(*env)->SetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesRead, tmpBuf); (*env)->SetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesRead, tmpBuf);
else else
break; break;
nBuffOffset += nNumberOfBytesRead; nBuffOffset += nNumberOfBytesRead;
if(nNumberOfBytesRead != nNumberOfBytesToRead) if (nNumberOfBytesRead != nNumberOfBytesToRead)
break; break;
else else {
{
// Is there data left in the pipe? // Is there data left in the pipe?
DWORD bytesAvailable = 0; DWORD bytesAvailable = 0;
if (!PeekNamedPipe(handle, NULL, 0, NULL, &bytesAvailable, NULL) if (!PeekNamedPipe(handle, NULL, 0, NULL, &bytesAvailable, NULL) || bytesAvailable == 0)
|| bytesAvailable == 0)
// No bytes left // No bytes left
break; break;
} }
@ -190,9 +164,8 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0(JNIEnv *env, jobject proc,
(JNIEnv * env, jobject proc, jobject channel) jobject channel) {
{
int rc; int rc;
HANDLE handle = channelToHandle(env, channel); HANDLE handle = channelToHandle(env, channel);
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
@ -211,9 +184,8 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_clo
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_available0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_available0(JNIEnv *env, jobject proc,
(JNIEnv * env, jobject proc, jobject channel) jobject channel) {
{
DWORD nAvail = 0; DWORD nAvail = 0;
HANDLE handle = channelToHandle(env, channel); HANDLE handle = channelToHandle(env, channel);
@ -227,35 +199,24 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_ava
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0(JNIEnv *env, jobject proc,
(JNIEnv * env, jobject proc, jobject channel, jbyteArray buf, jint len) jobject channel, jbyteArray buf, jint len) {
{
jbyte tmpBuf[BUFF_SIZE]; jbyte tmpBuf[BUFF_SIZE];
int nBuffOffset = 0; int nBuffOffset = 0;
HANDLE handle = channelToHandle(env, channel); HANDLE handle = channelToHandle(env, channel);
while(len > nBuffOffset) while (len > nBuffOffset) {
{
DWORD nNumberOfBytesToWrite = min(len - nBuffOffset, BUFF_SIZE); DWORD nNumberOfBytesToWrite = min(len - nBuffOffset, BUFF_SIZE);
DWORD nNumberOfBytesWritten; DWORD nNumberOfBytesWritten;
(*env)->GetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesToWrite, tmpBuf); (*env)->GetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesToWrite, tmpBuf);
if(0 == WriteFile(handle, tmpBuf, nNumberOfBytesToWrite, &nNumberOfBytesWritten, NULL)) if (0 == WriteFile(handle, tmpBuf, nNumberOfBytesToWrite, &nNumberOfBytesWritten, NULL)) {
{ char *lpMsgBuf;
char * lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
FormatMessage( NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
FORMAT_MESSAGE_ALLOCATE_BUFFER | (wchar_t*) &lpMsgBuf, 0, NULL);
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(wchar_t *) &lpMsgBuf,
0,
NULL
);
ThrowByName(env, "java/io/IOException", lpMsgBuf); ThrowByName(env, "java/io/IOException", lpMsgBuf);
LocalFree( lpMsgBuf ); LocalFree(lpMsgBuf);
return 0; return 0;
} }
nBuffOffset += nNumberOfBytesWritten; nBuffOffset += nNumberOfBytesWritten;
@ -266,9 +227,8 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_wr
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0(JNIEnv *env, jobject proc,
(JNIEnv * env, jobject proc, jobject channel) jobject channel) {
{
int rc; int rc;
HANDLE handle = channelToHandle(env, channel); HANDLE handle = channelToHandle(env, channel);
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR

View file

@ -32,8 +32,7 @@ static std::map<int, int> fd2rc;
* Method: openMaster * Method: openMaster
* Signature: (Z)Ljava/lang/String; * Signature: (Z)Ljava/lang/String;
*/ */
JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *env, jobject jobj, jboolean console) JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *env, jobject jobj, jboolean console) {
{
jfieldID fid; /* Store the field ID */ jfieldID fid; /* Store the field ID */
jstring jstr = NULL; jstring jstr = NULL;
jclass cls; jclass cls;
@ -44,7 +43,7 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *
line[0] = '\0'; line[0] = '\0';
/* Open new winpty handle */ /* Open new winpty handle */
winpty_t* winpty = winpty_open(80, 40); winpty_t *winpty = winpty_open(80, 40);
if (winpty == NULL) { if (winpty == NULL) {
return NULL; return NULL;
} }
@ -55,7 +54,7 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *
} }
/* Generate masterFD based on current system time */ /* Generate masterFD based on current system time */
srand((unsigned int)time(NULL)); srand((unsigned int) time(NULL));
master = rand(); master = rand();
/* Make sure masterFD does not exist */ /* Make sure masterFD does not exist */
@ -75,7 +74,7 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *
if (fid == NULL) { if (fid == NULL) {
return NULL; return NULL;
} }
env->SetIntField(jobj, fid, (jint)master); env->SetIntField(jobj, fid, (jint) master);
/* Create a new String for the slave. */ /* Create a new String for the slave. */
jstr = env->NewStringUTF(line); jstr = env->NewStringUTF(line);
@ -88,15 +87,15 @@ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster(JNIEnv *
* Method: change_window_size * Method: change_window_size
* Signature: (III)I * Signature: (III)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size(JNIEnv *env, jobject jobj, jint fdm, jint width, jint height) JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size(JNIEnv *env, jobject jobj, jint fdm,
{ jint width, jint height) {
int fd; int fd;
std::map<int, winpty_t*> :: const_iterator fd2pty_Iter; std::map<int, winpty_t*>::const_iterator fd2pty_Iter;
fd = fdm; fd = fdm;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
if (winpty != NULL) if (winpty != NULL)
return winpty_set_size(winpty, width, height); return winpty_set_size(winpty, width, height);
} }
@ -109,18 +108,17 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size(J
* Method: read0 * Method: read0
* Signature: (I[BI)I * Signature: (I[BI)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0(JNIEnv *env, jobject jobj, jint jfd,
(JNIEnv *env, jobject jobj, jint jfd, jbyteArray buf, jint buf_len) jbyteArray buf, jint buf_len) {
{
DWORD amount = -1; DWORD amount = -1;
OVERLAPPED over; OVERLAPPED over;
int fd; int fd;
std::map<int, winpty_t*> :: const_iterator fd2pty_Iter; std::map<int, winpty_t*>::const_iterator fd2pty_Iter;
fd = jfd; fd = jfd;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
if (winpty != NULL) { if (winpty != NULL) {
/* Get the pipe handle */ /* Get the pipe handle */
HANDLE handle = winpty_get_data_pipe(winpty); HANDLE handle = winpty_get_data_pipe(winpty);
@ -167,15 +165,14 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_read0
* Method: close0 * Method: close0
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv *env, jobject jobj, jint jfd) JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIEnv *env, jobject jobj, jint jfd) {
{
int fd; int fd;
std::map<int, winpty_t*> :: iterator fd2pty_Iter; std::map<int, winpty_t*>::iterator fd2pty_Iter;
fd = jfd; fd = jfd;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
fd2pty.erase(fd2pty_Iter); fd2pty.erase(fd2pty_Iter);
if (winpty != NULL) { if (winpty != NULL) {
winpty_close(winpty); winpty_close(winpty);
@ -191,17 +188,17 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYInputStream_close0(JNIE
* Method: write0 * Method: write0
* Signature: (I[BI)I * Signature: (I[BI)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv *env, jobject jobj, jint jfd, jbyteArray buf, jint buf_len) JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNIEnv *env, jobject jobj, jint jfd,
{ jbyteArray buf, jint buf_len) {
DWORD written = -1; DWORD written = -1;
OVERLAPPED over; OVERLAPPED over;
int fd; int fd;
std::map<int, winpty_t*> :: iterator fd2pty_Iter; std::map<int, winpty_t*>::iterator fd2pty_Iter;
fd = jfd; fd = jfd;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
if (winpty != NULL) { if (winpty != NULL) {
/* Get the pipe handle */ /* Get the pipe handle */
HANDLE handle = winpty_get_data_pipe(winpty); HANDLE handle = winpty_get_data_pipe(winpty);
@ -220,7 +217,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNI
if (!ret && GetLastError() == ERROR_IO_PENDING) if (!ret && GetLastError() == ERROR_IO_PENDING)
ret = GetOverlappedResult(handle, &over, &written, TRUE); ret = GetOverlappedResult(handle, &over, &written, TRUE);
if (!ret || (int)written != buf_len) if (!ret || (int) written != buf_len)
written = -1; written = -1;
delete[] buffer; delete[] buffer;
@ -235,15 +232,14 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_write0(JNI
* Method: close0 * Method: close0
* Signature: (I)I * Signature: (I)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv *env, jobject jobj, jint jfd) JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNIEnv *env, jobject jobj, jint jfd) {
{
int fd; int fd;
std::map<int, winpty_t*> :: iterator fd2pty_Iter; std::map<int, winpty_t*>::iterator fd2pty_Iter;
fd = jfd; fd = jfd;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
fd2pty.erase(fd2pty_Iter); fd2pty.erase(fd2pty_Iter);
if (winpty != NULL) { if (winpty != NULL) {
winpty_close(winpty); winpty_close(winpty);
@ -257,8 +253,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTYOutputStream_close0(JNI
/* /*
* Convert convert slashes to backslashes. * Convert convert slashes to backslashes.
*/ */
static std::wstring convertSlashes(const wchar_t *path) static std::wstring convertSlashes(const wchar_t *path) {
{
std::wstring ret; std::wstring ret;
for (int i = 0; path[i] != L'\0'; ++i) { for (int i = 0; path[i] != L'\0'; ++i) {
@ -273,17 +268,13 @@ static std::wstring convertSlashes(const wchar_t *path)
// Convert argc/argv into a Win32 command-line following the escaping convention // Convert argc/argv into a Win32 command-line following the escaping convention
// documented on MSDN. (e.g. see CommandLineToArgvW documentation) // documented on MSDN. (e.g. see CommandLineToArgvW documentation)
static std::wstring argvToCommandLine(const std::vector<std::wstring> &argv) static std::wstring argvToCommandLine(const std::vector<std::wstring> &argv) {
{
std::wstring result; std::wstring result;
for (size_t argIndex = 0; argIndex < argv.size(); ++argIndex) { for (size_t argIndex = 0; argIndex < argv.size(); ++argIndex) {
if (argIndex > 0) if (argIndex > 0)
result.push_back(L' '); result.push_back(L' ');
const wchar_t *arg = argv[argIndex].c_str(); const wchar_t *arg = argv[argIndex].c_str();
const bool quote = const bool quote = wcschr(arg, L' ') != NULL || wcschr(arg, L'\t') != NULL || *arg == L'\0';
wcschr(arg, L' ') != NULL ||
wcschr(arg, L'\t') != NULL ||
*arg == L'\0';
if (quote) if (quote)
result.push_back(L'\"'); result.push_back(L'\"');
int bsCount = 0; int bsCount = 0;
@ -315,13 +306,12 @@ static std::wstring argvToCommandLine(const std::vector<std::wstring> &argv)
* Method: exec2 * Method: exec2
* Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;IZ)I * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;IZ)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_exec2 JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_exec2(JNIEnv *env, jobject jobj, jobjectArray jcmd,
(JNIEnv *env, jobject jobj, jobjectArray jcmd, jobjectArray jenv, jstring jdir, jobjectArray jchannels, jstring jslaveName, jint masterFD, jboolean console) jobjectArray jenv, jstring jdir, jobjectArray jchannels, jstring jslaveName, jint masterFD, jboolean console) {
{
int fd; int fd;
std::map<int, winpty_t*> :: iterator fd2pty_Iter; std::map<int, winpty_t*>::iterator fd2pty_Iter;
const wchar_t *cwdW = (const wchar_t *) env->GetStringChars(jdir, NULL); const wchar_t *cwdW = (const wchar_t*) env->GetStringChars(jdir, NULL);
const char *pts_name = env->GetStringUTFChars(jslaveName, NULL); const char *pts_name = env->GetStringUTFChars(jslaveName, NULL);
int pid = -1; int pid = -1;
@ -336,16 +326,18 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_exec2
fd = masterFD; fd = masterFD;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
if (winpty != NULL) { if (winpty != NULL) {
std::vector<std::wstring> argVector; std::vector < std::wstring > argVector;
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
jstring j_str = (jstring) env->GetObjectArrayElement(jcmd, i); jstring j_str = (jstring) env->GetObjectArrayElement(jcmd, i);
const wchar_t *w_str = (const wchar_t *) env->GetStringChars(j_str, NULL); const wchar_t *w_str = (const wchar_t*) env->GetStringChars(j_str, NULL);
if (i == 0) argVector.push_back(convertSlashes(w_str)); if (i == 0)
else argVector.push_back(w_str); argVector.push_back(convertSlashes(w_str));
env->ReleaseStringChars(j_str, (const jchar *) w_str); else
argVector.push_back(w_str);
env->ReleaseStringChars(j_str, (const jchar*) w_str);
env->DeleteLocalRef(j_str); env->DeleteLocalRef(j_str);
} }
@ -353,21 +345,17 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_exec2
for (i = 0; i < envc; i++) { for (i = 0; i < envc; i++) {
jstring j_str = (jstring) env->GetObjectArrayElement(jenv, i); jstring j_str = (jstring) env->GetObjectArrayElement(jenv, i);
const wchar_t *w_str = (const wchar_t *) env->GetStringChars(j_str, NULL); const wchar_t *w_str = (const wchar_t*) env->GetStringChars(j_str, NULL);
envp.append(w_str); envp.append(w_str);
envp.push_back(L'\0'); envp.push_back(L'\0');
env->ReleaseStringChars(j_str, (const jchar *) w_str); env->ReleaseStringChars(j_str, (const jchar*) w_str);
env->DeleteLocalRef(j_str); env->DeleteLocalRef(j_str);
} }
std::wstring cmdLine = argvToCommandLine(argVector); std::wstring cmdLine = argvToCommandLine(argVector);
const wchar_t *cmdLineW = cmdLine.c_str(); const wchar_t *cmdLineW = cmdLine.c_str();
int ret = winpty_start_process(winpty, int ret = winpty_start_process(winpty, NULL, cmdLineW, cwdW, envp.c_str());
NULL,
cmdLineW,
cwdW,
envp.c_str());
if (ret == 0) { if (ret == 0) {
// Success. Get the process id. // Success. Get the process id.
@ -376,8 +364,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_exec2
} }
} }
bail_out: bail_out: env->ReleaseStringChars(jdir, (const jchar*) cwdW);
env->ReleaseStringChars(jdir, (const jchar *) cwdW);
env->ReleaseStringUTFChars(jslaveName, pts_name); env->ReleaseStringUTFChars(jslaveName, pts_name);
return pid; return pid;
@ -388,31 +375,30 @@ bail_out:
* Method: waitFor * Method: waitFor
* Signature: (II)I * Signature: (II)I
*/ */
JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_waitFor JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_waitFor(JNIEnv *env, jobject jobj, jint masterFD, jint pid) {
(JNIEnv *env, jobject jobj, jint masterFD, jint pid)
{
int status = -1; int status = -1;
DWORD flags; DWORD flags;
int fd; int fd;
std::map<int, winpty_t*> :: iterator fd2pty_Iter; std::map<int, winpty_t*>::iterator fd2pty_Iter;
std::map<int, int> :: iterator fd2rc_Iter; std::map<int, int>::iterator fd2rc_Iter;
fd = masterFD; fd = masterFD;
fd2pty_Iter = fd2pty.find(fd); fd2pty_Iter = fd2pty.find(fd);
if (fd2pty_Iter != fd2pty.end()) { if (fd2pty_Iter != fd2pty.end()) {
winpty_t* winpty = fd2pty_Iter -> second; winpty_t *winpty = fd2pty_Iter->second;
if (winpty != NULL) { if (winpty != NULL) {
HANDLE handle = winpty_get_data_pipe(winpty); HANDLE handle = winpty_get_data_pipe(winpty);
BOOL success; BOOL success;
do { do {
success = GetHandleInformation(handle, &flags); success = GetHandleInformation(handle, &flags);
if (success) Sleep(500); if (success)
Sleep(500);
} while (success); } while (success);
fd2rc_Iter = fd2rc.find(fd); fd2rc_Iter = fd2rc.find(fd);
if (fd2rc_Iter != fd2rc.end()) { if (fd2rc_Iter != fd2rc.end()) {
status = fd2rc_Iter -> second; status = fd2rc_Iter->second;
fd2rc.erase(fd2rc_Iter); fd2rc.erase(fd2rc_Iter);
} }
} }

View file

@ -5,13 +5,8 @@
#pragma comment(lib, "delayimp") #pragma comment(lib, "delayimp")
BOOL APIENTRY DllMain( HMODULE hModule, BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
DWORD ul_reason_for_call, switch (ul_reason_for_call) {
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH: case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH: case DLL_THREAD_DETACH:
@ -21,30 +16,22 @@ BOOL APIENTRY DllMain( HMODULE hModule,
return TRUE; return TRUE;
} }
static HMODULE getCurrentModule() static HMODULE getCurrentModule() {
{
HMODULE module; HMODULE module;
if (!GetModuleHandleEx( if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | (LPCTSTR) getCurrentModule, &module)) {
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(LPCTSTR)getCurrentModule,
&module)) {
assert(false); assert(false);
} }
return module; return module;
} }
HMODULE PTYExplicitLoadLibrary( LPCSTR pszModuleName ) HMODULE PTYExplicitLoadLibrary(LPCSTR pszModuleName) {
{ if (lstrcmpiA(pszModuleName, "winpty.dll") == 0) {
if( lstrcmpiA( pszModuleName, "winpty.dll" ) == 0 )
{
CHAR szPath[MAX_PATH] = ""; CHAR szPath[MAX_PATH] = "";
//_hdllInstance is the HMODULE of *this* module //_hdllInstance is the HMODULE of *this* module
DWORD cchPath = GetModuleFileNameA(getCurrentModule(), szPath, MAX_PATH ); DWORD cchPath = GetModuleFileNameA(getCurrentModule(), szPath, MAX_PATH);
while( cchPath > 0 ) while (cchPath > 0) {
{ switch (szPath[cchPath - 1]) {
switch( szPath[cchPath - 1] )
{
case '\\': case '\\':
case '/': case '/':
case ':': case ':':
@ -55,16 +42,15 @@ HMODULE PTYExplicitLoadLibrary( LPCSTR pszModuleName )
} }
break; //stop searching; found path separator break; //stop searching; found path separator
} }
lstrcpynA( szPath + cchPath, pszModuleName, MAX_PATH - cchPath ); lstrcpynA(szPath + cchPath, pszModuleName, MAX_PATH - cchPath);
return LoadLibraryA( szPath ); //call with full path to dependent DLL return LoadLibraryA(szPath); //call with full path to dependent DLL
} }
return NULL; return NULL;
} }
FARPROC WINAPI PTYDliNotifyHook( unsigned dliNotify, PDelayLoadInfo pdli ) FARPROC WINAPI PTYDliNotifyHook(unsigned dliNotify, PDelayLoadInfo pdli) {
{ if (dliNotify == dliNotePreLoadLibrary)
if( dliNotify == dliNotePreLoadLibrary ) return (FARPROC) PTYExplicitLoadLibrary(pdli->szDll);
return (FARPROC)PTYExplicitLoadLibrary( pdli->szDll );
return NULL; return NULL;
} }

View file

@ -22,10 +22,8 @@
extern void JNICALL ThrowByName(JNIEnv *env, const char *name, const char *msg); extern void JNICALL ThrowByName(JNIEnv *env, const char *name, const char *msg);
static HWND consoleHWND; static HWND consoleHWND;
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
// Check if window is a console of process with pid // Check if window is a console of process with pid
// Arguments: // Arguments:
@ -34,20 +32,17 @@ static HWND consoleHWND;
// Return : TRUE if yes // Return : TRUE if yes
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
static BOOL CALLBACK static BOOL CALLBACK
find_child_console (HWND hwnd, LPARAM arg) find_child_console(HWND hwnd, LPARAM arg) {
{
DWORD thread_id; DWORD thread_id;
DWORD process_id; DWORD process_id;
DWORD pid = arg; DWORD pid = arg;
thread_id = GetWindowThreadProcessId (hwnd, &process_id); thread_id = GetWindowThreadProcessId(hwnd, &process_id);
if (process_id == pid) if (process_id == pid) {
{
wchar_t window_class[32]; wchar_t window_class[32];
GetClassName (hwnd, window_class, sizeof (window_class)); GetClassName(hwnd, window_class, sizeof(window_class));
if (wcscmp (window_class, L"ConsoleWindowClass") == 0) if (wcscmp(window_class, L"ConsoleWindowClass") == 0) {
{
consoleHWND = hwnd; consoleHWND = hwnd;
return FALSE; return FALSE;
} }
@ -60,7 +55,8 @@ find_child_console (HWND hwnd, LPARAM arg)
// defined to a Windows NT value, thus we don't get this. Can't assume // defined to a Windows NT value, thus we don't get this. Can't assume
// we're running on XP, anyway (or can we by now?) // we're running on XP, anyway (or can we by now?)
#if (_WIN32_WINNT < 0x0501) || defined(_MSC_VER) #if (_WIN32_WINNT < 0x0501) || defined(_MSC_VER)
typedef BOOL (WINAPI *DebugBreakProcessFunc)(HANDLE); typedef BOOL(WINAPI *DebugBreakProcessFunc)
(HANDLE);
#endif #endif
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
@ -76,21 +72,18 @@ typedef BOOL (WINAPI *DebugBreakProcessFunc)(HANDLE);
// pid - process' pid // pid - process' pid
// Return : 0 if OK or error code // Return : 0 if OK or error code
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
int interruptProcess(int pid) int interruptProcess(int pid) {
{
// See if DebugBreakProcess is available (XP and beyond) // See if DebugBreakProcess is available (XP and beyond)
HMODULE hmod = LoadLibrary(L"Kernel32.dll"); HMODULE hmod = LoadLibrary(L"Kernel32.dll");
if (hmod != NULL) if (hmod != NULL) {
{
BOOL success = FALSE; BOOL success = FALSE;
FARPROC procaddr = GetProcAddress(hmod, "DebugBreakProcess"); FARPROC procaddr = GetProcAddress(hmod, "DebugBreakProcess");
if (procaddr != NULL) if (procaddr != NULL) {
{ HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD) pid);
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)pid); if (proc != NULL) {
if (proc != NULL) typedef BOOL WINAPI( *DebugBreakProcessFunc)
{ (HANDLE);
typedef BOOL WINAPI (*DebugBreakProcessFunc)(HANDLE); DebugBreakProcessFunc pDebugBreakProcess = (DebugBreakProcessFunc) procaddr;
DebugBreakProcessFunc pDebugBreakProcess = (DebugBreakProcessFunc)procaddr;
success = (*pDebugBreakProcess)(proc); success = (*pDebugBreakProcess)(proc);
CloseHandle(proc); CloseHandle(proc);
} }
@ -113,24 +106,22 @@ int interruptProcess(int pid)
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
#endif #endif
// Find console // Find console
EnumWindows (find_child_console, (LPARAM) pid); EnumWindows(find_child_console, (LPARAM) pid);
if(NULL != consoleHWND) // Yes, we found out it if (NULL != consoleHWND) // Yes, we found out it
{ {
// We are going to switch focus to console, // We are going to switch focus to console,
// send Ctrl-C and then restore focus // send Ctrl-C and then restore focus
BYTE control_scan_code = (BYTE) MapVirtualKey (VK_CONTROL, 0); BYTE control_scan_code = (BYTE) MapVirtualKey(VK_CONTROL, 0);
/* Fake Ctrl-C for SIGINT, and Ctrl-Break for SIGQUIT. */ /* Fake Ctrl-C for SIGINT, and Ctrl-Break for SIGQUIT. */
BYTE vk_c_code = 'C'; BYTE vk_c_code = 'C';
BYTE vk_break_code = VK_CANCEL; BYTE vk_break_code = VK_CANCEL;
BYTE c_scan_code = (BYTE) MapVirtualKey (vk_c_code, 0); BYTE c_scan_code = (BYTE) MapVirtualKey(vk_c_code, 0);
BYTE break_scan_code = (BYTE) MapVirtualKey (vk_break_code, 0); BYTE break_scan_code = (BYTE) MapVirtualKey(vk_break_code, 0);
HWND foreground_window; HWND foreground_window;
foreground_window = GetForegroundWindow();
foreground_window = GetForegroundWindow (); if (foreground_window) {
if (foreground_window)
{
/* NT 5.0, and apparently also Windows 98, will not allow /* NT 5.0, and apparently also Windows 98, will not allow
a Window to be set to foreground directly without the a Window to be set to foreground directly without the
user's involvement. The workaround is to attach user's involvement. The workaround is to attach
@ -138,44 +129,36 @@ int interruptProcess(int pid)
window, since that is the only thread that can set the window, since that is the only thread that can set the
foreground window. */ foreground window. */
DWORD foreground_thread, child_thread; DWORD foreground_thread, child_thread;
foreground_thread = foreground_thread = GetWindowThreadProcessId(foreground_window, NULL);
GetWindowThreadProcessId (foreground_window, NULL); if (foreground_thread == GetCurrentThreadId()
if (foreground_thread == GetCurrentThreadId () || !AttachThreadInput(GetCurrentThreadId(), foreground_thread, TRUE))
|| !AttachThreadInput (GetCurrentThreadId (),
foreground_thread, TRUE))
foreground_thread = 0; foreground_thread = 0;
child_thread = GetWindowThreadProcessId (consoleHWND, NULL); child_thread = GetWindowThreadProcessId(consoleHWND, NULL);
if (child_thread == GetCurrentThreadId () if (child_thread == GetCurrentThreadId() || !AttachThreadInput(GetCurrentThreadId(), child_thread, TRUE))
|| !AttachThreadInput (GetCurrentThreadId (),
child_thread, TRUE))
child_thread = 0; child_thread = 0;
/* Set the foreground window to the child. */ /* Set the foreground window to the child. */
if (SetForegroundWindow (consoleHWND)) if (SetForegroundWindow(consoleHWND)) {
{ if (0 != break_scan_code) {
if(0 != break_scan_code) {
/* Generate keystrokes as if user had typed Ctrl-Break */ /* Generate keystrokes as if user had typed Ctrl-Break */
keybd_event (VK_CONTROL, control_scan_code, 0, 0); keybd_event(VK_CONTROL, control_scan_code, 0, 0);
keybd_event (vk_break_code, break_scan_code, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(vk_break_code, break_scan_code, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event (vk_break_code, break_scan_code, keybd_event(vk_break_code, break_scan_code, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, control_scan_code, KEYEVENTF_KEYUP, 0);
keybd_event (VK_CONTROL, control_scan_code, KEYEVENTF_KEYUP, 0);
} }
/* Sleep for a bit to give time for respond */ /* Sleep for a bit to give time for respond */
Sleep (100); Sleep(100);
SetForegroundWindow (foreground_window); SetForegroundWindow(foreground_window);
} }
/* Detach from the foreground and child threads now that /* Detach from the foreground and child threads now that
the foreground switching is over. */ the foreground switching is over. */
if (foreground_thread) if (foreground_thread)
AttachThreadInput (GetCurrentThreadId (), AttachThreadInput(GetCurrentThreadId(), foreground_thread, FALSE);
foreground_thread, FALSE);
if (child_thread) if (child_thread)
AttachThreadInput (GetCurrentThreadId (), AttachThreadInput(GetCurrentThreadId(), child_thread, FALSE);
child_thread, FALSE);
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
_stprintf(buffer, _T("Sent Ctrl-C & Ctrl-Break to process %i\n"), pid); _stprintf(buffer, _T("Sent Ctrl-C & Ctrl-Break to process %i\n"), pid);
OutputDebugStringW(buffer); OutputDebugStringW(buffer);

View file

@ -23,26 +23,19 @@
CRITICAL_SECTION cs; CRITICAL_SECTION cs;
wchar_t path[MAX_PATH + 1] = { _T('\0') }; // Directory where spawner.dll is located
wchar_t path[MAX_PATH + 1] = {_T('\0') }; // Directory where spawner.dll is located
#if __cplusplus #if __cplusplus
extern "C" extern "C"
#endif #endif
BOOL APIENTRY DllMain( HINSTANCE hModule, BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
DWORD ul_reason_for_call, switch (ul_reason_for_call) {
LPVOID lpReserved case DLL_PROCESS_ATTACH: {
) wchar_t *p;
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
wchar_t * p;
InitializeCriticalSection(&cs); InitializeCriticalSection(&cs);
GetModuleFileNameW(hModule, path, MAX_PATH); GetModuleFileNameW(hModule, path, MAX_PATH);
p = wcsrchr(path, _T('\\')); p = wcsrchr(path, _T('\\'));
if(NULL != p) if (NULL != p)
*(p + 1) = _T('\0'); *(p + 1) = _T('\0');
else else
wcscat(path, L"\\"); wcscat(path, L"\\");

View file

@ -30,18 +30,16 @@
#define MAX_CMD_LINE_LENGTH (2049) #define MAX_CMD_LINE_LENGTH (2049)
#define PIPE_NAME_LENGTH 100 #define PIPE_NAME_LENGTH 100
int copyTo(wchar_t * target, const wchar_t * source, int cpyLength, int copyTo(wchar_t *target, const wchar_t *source, int cpyLength, int availSpace);
int availSpace);
void DisplayErrorMessage(); void DisplayErrorMessage();
//BOOL KillProcessEx(DWORD dwProcessId); // Handle of the process //BOOL KillProcessEx(DWORD dwProcessId); // Handle of the process
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
BOOL WINAPI HandlerRoutine( DWORD dwCtrlType) // control signal type BOOL WINAPI HandlerRoutine(DWORD dwCtrlType) // control signal type
{ {
BOOL ret = TRUE; BOOL ret = TRUE;
switch(dwCtrlType) switch (dwCtrlType) {
{
case CTRL_C_EVENT: case CTRL_C_EVENT:
break; break;
case CTRL_BREAK_EVENT: case CTRL_BREAK_EVENT:
@ -63,7 +61,7 @@ BOOL WINAPI HandlerRoutine( DWORD dwCtrlType) // control signal type
// The default here means we haven't checked yet // The default here means we haven't checked yet
// i.e. cygwin is true but the bin dir hasn't been captured // i.e. cygwin is true but the bin dir hasn't been captured
wchar_t * cygwinBin = NULL; wchar_t *cygwinBin = NULL;
bool _isCygwin = true; bool _isCygwin = true;
bool isCygwin(HANDLE process) { bool isCygwin(HANDLE process) {
@ -77,10 +75,10 @@ bool isCygwin(HANDLE process) {
if (EnumProcessModules(process, mods, sizeof(mods), &needed)) { if (EnumProcessModules(process, mods, sizeof(mods), &needed)) {
int i; int i;
needed /= sizeof(HMODULE); needed /= sizeof(HMODULE);
for (i = 0; i < needed; ++i ) { for (i = 0; i < needed; ++i) {
wchar_t modName[MAX_PATH]; wchar_t modName[MAX_PATH];
if (GetModuleFileNameEx(process, mods[i], modName, MAX_PATH)) { if (GetModuleFileNameEx(process, mods[i], modName, MAX_PATH)) {
wchar_t * p = wcsrchr(modName, L'\\'); wchar_t *p = wcsrchr(modName, L'\\');
if (p) { if (p) {
*p = 0; // Null terminate there for future reference *p = 0; // Null terminate there for future reference
if (!wcscmp(++p, L"cygwin1.dll")) { if (!wcscmp(++p, L"cygwin1.dll")) {
@ -98,9 +96,9 @@ bool isCygwin(HANDLE process) {
return _isCygwin; return _isCygwin;
} }
bool runCygwinCommand(wchar_t * command) { bool runCygwinCommand(wchar_t *command) {
wchar_t cygcmd[1024]; wchar_t cygcmd[1024];
swprintf(cygcmd, sizeof(cygcmd)/sizeof(cygcmd[0]), L"%s\\%s", cygwinBin, command); swprintf(cygcmd, sizeof(cygcmd) / sizeof(cygcmd[0]), L"%s\\%s", cygwinBin, command);
STARTUPINFO si; STARTUPINFO si;
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
@ -121,18 +119,18 @@ bool runCygwinCommand(wchar_t * command) {
return false; return false;
} }
void ensureSize(wchar_t** ptr, int* psize, int requiredLength) { void ensureSize(wchar_t **ptr, int *psize, int requiredLength) {
int size= *psize; int size = *psize;
if (requiredLength > size) { if (requiredLength > size) {
size= 2*size; size = 2 * size;
if (size < requiredLength) { if (size < requiredLength) {
size= requiredLength; size = requiredLength;
} }
*ptr= (wchar_t *)realloc(*ptr, size * sizeof(wchar_t)); *ptr = (wchar_t*) realloc(*ptr, size * sizeof(wchar_t));
if (NULL == *ptr) { if (NULL == *ptr) {
*psize= 0; *psize = 0;
} else { } else {
*psize= size; *psize = size;
} }
} }
} }
@ -140,27 +138,25 @@ void ensureSize(wchar_t** ptr, int* psize, int requiredLength) {
int main() { int main() {
int argc; int argc;
wchar_t ** argv = CommandLineToArgvW(GetCommandLine(), &argc); wchar_t **argv = CommandLineToArgvW(GetCommandLine(), &argc);
// Make sure that we've been passed the right number of arguments // Make sure that we've been passed the right number of arguments
if (argc < 8) { if (argc < 8) {
_tprintf(_T("Usage: %s (four inheritable event handles) (CommandLineToSpawn)\n"), _tprintf(_T("Usage: %s (four inheritable event handles) (CommandLineToSpawn)\n"), argv[0]);
argv[0]); return (0);
return(0);
} }
// Construct the full command line // Construct the full command line
int nCmdLineLength= MAX_CMD_LINE_LENGTH; int nCmdLineLength = MAX_CMD_LINE_LENGTH;
wchar_t * szCmdLine= (wchar_t *)malloc(nCmdLineLength * sizeof(wchar_t)); wchar_t *szCmdLine = (wchar_t*) malloc(nCmdLineLength * sizeof(wchar_t));
szCmdLine[0]= 0; szCmdLine[0] = 0;
int nPos = 0; int nPos = 0;
for(int i = 8; i < argc; ++i) for (int i = 8; i < argc; ++i) {
{
int nCpyLen; int nCpyLen;
int len= wcslen(argv[i]); int len = wcslen(argv[i]);
int requiredSize= nPos+len+2; int requiredSize = nPos + len + 2;
if (requiredSize > 32*1024) { if (requiredSize > 32 * 1024) {
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
OutputDebugStringW(_T("Command line too long!\n")); OutputDebugStringW(_T("Command line too long!\n"));
#endif #endif
@ -173,8 +169,7 @@ int main() {
#endif #endif
return 0; return 0;
} }
if(0 > (nCpyLen = copyTo(szCmdLine + nPos, argv[i], len, nCmdLineLength - nPos))) if (0 > (nCpyLen = copyTo(szCmdLine + nPos, argv[i], len, nCmdLineLength - nPos))) {
{
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
OutputDebugStringW(_T("Not enough space to build command line\n")); OutputDebugStringW(_T("Not enough space to build command line\n"));
#endif #endif
@ -186,8 +181,8 @@ int main() {
} }
szCmdLine[nPos] = _T('\0'); szCmdLine[nPos] = _T('\0');
STARTUPINFOW si = {sizeof(si)}; STARTUPINFOW si = { sizeof(si) };
PROCESS_INFORMATION pi = {0}; PROCESS_INFORMATION pi = { 0 };
DWORD dwExitCode = 0; DWORD dwExitCode = 0;
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
int currentPID = GetCurrentProcessId(); int currentPID = GetCurrentProcessId();
@ -211,9 +206,12 @@ int main() {
wchar_t outPipeName[PIPE_NAME_LENGTH]; wchar_t outPipeName[PIPE_NAME_LENGTH];
wchar_t errPipeName[PIPE_NAME_LENGTH]; wchar_t errPipeName[PIPE_NAME_LENGTH];
swprintf(inPipeName, sizeof(inPipeName)/sizeof(inPipeName[0]), L"\\\\.\\pipe\\stdin%08i%010i", parentPid, nCounter); swprintf(inPipeName, sizeof(inPipeName) / sizeof(inPipeName[0]), L"\\\\.\\pipe\\stdin%08i%010i", parentPid,
swprintf(outPipeName, sizeof(outPipeName)/sizeof(outPipeName[0]), L"\\\\.\\pipe\\stdout%08i%010i", parentPid, nCounter); nCounter);
swprintf(errPipeName, sizeof(errPipeName)/sizeof(errPipeName[0]), L"\\\\.\\pipe\\stderr%08i%010i", parentPid, nCounter); swprintf(outPipeName, sizeof(outPipeName) / sizeof(outPipeName[0]), L"\\\\.\\pipe\\stdout%08i%010i", parentPid,
nCounter);
swprintf(errPipeName, sizeof(errPipeName) / sizeof(errPipeName[0]), L"\\\\.\\pipe\\stderr%08i%010i", parentPid,
nCounter);
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
swprintf(buffer, _T("Pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName); swprintf(buffer, _T("Pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName);
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
@ -226,10 +224,14 @@ int main() {
sa.bInheritHandle = TRUE; sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL; sa.lpSecurityDescriptor = NULL;
if((INVALID_HANDLE_VALUE == (stdHandles[0] = CreateFileW(inPipeName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, &sa))) || if ((INVALID_HANDLE_VALUE
(INVALID_HANDLE_VALUE == (stdHandles[1] = CreateFileW(outPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa))) || == (stdHandles[0] = CreateFileW(inPipeName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, &sa)))
(INVALID_HANDLE_VALUE == (stdHandles[2] = CreateFileW(errPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa)))) || (INVALID_HANDLE_VALUE
{ == (stdHandles[1] = CreateFileW(outPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
0, &sa)))
|| (INVALID_HANDLE_VALUE
== (stdHandles[2] = CreateFileW(errPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
0, &sa)))) {
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Failed to open pipe %i, %i, %i: %i\n"), stdHandles[0], stdHandles[1], stdHandles[2], GetLastError()); swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Failed to open pipe %i, %i, %i: %i\n"), stdHandles[0], stdHandles[1], stdHandles[2], GetLastError());
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
@ -243,9 +245,8 @@ int main() {
SetHandleInformation(stdHandles[1], HANDLE_FLAG_INHERIT, TRUE); SetHandleInformation(stdHandles[1], HANDLE_FLAG_INHERIT, TRUE);
SetHandleInformation(stdHandles[2], HANDLE_FLAG_INHERIT, TRUE); SetHandleInformation(stdHandles[2], HANDLE_FLAG_INHERIT, TRUE);
if(!SetStdHandle(STD_INPUT_HANDLE, stdHandles[0]) || if (!SetStdHandle(STD_INPUT_HANDLE, stdHandles[0]) || !SetStdHandle(STD_OUTPUT_HANDLE, stdHandles[1])
!SetStdHandle(STD_OUTPUT_HANDLE, stdHandles[1]) || || !SetStdHandle(STD_ERROR_HANDLE, stdHandles[2])) {
!SetStdHandle(STD_ERROR_HANDLE, stdHandles[2])) {
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Failed to reassign standard streams: %i\n"), GetLastError()); swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Failed to reassign standard streams: %i\n"), GetLastError());
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
@ -304,12 +305,10 @@ int main() {
// If this process is already part of a job, the flag CREATE_BREAKAWAY_FROM_JOB // If this process is already part of a job, the flag CREATE_BREAKAWAY_FROM_JOB
// makes the child process detach from the job, such that we can assign it // makes the child process detach from the job, such that we can assign it
// to our own job object. // to our own job object.
BOOL f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, BOOL f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi);
CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &si, &pi);
// If breaking away from job is not permitted, retry without breakaway flag // If breaking away from job is not permitted, retry without breakaway flag
if (!f) if (!f)
f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
0, NULL, NULL, &si, &pi);
// We don't need them any more // We don't need them any more
CloseHandle(stdHandles[0]); CloseHandle(stdHandles[0]);
@ -325,8 +324,8 @@ int main() {
CloseHandle(pi.hThread); CloseHandle(pi.hThread);
h[1] = pi.hProcess; h[1] = pi.hProcess;
if(NULL != hJob) { if (NULL != hJob) {
if(!AssignProcessToJobObject(hJob, pi.hProcess)) { if (!AssignProcessToJobObject(hJob, pi.hProcess)) {
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Cannot assign process %i to a job\n"), pi.dwProcessId); swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("Cannot assign process %i to a job\n"), pi.dwProcessId);
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
@ -335,13 +334,11 @@ int main() {
} }
} }
while(!exitProc) while (!exitProc) {
{
// Wait for the spawned-process to die or for the event // Wait for the spawned-process to die or for the event
// indicating that the processes should be forcibly killed. // indicating that the processes should be forcibly killed.
DWORD event = WaitForMultipleObjects(5, h, FALSE, INFINITE); DWORD event = WaitForMultipleObjects(5, h, FALSE, INFINITE);
switch (event) switch (event) {
{
case WAIT_OBJECT_0 + 0: // SIGINT case WAIT_OBJECT_0 + 0: // SIGINT
case WAIT_OBJECT_0 + 4: // CTRL-C case WAIT_OBJECT_0 + 4: // CTRL-C
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
@ -351,7 +348,7 @@ int main() {
if ((event == (WAIT_OBJECT_0 + 0)) && isCygwin(h[1])) { if ((event == (WAIT_OBJECT_0 + 0)) && isCygwin(h[1])) {
// Need to issue a kill command // Need to issue a kill command
wchar_t kill[1024]; wchar_t kill[1024];
swprintf(kill, sizeof(kill)/sizeof(kill[0]), L"kill -SIGINT %d", pi.dwProcessId); swprintf(kill, sizeof(kill) / sizeof(kill[0]), L"kill -SIGINT %d", pi.dwProcessId);
if (!runCygwinCommand(kill)) { if (!runCygwinCommand(kill)) {
// fall back to console event // fall back to console event
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
@ -381,7 +378,7 @@ int main() {
case WAIT_OBJECT_0 + 2: // TERM case WAIT_OBJECT_0 + 2: // TERM
case WAIT_OBJECT_0 + 3: // KILL case WAIT_OBJECT_0 + 3: // KILL
{ {
const wchar_t* signal = (event == WAIT_OBJECT_0 + 2) ? L"TERM" : L"KILL"; const wchar_t *signal = (event == WAIT_OBJECT_0 + 2) ? L"TERM" : L"KILL";
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("starter received %s event (PID %i)\n"), signal, currentPID); swprintf(buffer, sizeof(buffer)/sizeof(buffer[0]), _T("starter received %s event (PID %i)\n"), signal, currentPID);
OutputDebugStringW(buffer); OutputDebugStringW(buffer);
@ -389,7 +386,7 @@ int main() {
if (isCygwin(h[1])) { if (isCygwin(h[1])) {
// Need to issue a kill command // Need to issue a kill command
wchar_t kill[1024]; wchar_t kill[1024];
swprintf(kill, sizeof(kill)/sizeof(kill[0]), L"kill -%s %d", signal, pi.dwProcessId); swprintf(kill, sizeof(kill) / sizeof(kill[0]), L"kill -%s %d", signal, pi.dwProcessId);
if (!runCygwinCommand(kill)) { if (!runCygwinCommand(kill)) {
// fall back to console event // fall back to console event
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
@ -400,8 +397,8 @@ int main() {
SetEvent(waitEvent); SetEvent(waitEvent);
if(NULL != hJob) { if (NULL != hJob) {
if(!TerminateJobObject(hJob, (DWORD)-1)) { if (!TerminateJobObject(hJob, (DWORD) - 1)) {
#ifdef DEBUG_MONITOR #ifdef DEBUG_MONITOR
OutputDebugStringW(_T("Cannot terminate job\n")); OutputDebugStringW(_T("Cannot terminate job\n"));
DisplayErrorMessage(); DisplayErrorMessage();
@ -432,8 +429,7 @@ int main() {
#endif #endif
} }
if (NULL != szCmdLine) if (NULL != szCmdLine) {
{
free(szCmdLine); free(szCmdLine);
} }
@ -444,7 +440,7 @@ int main() {
CloseHandle(h[3]); CloseHandle(h[3]);
CloseHandle(h[4]); CloseHandle(h[4]);
return(dwExitCode); return (dwExitCode);
} }
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
@ -456,8 +452,7 @@ int main() {
// availSpace - size of the target buffer // availSpace - size of the target buffer
// Return :number of bytes used in target, or -1 in case of error // Return :number of bytes used in target, or -1 in case of error
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
int copyTo(wchar_t * target, const wchar_t * source, int cpyLength, int copyTo(wchar_t *target, const wchar_t *source, int cpyLength, int availSpace) {
int availSpace) {
BOOL bSlash = FALSE; BOOL bSlash = FALSE;
int i = 0, j = 0; int i = 0, j = 0;
int totCpyLength = cpyLength; int totCpyLength = cpyLength;
@ -473,7 +468,7 @@ int copyTo(wchar_t * target, const wchar_t * source, int cpyLength,
if ((_T('\"') == *source) && (_T('\"') == *(source + cpyLength - 1))) { if ((_T('\"') == *source) && (_T('\"') == *(source + cpyLength - 1))) {
// Already done // Already done
nQuotationMode = QUOTATION_DONE; nQuotationMode = QUOTATION_DONE;
} else if (wcschr(source, _T(' '))== NULL) { } else if (wcschr(source, _T(' ')) == NULL) {
// No reason to quotate term becase it doesn't have embedded spaces // No reason to quotate term becase it doesn't have embedded spaces
nQuotationMode = QUOTATION_NONE; nQuotationMode = QUOTATION_NONE;
} else { } else {
@ -488,7 +483,7 @@ int copyTo(wchar_t * target, const wchar_t * source, int cpyLength,
bSlash = TRUE; bSlash = TRUE;
else else
// Don't escape embracing quotation marks // Don't escape embracing quotation marks
if ((source[i] == _T('\"')) && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))) )) { if ((source[i] == _T('\"')) && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))))) {
if (!bSlash) { if (!bSlash) {
if (j == availSpace) if (j == availSpace)
return -1; return -1;
@ -514,11 +509,10 @@ int copyTo(wchar_t * target, const wchar_t * source, int cpyLength,
} }
void DisplayErrorMessage() { void DisplayErrorMessage() {
wchar_t * lpMsgBuf; wchar_t *lpMsgBuf;
FormatMessageW( FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL,
FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (wchar_t*) &lpMsgBuf, 0, NULL);
(wchar_t *) &lpMsgBuf, 0, NULL);
OutputDebugStringW(lpMsgBuf); OutputDebugStringW(lpMsgBuf);
// Free the buffer. // Free the buffer.
LocalFree(lpMsgBuf); LocalFree(lpMsgBuf);

View file

@ -23,7 +23,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.native</artifactId> <artifactId>org.eclipse.cdt.core.native</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -1,5 +1,192 @@
#Wed Jun 06 11:37:01 EDT 2007
eclipse.preferences.version=1 eclipse.preferences.version=1
indexer/indexerId=org.eclipse.cdt.core.nullindexer indexer/indexerId=org.eclipse.cdt.core.nullindexer
indexerId=org.eclipse.cdt.core.nullindexer indexerId=org.eclipse.cdt.core.nullindexer
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_lambda_expression=20
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_linkage_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
org.eclipse.cdt.core.formatter.comment_formatter_off_tag=@formatter\:off
org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_block_comment=true
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.format_header_comment=true
org.eclipse.cdt.core.formatter.format_line_comment=true
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_linkage=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_label_compare_to_statements=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=4
org.eclipse.cdt.core.formatter.insert_new_line_after_colon_in_constructor_initializer_list=insert
org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_linkage_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_ref_qualifier_in_structured_binding=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=120
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=tab
org.eclipse.cdt.core.formatter.tabulation.size=4
org.eclipse.cdt.core.formatter.use_comment_formatter_tag=true
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

View file

@ -0,0 +1,3 @@
eclipse.preferences.version=1
formatter_profile=_Unmanaged profile 'CDT'
formatter_settings_version=1

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %fragmentName.win32.x86_64 Bundle-Name: %fragmentName.win32.x86_64
Bundle-SymbolicName: org.eclipse.cdt.core.win32.x86_64;singleton:=true Bundle-SymbolicName: org.eclipse.cdt.core.win32.x86_64;singleton:=true
Bundle-Version: 6.0.0.qualifier Bundle-Version: 6.0.100.qualifier
Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)" Fragment-Host: org.eclipse.cdt.core.native;bundle-version="[6.0.0,7.0.0)"
Eclipse-PlatformFilter: (&(osgi.os=win32)(osgi.arch=x86_64)) Eclipse-PlatformFilter: (&(osgi.os=win32)(osgi.arch=x86_64))
Bundle-Vendor: %providerName Bundle-Vendor: %providerName

View file

@ -11,7 +11,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>6.0.0-SNAPSHOT</version> <version>6.0.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.core.win32.x86_64</artifactId> <artifactId>org.eclipse.cdt.core.win32.x86_64</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -35,5 +35,6 @@
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View file

@ -0,0 +1,189 @@
eclipse.preferences.version=1
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_lambda_expression=20
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_linkage_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
org.eclipse.cdt.core.formatter.comment_formatter_off_tag=@formatter\:off
org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_block_comment=true
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.format_header_comment=true
org.eclipse.cdt.core.formatter.format_line_comment=true
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_linkage=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_label_compare_to_statements=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=4
org.eclipse.cdt.core.formatter.insert_new_line_after_colon_in_constructor_initializer_list=insert
org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_linkage_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_ref_qualifier_in_structured_binding=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=120
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=tab
org.eclipse.cdt.core.formatter.tabulation.size=4
org.eclipse.cdt.core.formatter.use_comment_formatter_tag=true
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

View file

@ -0,0 +1,3 @@
eclipse.preferences.version=1
formatter_profile=_Unmanaged profile 'CDT'
formatter_settings_version=1

View file

@ -30,5 +30,6 @@
<nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View file

@ -0,0 +1,189 @@
eclipse.preferences.version=1
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_lambda_expression=20
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_linkage_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
org.eclipse.cdt.core.formatter.comment_formatter_off_tag=@formatter\:off
org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_block_comment=true
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.format_header_comment=true
org.eclipse.cdt.core.formatter.format_line_comment=true
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_linkage=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_label_compare_to_statements=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.cdt.core.formatter.indentation.size=4
org.eclipse.cdt.core.formatter.insert_new_line_after_colon_in_constructor_initializer_list=insert
org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_linkage_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_ref_qualifier_in_structured_binding=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=120
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=tab
org.eclipse.cdt.core.formatter.tabulation.size=4
org.eclipse.cdt.core.formatter.use_comment_formatter_tag=true
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

View file

@ -0,0 +1,3 @@
eclipse.preferences.version=1
formatter_profile=_Unmanaged profile 'CDT'
formatter_settings_version=1

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %pluginName Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.native.serial Bundle-SymbolicName: org.eclipse.cdt.native.serial
Bundle-Version: 1.2.0.qualifier Bundle-Version: 1.2.100.qualifier
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-RequiredExecutionEnvironment: JavaSE-11
Export-Package: org.eclipse.cdt.serial Export-Package: org.eclipse.cdt.serial

View file

@ -50,7 +50,7 @@ static void closeAndthrowIOException(int fd, JNIEnv *env, const char *msg)
#else #else
static void closeAndthrowIOException(HANDLE handle, JNIEnv *env, const char *msg) static void closeAndthrowIOException(HANDLE handle, JNIEnv *env, const char *msg)
#endif #endif
{ {
char buff[256]; char buff[256];
#ifndef __MINGW32__ #ifndef __MINGW32__
sprintf(buff, "%s: %s", msg, strerror(errno)); sprintf(buff, "%s: %s", msg, strerror(errno));
@ -63,8 +63,7 @@ static void closeAndthrowIOException(HANDLE handle, JNIEnv *env, const char *msg
(*env)->ThrowNew(env, cls, buff); (*env)->ThrowNew(env, cls, buff);
} }
static void throwIOException(JNIEnv *env, const char *msg) static void throwIOException(JNIEnv *env, const char *msg) {
{
char buff[256]; char buff[256];
#ifndef __MINGW32__ #ifndef __MINGW32__
sprintf(buff, "%s: %s", msg, strerror(errno)); sprintf(buff, "%s: %s", msg, strerror(errno));
@ -75,10 +74,10 @@ static void throwIOException(JNIEnv *env, const char *msg)
(*env)->ThrowNew(env, cls, buff); (*env)->ThrowNew(env, cls, buff);
} }
JNIEXPORT jlong JNICALL FUNC(open0)(JNIEnv *env, jobject jobj, jstring portName, jint baudRate, jint byteSize, jint parity, jint stopBits) JNIEXPORT jlong JNICALL FUNC(open0)(JNIEnv *env, jobject jobj, jstring portName, jint baudRate, jint byteSize,
{ jint parity, jint stopBits) {
#ifndef __MINGW32__ #ifndef __MINGW32__
const char * cportName = (*env)->GetStringUTFChars(env, portName, NULL); const char *cportName = (*env)->GetStringUTFChars(env, portName, NULL);
int fd = open(cportName, O_RDWR | O_NOCTTY | O_NDELAY); int fd = open(cportName, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) { if (fd < 0) {
char msg[256]; char msg[256];
@ -342,7 +341,8 @@ JNIEXPORT jlong JNICALL FUNC(open0)(JNIEnv *env, jobject jobj, jstring portName,
#endif // __MINGW32__ #endif // __MINGW32__
} }
JNIEXPORT void JNICALL FUNC(close0)(JNIEnv *env, jobject jobj, jlong handle) JNIEXPORT void JNICALL FUNC(close0)
(JNIEnv *env, jobject jobj, jlong handle)
{ {
#ifndef __MINGW32__ #ifndef __MINGW32__
close(handle); close(handle);
@ -355,11 +355,10 @@ JNIEXPORT void JNICALL FUNC(close0)(JNIEnv *env, jobject jobj, jlong handle)
#endif #endif
} }
JNIEXPORT jint JNICALL FUNC(available0)(JNIEnv * env, jobject jobj, jlong jhandle) JNIEXPORT jint JNICALL FUNC(available0)(JNIEnv *env, jobject jobj, jlong jhandle) {
{
#ifndef __MINGW32__ #ifndef __MINGW32__
int result = 0; int result = 0;
if (ioctl(jhandle, FIONREAD, &result ) < 0) { if (ioctl(jhandle, FIONREAD, &result) < 0) {
throwIOException(env, "Error calling ioctl"); throwIOException(env, "Error calling ioctl");
return 0; return 0;
} }
@ -381,8 +380,7 @@ JNIEXPORT jint JNICALL FUNC(available0)(JNIEnv * env, jobject jobj, jlong jhandl
#endif #endif
} }
JNIEXPORT jint JNICALL FUNC(read1)(JNIEnv * env, jobject jobj, jlong jhandle, jbyteArray bytes, jint offset, jint size) JNIEXPORT jint JNICALL FUNC(read1)(JNIEnv *env, jobject jobj, jlong jhandle, jbyteArray bytes, jint offset, jint size) {
{
#ifndef __MINGW32__ #ifndef __MINGW32__
jbyte buff[256]; jbyte buff[256];
int n = size < sizeof(buff) ? size : sizeof(buff); int n = size < sizeof(buff) ? size : sizeof(buff);
@ -436,7 +434,8 @@ JNIEXPORT jint JNICALL FUNC(read1)(JNIEnv * env, jobject jobj, jlong jhandle, jb
#endif #endif
} }
JNIEXPORT void JNICALL FUNC(write0)(JNIEnv *env, jobject jobj, jlong jhandle, jint b) JNIEXPORT void JNICALL FUNC(write0)
(JNIEnv *env, jobject jobj, jlong jhandle, jint b)
{ {
#ifndef __MINGW32__ #ifndef __MINGW32__
char buff = b; char buff = b;

View file

@ -23,7 +23,7 @@
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<version>1.2.0-SNAPSHOT</version> <version>1.2.100-SNAPSHOT</version>
<artifactId>org.eclipse.cdt.native.serial</artifactId> <artifactId>org.eclipse.cdt.native.serial</artifactId>
<packaging>eclipse-plugin</packaging> <packaging>eclipse-plugin</packaging>

View file

@ -88,6 +88,24 @@ git ls-files -- \*\*/.project ":!$COREPROJECT/.project" | while read i ; do
else else
rm -f $d/.settings/org.eclipse.pde*.prefs rm -f $d/.settings/org.eclipse.pde*.prefs
fi fi
# CDT (native code)
if [[ $natures == *"org.eclipse.cdt.core.cnature"* ]]; then
cp $COREPROJECT/.settings/org.eclipse.cdt.*.prefs $d/.settings
if echo $i | grep -E '\.tests?[/\.]' > /dev/null; then
# Disable indexer for test plugins
sed -i '
/^eclipse.preferences.version/ {
p # Print line
i indexer/indexerId=org.eclipse.cdt.core.nullindexer
i indexerId=org.eclipse.cdt.core.nullindexer
i instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
d # Already printed
}' $d/.settings/org.eclipse.cdt.core.prefs
fi
else
rm -f $d/.settings/org.eclipse.cdt.*.prefs
fi
done done
## ##

View file

@ -23,6 +23,15 @@ for p in native/org.eclipse.cdt.native.serial core/org.eclipse.cdt.core.native;
exit 1 exit 1
fi fi
# Disabled until https://bugs.eclipse.org/bugs/show_bug.cgi?id=568137 is resolved
# # Need to apply format after header files are generated
# tmpws=$(mktemp -d)
# ${ECLIPSE:-~/buildtools/eclipse-cpp-2020-09/eclipse} \
# -consolelog -nosplash -application org.eclipse.cdt.core.CodeFormatter \
# -config $p/.settings/org.eclipse.cdt.core.prefs \
# $p/native_src -verbose -data $tmpws
# rm -rf $tmpws
echo "Rebuilding $p natives to make sure they match source" echo "Rebuilding $p natives to make sure they match source"
logfile=make-natives-${p//\//-}.log logfile=make-natives-${p//\//-}.log
if ! make -C $p/native_src rebuild >${logfile} 2>&1; then if ! make -C $p/native_src rebuild >${logfile} 2>&1; then