diff --git a/procps-v3.3.5-top-locale.patch b/procps-v3.3.5-top-locale.patch new file mode 100644 index 0000000..db4f439 --- /dev/null +++ b/procps-v3.3.5-top-locale.patch @@ -0,0 +1,59 @@ +From 34b8614f5699bb7ade9f98835e1d2a20a0aae5cb Mon Sep 17 00:00:00 2001 +From: Jim Warner +Date: Mon, 17 Dec 2012 00:00:00 -0600 +Subject: [PATCH 9/9] top: make rcfile immune from a potential locale change + +The delay interval is kept in the rcfile in a floating +point format and is thus susceptible to changes in the +locale between invocations. So values written as #,### +could not be read if a new locale uses decimal points. + +This commit takes control of our own decimal point and +will henceforth make top immune to locale switcharoos. + +(now that we know a '.' + 2 spaces is squeezed to one) +(everything's perfectly justified, but it's just luck) + +Reference(s): +http://www.freelists.org/post/procps/top-has-a-localedpendent-config-file-toprc +http://lists.opensuse.org/opensuse-bugs/2012-12/msg01466.html +--- top/top.c ++++ top/top.c 2012-12-18 17:41:30.909860953 +0000 +@@ -2479,16 +2479,19 @@ static void configs_read (void) { + + fp = fopen(Rc_name, "r"); + if (fp) { ++ int tmp_whole, tmp_fract; + fbuf[0] = '\0'; + fgets(fbuf, sizeof(fbuf), fp); // ignore eyecatcher +- if (5 != fscanf(fp +- , "Id:%c, Mode_altscr=%d, Mode_irixps=%d, Delay_time=%f, Curwin=%d\n" +- , &Rc.id, &Rc.mode_altscr, &Rc.mode_irixps, &tmp_delay, &i)) { ++ if (6 != fscanf(fp ++ , "Id:%c, Mode_altscr=%d, Mode_irixps=%d, Delay_time=%d.%d, Curwin=%d\n" ++ , &Rc.id, &Rc.mode_altscr, &Rc.mode_irixps, &tmp_whole, &tmp_fract, &i)) { + p = fmtmk(N_fmt(RC_bad_files_fmt), Rc_name); + goto default_or_error; + } + // you saw that, right? (fscanf stickin' it to 'i') + Curwin = &Winstk[i]; ++ // this may be ugly, but it keeps us locale independent... ++ tmp_delay = (float)tmp_whole + (float)tmp_fract / 1000; + + for (i = 0 ; i < GROUPSMAX; i++) { + WIN_t *w = &Winstk[i]; +@@ -3015,9 +3018,12 @@ static void file_writerc (void) { + return; + } + fprintf(fp, "%s's " RCF_EYECATCHER, Myname); +- fprintf(fp, "Id:%c, Mode_altscr=%d, Mode_irixps=%d, Delay_time=%.3f, Curwin=%d\n" ++ fprintf(fp, "Id:%c, Mode_altscr=%d, Mode_irixps=%d, Delay_time=%d.%d, Curwin=%d\n" + , RCF_VERSION_ID +- , Rc.mode_altscr, Rc.mode_irixps, Rc.delay_time, (int)(Curwin - Winstk)); ++ , Rc.mode_altscr, Rc.mode_irixps ++ // this may be ugly, but it keeps us locale independent... ++ , (int)Rc.delay_time, (int)((Rc.delay_time - (int)Rc.delay_time) * 1000) ++ , (int)(Curwin - Winstk)); + + for (i = 0 ; i < GROUPSMAX; i++) { + fprintf(fp, "%s\tfieldscur=%s\n" diff --git a/procps.changes b/procps.changes index 0a6d120..a4bef64 100644 --- a/procps.changes +++ b/procps.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Dec 18 17:47:48 UTC 2012 - werner@suse.de + +- Add procps-v3.3.5-top-locale.patch (bnc#794678) + ------------------------------------------------------------------- Tue Oct 30 14:34:52 UTC 2012 - werner@suse.de diff --git a/procps.spec b/procps.spec index ac254f2..9d73282 100644 --- a/procps.spec +++ b/procps.spec @@ -64,6 +64,8 @@ Patch19: procps-v3.3.4-large_pcpu.patch Patch20: procps-v3.3.3-tinfo.dif Patch21: procps-v3.3.3-pwdx.patch Patch22: procps-v3.3.3-chroot.diff +# PATCH-FIX-UPSTREAM procps-v3.3.5-top-locale.patch -- bnc#794678 - top has a locale-dpendent config file +Patch23: procps-v3.3.5-top-locale.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -129,6 +131,7 @@ the process information pseudo-file system, %patch20 %patch21 %patch22 +%patch23 %build sh po/update-potfiles