From d0c99408cd96fb912c003fd678fd4377bc984906 Mon Sep 17 00:00:00 2001 From: David Salinas Date: Tue, 15 Jan 2013 10:35:06 -0500 Subject: [PATCH] Bug 393455 - Terminal sessions broken on AIX --- .../META-INF/MANIFEST.MF | 2 +- core/org.eclipse.cdt.core.aix/library/PTY.h | 13 +++-- .../library/Spawner.h | 2 +- core/org.eclipse.cdt.core.aix/library/exec0.h | 13 +++-- .../library/exec_pty.c | 51 ++++++++++++------ .../library/exec_unix.c | 21 ++++++-- .../library/openpty.c | 2 +- .../library/openpty.h | 7 +-- core/org.eclipse.cdt.core.aix/library/pfind.c | 26 +++++++-- core/org.eclipse.cdt.core.aix/library/pty.c | 32 +++++++++-- .../library/spawner.c | 19 +++---- .../os/aix/ppc/libpty.so | Bin 11283 -> 12345 bytes .../os/aix/ppc/libspawner.so | Bin 27910 -> 31528 bytes core/org.eclipse.cdt.core.aix/pom.xml | 2 +- 14 files changed, 140 insertions(+), 50 deletions(-) diff --git a/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF index 1ee36ed73f0..3faa5d1c085 100644 --- a/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.aix/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %fragmentName.aix Bundle-SymbolicName: org.eclipse.cdt.core.aix; singleton:=true -Bundle-Version: 5.1.1.qualifier +Bundle-Version: 5.3.0.qualifier Bundle-Vendor: %providerName Fragment-Host: org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)" Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.core.aix/library/PTY.h b/core/org.eclipse.cdt.core.aix/library/PTY.h index 46a8dd9b622..f717942a01d 100644 --- a/core/org.eclipse.cdt.core.aix/library/PTY.h +++ b/core/org.eclipse.cdt.core.aix/library/PTY.h @@ -7,14 +7,21 @@ #ifdef __cplusplus extern "C" { #endif -/* Inaccessible static: hasPTY */ /* * Class: org_eclipse_cdt_utils_pty_PTY * Method: openMaster - * Signature: ()Ljava/lang/String; + * Signature: (Z)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_eclipse_cdt_utils_pty_PTY_openMaster - (JNIEnv *, jobject); + (JNIEnv *, jobject, jboolean); + +/* + * Class: org_eclipse_cdt_utils_pty_PTY + * Method: change_window_size + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size + (JNIEnv *, jobject, jint, jint, jint); #ifdef __cplusplus } diff --git a/core/org.eclipse.cdt.core.aix/library/Spawner.h b/core/org.eclipse.cdt.core.aix/library/Spawner.h index 272366bad75..e2fea946912 100644 --- a/core/org.eclipse.cdt.core.aix/library/Spawner.h +++ b/core/org.eclipse.cdt.core.aix/library/Spawner.h @@ -29,7 +29,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[ILjava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2 - (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint); + (JNIEnv *, jobject, jobjectArray, jobjectArray, jstring, jintArray, jstring, jint, jboolean); /* * Class: org_eclipse_cdt_utils_spawner_Spawner diff --git a/core/org.eclipse.cdt.core.aix/library/exec0.h b/core/org.eclipse.cdt.core.aix/library/exec0.h index f0e88f36efe..630e741a582 100644 --- a/core/org.eclipse.cdt.core.aix/library/exec0.h +++ b/core/org.eclipse.cdt.core.aix/library/exec0.h @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * IBM Corporation - port of 248071 *******************************************************************************/ #include @@ -16,7 +17,13 @@ #include 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], const char *pts_name, int fdm, + int console); extern int wait0(pid_t pid); diff --git a/core/org.eclipse.cdt.core.aix/library/exec_pty.c b/core/org.eclipse.cdt.core.aix/library/exec_pty.c index 9eb60cf17e1..2c3a03ee0d4 100644 --- a/core/org.eclipse.cdt.core.aix/library/exec_pty.c +++ b/core/org.eclipse.cdt.core.aix/library/exec_pty.c @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004 QNX Software Systems and others. + * Copyright (c) 2004, 2013 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - initial API and implementation + * IBM Corporation - port of 248071 *******************************************************************************/ #include "exec0.h" @@ -20,11 +21,11 @@ #include /* from pfind.c */ -extern char *pfind(const char *name); +extern char *pfind(const char *name, char * const envp[]); pid_t exec_pty(const char *path, char *const argv[], char *const envp[], - const char *dirpath, int channels[3], const char *pts_name, int fdm) + const char *dirpath, int channels[3], const char *pts_name, int fdm, int console) { int pipe2[2]; pid_t childpid; @@ -34,7 +35,7 @@ exec_pty(const char *path, char *const argv[], char *const envp[], * We use pfind() to check that the program exists and is an executable. * If not pass the error up. Also execve() wants a full path. */ - full_path = pfind(path); + full_path = pfind(path, envp); if (full_path == NULL) { fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : ""); return -1; @@ -43,7 +44,7 @@ exec_pty(const char *path, char *const argv[], char *const envp[], /* * Make sure we can create our pipes before forking. */ - if (channels != NULL) { + if (channels != NULL && console) { if (pipe(pipe2) < 0) { fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); free(full_path); @@ -64,6 +65,11 @@ exec_pty(const char *path, char *const argv[], char *const envp[], if (channels != NULL) { int fds; + if (!console && setsid() < 0) { + perror("setsid()"); + return -1; + } + fds = ptys_open(fdm, pts_name); if (fds < 0) { fprintf(stderr, "%s(%d): returning due to error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); @@ -71,17 +77,28 @@ exec_pty(const char *path, char *const argv[], char *const envp[], } /* Close the read end of pipe2 */ - if (close(pipe2[0]) == -1) + if (console && close(pipe2[0]) == -1) perror("close(pipe2[0]))"); /* close the master, no need in the child */ close(fdm); - set_noecho(fds); + if (console) { + set_noecho(fds); + if (setpgid(getpid(), getpid()) < 0) { + perror("setpgid()"); + return -1; + } + } + /* redirections */ dup2(fds, STDIN_FILENO); /* dup stdin */ dup2(fds, STDOUT_FILENO); /* dup stdout */ - dup2(pipe2[1], STDERR_FILENO); /* dup stderr */ + if (console) { + dup2(pipe2[1], STDERR_FILENO); /* dup stderr */ + } else { + dup2(fds, STDERR_FILENO); /* dup stderr */ + } close(fds); /* done with fds. */ } @@ -104,16 +121,20 @@ exec_pty(const char *path, char *const argv[], char *const envp[], } else if (childpid != 0) { /* parent */ - set_noecho(fdm); + if (console) { + set_noecho(fdm); + } if (channels != NULL) { - /* close the write end of pipe1 */ - if (close(pipe2[1]) == -1) - perror("close(pipe2[1])"); - channels[0] = fdm; /* Input Stream. */ channels[1] = fdm; /* Output Stream. */ - channels[2] = pipe2[0]; /* stderr Stream. */ - /*channels[2] = fdm; Input Stream. */ + if (console) { + /* close the write end of pipe1 */ + if (close(pipe2[1]) == -1) + perror("close(pipe2[1])"); + channels[2] = pipe2[0]; /* stderr Stream. */ + } else { + channels[2] = fdm; /* Error Stream. */ + } } free(full_path); diff --git a/core/org.eclipse.cdt.core.aix/library/exec_unix.c b/core/org.eclipse.cdt.core.aix/library/exec_unix.c index a8399643a39..8c71787b618 100644 --- a/core/org.eclipse.cdt.core.aix/library/exec_unix.c +++ b/core/org.eclipse.cdt.core.aix/library/exec_unix.c @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * IBM Corporation - port of 248071 *******************************************************************************/ #include "exec0.h" @@ -19,7 +20,7 @@ #include /* from pfind.c */ -extern char *pfind(const char *name); +extern char *pfind(const char *name, char * const envp[]); pid_t exec0(const char *path, char *const argv[], char *const envp[], @@ -33,7 +34,7 @@ exec0(const char *path, char *const argv[], char *const envp[], * We use pfind() to check that the program exists and is an executable. * If not pass the error up. Also execve() wants a full path. */ - full_path = pfind(path); + full_path = pfind(path, envp); if (full_path == NULL) { fprintf(stderr, "Unable to find full path for \"%s\"\n", (path) ? path : ""); return -1; @@ -91,6 +92,8 @@ exec0(const char *path, char *const argv[], char *const envp[], close(fd++); } + setpgid(getpid(), getpid()); + if (envp[0] == NULL) { execv(full_path, argv); } else { @@ -135,9 +138,19 @@ int wait0(pid_t pid) int status; int val = -1; - if (pid < 0 || waitpid(pid, &status, 0) < 0) + if (pid < 0) return -1; + for (;;) { + if (waitpid(pid, &status, 0) < 0) { + if (errno == EINTR) { + // interrupted system call - retry + continue; + } + } + break; + } + if (WIFEXITED(status)) { val = WEXITSTATUS(status); } diff --git a/core/org.eclipse.cdt.core.aix/library/openpty.c b/core/org.eclipse.cdt.core.aix/library/openpty.c index 954b2b6b852..2207e682532 100644 --- a/core/org.eclipse.cdt.core.aix/library/openpty.c +++ b/core/org.eclipse.cdt.core.aix/library/openpty.c @@ -30,7 +30,7 @@ */ int ptym_open (char *pts_name); -int ptys_open (int fdm, char * pts_name); +int ptys_open (int fdm, const char * pts_name); void set_noecho(int fd); int diff --git a/core/org.eclipse.cdt.core.aix/library/openpty.h b/core/org.eclipse.cdt.core.aix/library/openpty.h index d07317e883b..21c98ac82fd 100644 --- a/core/org.eclipse.cdt.core.aix/library/openpty.h +++ b/core/org.eclipse.cdt.core.aix/library/openpty.h @@ -1,5 +1,5 @@ -/******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. +/****************************************************************************** + * Copyright (c) 2003, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,11 +8,12 @@ * Contributors: * IBM Corporation - initial API and implementation * QNX Software Systems + * IBM Corporation - port of 248071 *******************************************************************************/ #ifndef _OPENPTY_H #define _OPENPTY_H int ptym_open (char *pts_name); -int ptys_open (int fdm, char * pts_name); +int ptys_open (int fdm, const char * pts_name); void set_noecho(int fd); #endif diff --git a/core/org.eclipse.cdt.core.aix/library/pfind.c b/core/org.eclipse.cdt.core.aix/library/pfind.c index ba64f8d6e7d..b97942e298d 100644 --- a/core/org.eclipse.cdt.core.aix/library/pfind.c +++ b/core/org.eclipse.cdt.core.aix/library/pfind.c @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * IBM Corporation - port of 248071 *******************************************************************************/ /* @@ -23,8 +24,25 @@ #define PATH_MAX 1024 #endif +#define PATH_DEF "PATH=" +const int path_def_len = 5; /* strlen(PATH_DEF); */ +char * path_val(char * const envp[]) +{ + int i; + if (envp == NULL || envp[0] == NULL) + return getenv("PATH" ); + + for(i = 0; envp[i] != NULL; i++){ + char* p = envp[i]; + if(!strncmp(PATH_DEF, p, path_def_len)){ + return p + path_def_len; + } + } + + return NULL; +} -char * pfind(const char *name) +char * pfind(const char *name, char * const envp[]) { char *tok; char *sp; @@ -46,7 +64,7 @@ char * pfind(const char *name) } /* Search in the PATH environment. */ - path = getenv("PATH" ); + path = path_val( envp ); if (path == NULL || strlen(path) <= 0) { fprintf(stderr, "Unable to get $PATH.\n"); @@ -79,7 +97,7 @@ int main(int argc, char **argv) char *fullpath; for (i=1; i #include "PTY.h" #include "openpty.h" @@ -19,7 +20,7 @@ * Signature: ()I */ JNIEXPORT jstring JNICALL -Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) { +Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj, jboolean console) { jfieldID fid; /* Store the field ID */ jstring jstr = NULL; int master = -1; @@ -30,8 +31,10 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) { master = ptym_open(line); if (master >= 0) { - /* turn off echo */ - set_noecho(master); + // turn off echo + if (console) { + set_noecho(master); + } /* Get a reference to the obj's class */ cls = (*env)->GetObjectClass(env, jobj); @@ -48,3 +51,22 @@ Java_org_eclipse_cdt_utils_pty_PTY_openMaster (JNIEnv *env, jobject jobj) { } return jstr; } + +JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_pty_PTY_change_1window_1size + (JNIEnv *env, jobject jobj, jint fdm, jint width, jint height) +{ +#ifdef TIOCGWINSZ + struct winsize win; + + win.ws_col = width; + win.ws_row = height; + win.ws_xpixel = 0; + win.ws_ypixel = 0; + + return ioctl(fdm, TIOCSWINSZ, &win); +#else + return 0; +#endif +} + + diff --git a/core/org.eclipse.cdt.core.aix/library/spawner.c b/core/org.eclipse.cdt.core.aix/library/spawner.c index b8707ca0e2b..710ae08e1de 100644 --- a/core/org.eclipse.cdt.core.aix/library/spawner.c +++ b/core/org.eclipse.cdt.core.aix/library/spawner.c @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. + * Copyright (c) 2003, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation * QNX Software Systems + * IBM Corporation - port of 248071 *******************************************************************************/ #include @@ -90,13 +91,13 @@ 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, jobjectArray jenv, jstring jdir, jintArray jchannels, - jstring jslaveName, jint masterFD) + jstring jslaveName, jint masterFD, jboolean console) { jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0); const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); const char *pts_name = (*env)->GetStringUTFChars(env, jslaveName, NULL); - char **cmd; - char **envp; + char **cmd = NULL; + char **envp = NULL; int fd[3]; pid_t pid = -1; @@ -120,7 +121,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2 fprintf(stderr, "pts_name: %s\n", pts_name); #endif - pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD); + pid = exec_pty(cmd[0], cmd, envp, dirpath, fd, pts_name, masterFD, console); if (pid < 0) goto bail_out; @@ -147,8 +148,8 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec1(JNIEnv * env, jobject jobj, jstring jdir) { const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); - char **cmd; - char **envp; + char **cmd = NULL; + char **envp = NULL; pid_t pid = -1; cmd = alloc_c_array(env, jcmd); @@ -194,8 +195,8 @@ Java_org_eclipse_cdt_utils_spawner_Spawner_exec0(JNIEnv * env, jobject jobj, { jint *channels = (*env)->GetIntArrayElements(env, jchannels, 0); const char *dirpath = (*env)->GetStringUTFChars(env, jdir, NULL); - char **cmd; - char **envp; + char **cmd = NULL; + char **envp = NULL; int fd[3]; pid_t pid = -1; diff --git a/core/org.eclipse.cdt.core.aix/os/aix/ppc/libpty.so b/core/org.eclipse.cdt.core.aix/os/aix/ppc/libpty.so index d5aed7004d4e8dcc749e2c709e013d803939f1f3..8caa860f81baa005f9f168d3e0f3da7395b24287 100644 GIT binary patch literal 12345 zcmc&)e{37o9sizvX`IAu+%0TbiQvjQl(AqZZQ8k21Wp@RT2crQM$n29*D*;}H@0G@ z4J=hJZRtwsL^eQ5r)o=~RE4oA+n9!?qNRYKX#InsZbI8M!YGrN%GPN}E2G5weBZtE zot?YbMQFR~;*Y=Y^FHr;-}mc#uU6h7we$V6_Yz(C1QGp<+8aGe6)8m3Tk-w(xG9S( zKuWzvbWkHjg-Ia~{;A}pa`N196SL-D!AyKK12fm<+tB3C+N%URB>rl_zGx;2s0n>K z2#9tA`24~Lg7FpcHxk^MPBVfJy?hJn{6Bgyk&O1mhixT`ULaapzz^8U|9^1I=Q;l9 z+u2JK3i%#eo}JqJ7ov$Mjq2kx8heLGe+l=Kq@IY8Z{lT?9V2zRk9^@?^0brpCcTwv zz>hR|i6T1r!@b#TJJDl0Y$)H%<+7|++M;X&Zw|bKw2e6M)=J*T;I-L#Xs@lF+uK8? z=3>dc1TNdy|2DM$6bGH_>Iw~v`Mk%&%c*xSp7&OryPGeqRaX?nz;uZ!Qkna=_asyC zAz|Y9ATHC0PdC~fm>3s6C&D^EzxqD6YkPifd!U^>yQDuK!5^P&zgxE7nb$UX%(lBl z+i9z9c0jg2h4u%~&M4X+n>b4P#3|Z0@irYmKhPweFO2(^?A&VZw~0QYg8n!nViF?? zk25cOJ$Pd_UY%LqPRc3iJNIKB>^jG~bq@u&E}rdnG)ekV+E-sD?EK7QI%^v-QMf+J z56E)X7UeCv?hEhB^doL%MjOzv^-F$S%FMW2pmOdG^b6W8yb9yP&tdrKeU00Yaq!_; z8d28K6)R66jvc^}-WcMDPf_P6VyF{g%(M#sUH!_9l>w?u$1^=c$#`raS?E`(-^cfm zI>GVsBNiQ`j#YS%->R#csPCULWop6mmB{m#$P1Lnt0{$NI(oUE4`DSwjPccVkk++K z&CRvU?B3nrBig)&w1-xZa`=l_XrG$P?%LPc*-$~$`^xU!qD&Unm>v`!n}3%%mdVsd=-4v#w`Q4%vQb#<%?|Pq2OA#m9%Y_DW|*iThFH*9>rjlbB&Un2R{%pXf!Il6g2Y34H^)+)5}W6(fl@YNIE zM;`d}CR`%&YZ38D$^#U%5=rl8>XYQp4TafBfRdz)`t6L*i&JwU*`IXec&m%hPmuH zxwSPxU)>bl5$#D1_xHqOiNRDl-V^J~^o(Q%6X_l-xjmg-_w>XDqC@@ho~E6HLw(7e zJx%Gs2jcQk*nca3_=xj|@I+L_KBZ!xQguD5>XW$HU#zulVLhA09@dUMs{?yh2YlVg zzM`z1*XmZCJ~%M0>h)L`TKDignL8?;1)4fEk&DpygV;}=#oqX|_c+IXJb^tHYbVyt z<;?BH{)hIl#-onlE2FV@u|K^9-g(q}&$%9ah{(JGc?|Cbyw}Ti5nufjwd?Po{ckJJ zEu;-S1=Lq(qj)i>Xn4tgKbVZfz4ZiBINJ?gdyBSavbggpL1Lc3vNHW}AI58OtPc1r}eL;0s^#?CfWrJ(WohMYo$- z$2|VBLVo{nbSRVJ(;vPp{>V@w8QW$SSayR)U)B&~@+{>z*ss+Z;%>K_Z=|pvv)g5* zR@kQV9o+gUDd8E|yLE=U4Dby>AbiAvQA!UC2XTN? znThqsGto>2C%3>j+cEIsR5Cp{DvsrN-Kex35HdCo?5gaCLE+-rjLTb9u!NfS{C-Vw zzEj>ymzi(L{I7&8+nzO=S=!|~X(lw-k-vw2s(r)@bQ0+3;blO70y-`b&-))S@~A-5 z0`XimY&`RRA#6N%3>%OB1H#67zY^%IS?Zn0p=p!neI4l6%=3N#^fDur=hJHfaSc&g z#(UYaYIs_99Z;P>cK}@_&;vl4Ku-W&!)Orz?WgJhl|KWtf^Fq*09`B4e}L*4`K|%F zPM}Rd4FX}1Qc$4p12qctBG5`k6+HKarxmQ%{0MAfOZyJ{T&cl!gi+NVpfy~hiaiK3 z^49^0SozNbooC)+j<~Qbc^2rOY^&zF>$pZW*KHAqTf0FZ_CCTWz}~MHh`n#C_G-r7 zv-xTQ;`m`@0-6N6O`sz=+cBWqh3!Pn#yxYVusxTvabL!TZ6;?s4b(4eXL2^~=@DUj zGiRFx+9_=3ayEYQ`-Sa7&UO*#Tf%n9w23|CF1Cps1* z`|SeB9RqqDuwnlK>IB*)P#4f{fx3al1=<3%_iD<|5aF@{yLpL0RhTV0bMiAsXHI?= z>CDN`D4jXdJ=Jv6$!A$6Gfiim{H)WNBXzi6#pTpiem3f?lb@M7bGmNZAlg9R;rtt& zZ0n1q)zSg^k;jpdSnAE=)Pm#7=@f8GpTY6Fam=v+4whi)Pl1m4T;SBWam+Y_Q|rbt z-$=lzbK}UTTLO;e#xchaI4j&ZQbz@+z6j?_;4~EBgurQZ<5+JJO0yeB`m+`~;UXNK z*DXajZQw+TaK^xCbK{uv6dW9CIrqCc-@)l{Bdo_{Da-p`6R3;%&ApWUMyH46IcBJwTf7=0m!1>Cb;o+fZ+7UqaJ>tzm2#}=OlbMYBWIz-6RYv>h=4?0`M$9X(^9zafM#Yg;t2EIvWjStUH z!Qp2&V(85IEAr5pg*o2304<3u%pt5ce5T?YAL-UCII|0Lc(viPmW6Z_tTue^;>;OJ z=8m)uX6O70RvY6#TQTGCZXlzooG^ScM_nODtP=YTjv3Yd#Ng1jpa|n5P{ulDT)ej6 zrw~$^>J95sG-h2EM<_pRlz1e^ru&9Do%Gd|1U3*Y^m*WWKKf3yS zE>9V|XP`(AdU710JnO3bo?V&u+(3~%#o`F%cU_hLZYT%k3kIU$IyMS9Liumb%KQsr zsVrYhpzJy}f(0C*{EvKPWbfnFd9ig`oOf1iofKQ=#I{r7;wQJxXT&Ac3q0&E&DmIaXNf?b;O3!NX0AVxhJ}&k?xN7X`7-$nzmMJYF@XhdELrJZDnKADvdU- z->h|aXdATqlEYf-#_k5~>+#_<{?9^dS{ZB#HU?J`_674Nz6|97e$du4^W;~pmhz<> z&pZBHs+5YhUYqa1n$kVUi{~CY?Gvz*ozG{ zn-M3PZgfSHy0R&>krrA?S;aQ0qKR&FN`Ka(uG7{{+Ny1+(5@5OG>!d9^oMxQ``vfG zJLe8N(zJu)p1j}lJ>UENz2AFBl()#!_fD}u)Vhs`{!Y=LOKBj5$oG5v{0eR=;%X+P z%}-4(+!>e@a^a7M+*C`hZ5x?2{|e-i`5eq#mv2pzpDiZ@dyV+lA4tSuMKu?oSH^EPl~;xZuj|Akmx>>T74jZg zUYxoAZK80D@+$85pNI;_2c9lGvHj^Nx&EQ9rm45w{Q1QI+GkH9tZUQG{#{N{T~g7g}?)7(`h(QWbR;Rc~lAH-fpirnLbb z(_C1`qedT(D^$x5j=52CDZAYPlnxb*=?hT|AFJVl*j z7&Da!zVvcEXFp2oVU+5#$=uL*IvF2LhYyk`%=LWeLmznxb?y^eRgWJoV!O|X2mWaV z&s!zWS0%5xN?uDfJl)a%_wzvy(NV0cfp1Xvx|zATb+ZQ!w0nuR93=mPD@Zx|Nm7QN zoGb31?C)={BN~3?zyVR_As6bo_Q(DGCcYbdciThcSwE?GhL>agqmJZz!1tKAHQ?5m z$`_%0k*T~E<+XZwxSqWG4=-)mpWM(=cr|jB*VQlvOaFQQuFzVf`w>Un9TX2aL4`TGlaWryBU`3Qdv=KD`N-ux|Yk@gyZoi?X?icxE5g zZ)-K{2)t!g^88iuR#eGrtCH7VB`;Vdud5oK_5A#R&(Bae=0P0y6gYMx9`%IOVi9pY zia6efINpc(5a-4);`s3WSj*TeT)tkVX_P%E;uSPhXsA!1EJ+2d%S&wMI?zVEL%AqZ z^6_^Oo8KaiiO=gCZo5s>jbQz98O~LyiP)&VKvDG_XpJamQ1(EnP52W|xTX$L!o)}l>v3JR^MiAJ7Uyde z{TReJ--GjY82uUETzp^j4`)MEp4k!W8Rgc`s4iMvxlecO$z}HB?#xXjW4njqsdP3O z)Xy_ZUV-*AINx(P-}CTe6lZl#n@iWl&OxxYJFcS)ucN=AdqmI5+u>N6yCciMego?8PG1hler7!6A1koz>^))0M}e zcib2Tj71`d$&=^0!#rFS`CnD@(6zAkFd9I9(s&YCYSb{XKyOEXL8x`*zTmPX7EQQV&l0CzfJRH z*!PU5((zq-fnnEpv=n25OmPYK*L>XqJEq#O>u(mYFEiU^rB$%E+1PoGyKL-f*dsRf zr(o~1v0s3FaK2q>fjwcik0gyzkmDf67CfBdL^lz+fW3f<#LXrP{T`EDtShNMYO;&HDDAueZjhL_a)ZPLV7J67 zuutMi;ChJ<0ed7q3|uF17`RsABfwsXr+^zJo(67`cm{Z}#K(b~B|ZtPkHaazCDMKx zc#*_sfNLZ^3;Yp@&jEi_;#uGpiC+f(7~_tSY^)=f+QE;^MEc%jJeTdrcjQy?-I*P! zM90LQ@s7Q*cqY>k3UKmUV8lKQXt+LPYJ~9{FFevYM&8^ z*Pv#b1^SV&y;-td0XoPw7w^-b2$axE-K`}Q(s}Mdpjqa*dAI#cpkD#K#>nHx7aWmE43bcZ4wcCJh5$G#GZ2~e@@Fr-V)eJ;46e zvCnH*xqbzZ7~Oi_yF#V@BG6^lYw+l{hSDtfN_swyZhvE*@37AEy$=*(<;I(Vx&_(< zv`!%GAo`3zj{-#mdJ$;DVz-R^n{Of+_Yog~no+t%pcWv_whZVFVe^-4Z9tzFHtxB` z>jH`k8_&LGivXpCjr*b5`hdPHZ2cu0uac~=-BYq9fc6L*_gt%+0lHJzazKc8@Hr2J zXbMySLM#PR0T3mDCV>!xferz=1mf{StcNWOgvbqa1PC!7XbNb%K+`~X2{Z$Aw?M~% zz9`U1prk;jfJOx3IY-on${8S>8$f4)?i1)7&_01?fxarx%Ru{YB5S4vM-|xht6l@v ztjnHb&A{wA)@;n4W6jL$Inq6k?xvm3vP@=d_Bz(=&7Nb;%G;U7LFW=CCH)q(%S+jSJElx$P5*nyc0)X8{ib2IC|f~QJpyY zID>=lcCue({^)BAoI_3=t#{M}4!!}}>*(tToUju|>hK%OkqVqvaHcA7ZU$%CiDSyt zXPh|FpLXaRufXAbeX;`QHgHZkar8Y1&S@u(zL&u{d_#m^8;f)Axko6lb1Ws_%)V5dBln0~&P5*4wT$jDrKOACC4u!QmGug~G{ z19*RzK9h{*HyYh!DPG|o9#!G9Pg6JEG{w)n!r_uV$F#!nE^5!wREbwO-b?K{ruiDv z<_pR8yt!f}rU&+6x3=h(Ur?MLiqu!a$rUO zz_!ozm2~VlBdM|RU0Um5t#wU>9b6> z@c!ti94O-mp1m8C|BBb0yWsC-uXER#qmUvyFqlyQVIzYpQESG%TS(i zQkEJej!-`DsQiXmS;3iG=Qx9!hQSfazi?FktwkB9USst7J}V`TQ2w=}@*m8~d{#DQ zuCHuxg!1nkl`mS9al$rERZuQ*gz_I9mEW}}<6Lf>t)N`u2<1zT%74+61M=koC;n9@ z<#LWt{<-`Q^FDw)=)-xb- J3i1CF{{^}vFbeH1lu{4ne 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 S$%B9DN=*HTXv}(e_5T1t_1{te diff --git a/core/org.eclipse.cdt.core.aix/pom.xml b/core/org.eclipse.cdt.core.aix/pom.xml index 10b13960c8a..e2d76453c16 100644 --- a/core/org.eclipse.cdt.core.aix/pom.xml +++ b/core/org.eclipse.cdt.core.aix/pom.xml @@ -11,7 +11,7 @@ ../../pom.xml - 5.1.1-SNAPSHOT + 5.3.0-SNAPSHOT org.eclipse.cdt.core.aix eclipse-plugin