File 0001-On_s390_con3270_disable_ANSI_colour_esc.patch of Package systemd-208

---
 rules/99-systemd.rules.in             |    2 -
 src/getty-generator/getty-generator.c |    2 -
 src/shared/util.c                     |   62 ++++++++++++++++++++++++++++++++--
 3 files changed, 61 insertions(+), 5 deletions(-)

--- systemd-208/rules/99-systemd.rules.in
+++ systemd-208/rules/99-systemd.rules.in	2014-02-05 10:34:17.346235540 +0000
@@ -7,7 +7,7 @@
 
 ACTION=="remove", GOTO="systemd_end"
 
-SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd"
+SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty*", TAG+="systemd"
 
 KERNEL=="vport*", TAG+="systemd"
 
--- systemd-208/src/shared/util.c
+++ systemd-208/src/shared/util.c	2014-01-31 11:54:07.222235280 +0000
@@ -2967,6 +2967,7 @@ int status_vprintf(const char *status, b
         struct iovec iovec[6] = {};
         int n = 0;
         static bool prev_ephemeral;
+        static int cached_on_tty = -1;
 
         assert(format);
 
@@ -2980,6 +2981,51 @@ int status_vprintf(const char *status, b
         if (fd < 0)
                 return fd;
 
+        if (_unlikely_(cached_on_tty < 0)) {
+                cached_on_tty = isatty(fd) > 0;
+                if (cached_on_tty) {
+                        const char *e = getenv("TERM");
+                        if (e && (strcmp(e, "dumb") == 0 || strcmp(e, "ibm327x") == 0)) {
+                                char *mode = NULL;
+                                int r = parse_env_file("/proc/cmdline", WHITESPACE, "conmode", &mode, NULL);
+                                if (r < 0 || !mode || !streq(mode, "3270"))
+                                        cached_on_tty = 0;
+			}
+                }
+        }
+
+        if (status && !cached_on_tty) {
+                const char *esc, *ptr;
+                esc = strchr(status, 0x1B);
+                if (esc && (ptr = strpbrk(esc, "SOFDTI*"))) {
+                        switch(*ptr) {
+                        case 'S':
+                                status = " SKIP ";
+                                break;
+                        case 'O':
+                                status = "  OK  ";
+                                break;
+                        case 'F':
+                                status = "FAILED";
+                                break;
+                        case 'D':
+                                status = "DEPEND";
+                                break;
+                        case 'T':
+                                status = " TIME ";
+                                break;
+                        case 'I':
+                                status = " INFO ";
+                                break;
+                        case '*':
+                                status = " BUSY ";
+                                break;
+                        default:
+                                break;
+                        }
+                }
+        }
+
         if (ellipse) {
                 char *e;
                 size_t emax, sl;
@@ -3002,8 +3048,12 @@ int status_vprintf(const char *status, b
                 }
         }
 
-        if (prev_ephemeral)
-                IOVEC_SET_STRING(iovec[n++], "\r" ANSI_ERASE_TO_END_OF_LINE);
+        if (prev_ephemeral) {
+                if (cached_on_tty)
+                        IOVEC_SET_STRING(iovec[n++], "\r" ANSI_ERASE_TO_END_OF_LINE);
+                else
+                        IOVEC_SET_STRING(iovec[n++], "\r");
+        }
         prev_ephemeral = ephemeral;
 
         if (status) {
@@ -3267,8 +3317,14 @@ void columns_lines_cache_reset(int signu
 bool on_tty(void) {
         static int cached_on_tty = -1;
 
-        if (_unlikely_(cached_on_tty < 0))
+        if (_unlikely_(cached_on_tty < 0)) {
                 cached_on_tty = isatty(STDOUT_FILENO) > 0;
+                if (cached_on_tty) {
+                        const char *e = getenv("TERM");
+                        if (e && (strcmp(e, "dumb") == 0))
+                                cached_on_tty = 0;
+                }
+        }
 
         return cached_on_tty;
 }
--- systemd-208/src/getty-generator/getty-generator.c
+++ systemd-208/src/getty-generator/getty-generator.c	2014-02-05 10:41:29.502245927 +0000
@@ -149,9 +149,9 @@ int main(int argc, char *argv[]) {
                          * only for non-VC terminals. */
 
                         k = add_serial_getty(tty);
+                        free(tty);
 
                         if (k < 0) {
-                                free(tty);
                                 free(active);
                                 r = EXIT_FAILURE;
                                 goto finish;
openSUSE Build Service is sponsored by