All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/12] drop unneeded newline
@ 2017-12-27 14:51 ` Julia Lawall
  0 siblings, 0 replies; 96+ messages in thread
From: Julia Lawall @ 2017-12-27 14:51 UTC (permalink / raw)
  To: dri-devel
  Cc: kernel-janitors, amd-gfx, linux-media, linux-arm-kernel, dev,
	netdev, dccp, linux-kernel, cluster-devel, linux-ext4,
	linux-s390, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	esc.storagedev, linux-scsi

Drop newline at the end of a message string when the printing function adds
a newline.

The complete semantic patch that detects this issue is as shown below
(http://coccinelle.lip6.fr/).  It works in two phases - the first phase
counts how many uses of a function involve a newline and how many don't,
and then the second phase removes newlines in the case of calls where a
newline is used one fourth of the times or less.

This approach is only moderately reliable, and all patches have been
checked to ensure that the newline is not needed.

This also converts some cases of string concatenation to single strings in
modified code, as this improves greppability.

// <smpl>
virtual after_start

@initialize:ocaml@
@@

let withnl = Hashtbl.create 101
let withoutnl = Hashtbl.create 101

let ignore =
  ["strcpy";"strlcpy";"strcat";"strlcat";"strcmp";"strncmp";"strcspn";
    "strsep";"sprintf";"printf";"strncasecmp";"seq_printf";"strstr";"strspn";
    "strlen";"strpbrk";"strtok_r";"memcmp";"memcpy"]

let dignore = ["tools";"samples"]

let inc tbl k =
  let cell =
    try Hashtbl.find tbl k
    with Not_found ->
      let cell = ref 0 in
      Hashtbl.add tbl k cell;
      cell in
  cell := 1 + !cell

let endnl c =
  let len = String.length c in
  try
    String.get c (len-3) = '\\' && String.get c (len-2) = 'n' &&
    String.get c (len-1) = '"'
  with _ -> false

let clean_string s extra =
  let pieces = Str.split (Str.regexp "\" \"") s in
  let nonempty s =
    not (s = "") && String.get s 0 = '"' && not (String.get s 1 = '"') in
  let rec loop = function
      [] -> []
    | [x] -> [x]
    | x::y::rest ->
	if nonempty x && nonempty y
	then
	  let xend = String.get x (String.length x - 2) = ' ' in
	  let yend = String.get y 1 = ' ' in
	  match (xend,yend) with
	    (true,false) | (false,true) -> x :: (loop (y::rest))
	  | (true,true) ->
	      x :: (loop (((String.sub y 0 (String.length y - 2))^"\"")::rest))
	  | (false,false) ->
	      ((String.sub x 0 (String.length x - 1)) ^ " \"") ::
	      (loop (y::rest))
	else x :: (loop (y::rest)) in
  (String.concat "" (loop pieces))^extra

@r depends on !after_start@
constant char[] c;
expression list[n] es;
identifier f;
position p;
@@

f@p(es,c,...)

@script:ocaml@
f << r.f;
n << r.n;
p << r.p;
c << r.c;
@@

let pieces = Str.split (Str.regexp "/") (List.hd p).file in
if not (List.mem f ignore) &&
  List.for_all (fun x -> not (List.mem x pieces)) dignore
then
  (if endnl c
  then inc withnl (f,n)
  else inc withoutnl (f,n))

@finalize:ocaml depends on !after_start@
w1 << merge.withnl;
w2 << merge.withoutnl;
@@

let names = ref [] in
let incn tbl k v =
  let cell =
    try Hashtbl.find tbl k
    with Not_found ->
      begin
	let cell = ref 0 in
	Hashtbl.add tbl k cell;
	cell
      end in
  (if not (List.mem k !names) then names := k :: !names);
  cell := !v + !cell in
List.iter (function w -> Hashtbl.iter (incn withnl) w) w1;
List.iter (function w -> Hashtbl.iter (incn withoutnl) w) w2;

List.iter
  (function name ->
    let wth = try !(Hashtbl.find withnl name) with _ -> 0 in
    let wo = try !(Hashtbl.find withoutnl name) with _ -> 0 in
    if wth > 0 && wth <= wo / 3 then Hashtbl.remove withnl name
    else (Printf.eprintf "dropping %s %d %d\n" (fst name) wth wo; Hashtbl.remove withoutnl name; Hashtbl.remove withnl name))
  !names;

let it = new iteration() in
it#add_virtual_rule After_start;
it#register()

@s1 depends on after_start@
constant char[] c;
expression list[n] es;
identifier f;
position p;
@@

f(es,c@p,...)

@script:ocaml s2@
f << s1.f;
n << s1.n;
c << s1.c;
newc;
@@

try
  let _ = Hashtbl.find withnl (f,n) in
  if endnl c
  then Coccilib.include_match false
  else newc :=
    make_expr(clean_string (String.sub c 0 (String.length c - 1)) "\\n\"")
with Not_found ->
try
  let _ = Hashtbl.find withoutnl (f,n) in
  if endnl c
  then newc :=
    make_expr(clean_string (String.sub c 0 (String.length c - 3)) "\"")
  else Coccilib.include_match false
with Not_found -> Coccilib.include_match false

@@
constant char[] s1.c;
position s1.p;
expression s2.newc;
@@

- c@p
+ newc
// </smpl>

---

 arch/arm/mach-davinci/board-da850-evm.c                 |    4 ++--
 drivers/block/DAC960.c                                  |    4 ++--
 drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c        |   12 ++++++++----
 drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c      |    2 +-
 drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c   |    2 +-
 drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c |    2 +-
 drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c     |    2 +-
 drivers/media/usb/pvrusb2/pvrusb2-hdw.c                 |    3 ++-
 drivers/s390/block/dasd_diag.c                          |    3 +--
 drivers/scsi/hpsa.c                                     |    2 +-
 fs/dlm/plock.c                                          |    3 +--
 fs/ext2/super.c                                         |    2 +-
 fs/hpfs/dnode.c                                         |    3 ++-
 net/dccp/ackvec.c                                       |    2 +-
 net/openvswitch/conntrack.c                             |    4 ++--
 tools/perf/tests/dso-data.c                             |    9 +++++----
 16 files changed, 32 insertions(+), 27 deletions(-)

^ permalink raw reply	[flat|nested] 96+ messages in thread

end of thread, other threads:[~2018-01-05 13:57 UTC | newest]

Thread overview: 96+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-27 14:51 [PATCH 00/12] drop unneeded newline Julia Lawall
2017-12-27 14:51 ` Julia Lawall
2017-12-27 14:51 ` [Cluster-devel] " Julia Lawall
2017-12-27 14:51 ` Julia Lawall
2017-12-27 14:51 ` Julia Lawall
2017-12-27 14:51 ` Julia Lawall
2017-12-27 14:51 ` [PATCH 01/12] dac960: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51 ` [PATCH 02/12] dlm: " Julia Lawall
2017-12-27 14:51   ` [Cluster-devel] " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51 ` [PATCH 03/12] net: dccp: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2018-01-02 18:50   ` David Miller
2018-01-02 18:50     ` David Miller
2018-01-02 18:50     ` David Miller
2017-12-27 14:51 ` [PATCH 04/12] ext2: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-28  4:30   ` Theodore Ts'o
2017-12-28  4:30     ` Theodore Ts'o
2018-01-02 13:42     ` Jan Kara
2018-01-02 13:42       ` Jan Kara
2017-12-27 14:51 ` [PATCH 05/12] openvswitch: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2018-01-02 18:50   ` David Miller
2018-01-02 18:50     ` David Miller
2017-12-27 14:51 ` [PATCH 06/12] [S390] dasd: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51 ` [PATCH 07/12] ARM: davinci: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2018-01-05 13:56   ` Sekhar Nori
2018-01-05 13:57     ` Sekhar Nori
2018-01-05 13:56     ` Sekhar Nori
2017-12-27 14:51 ` [PATCH 08/12] perf test: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51 ` [PATCH 09/12] [media] pvrusb2: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51 ` [PATCH 10/12] hpsa: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2018-01-04  4:29   ` Martin K. Petersen
2018-01-04  4:29     ` Martin K. Petersen
2017-12-27 14:51 ` [PATCH 11/12] drm/amd/powerplay: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2017-12-27 15:40   ` Michel Dänzer
2017-12-27 15:40     ` Michel Dänzer
2017-12-27 15:40     ` Michel Dänzer
2017-12-27 20:11     ` Julia Lawall
2017-12-27 20:11       ` Julia Lawall
2017-12-27 20:11       ` Julia Lawall
2018-01-01 21:07   ` Alex Deucher
2018-01-01 21:07     ` Alex Deucher
2018-01-01 21:07     ` Alex Deucher
2017-12-27 14:51 ` [PATCH 12/12] hpfs: " Julia Lawall
2017-12-27 14:51   ` Julia Lawall
2018-01-01 20:23   ` Mikulas Patocka
2018-01-01 20:23     ` Mikulas Patocka
2018-01-02 13:52 ` [Cluster-devel] [PATCH 00/12] " Bob Peterson
2018-01-02 13:52   ` Bob Peterson
2018-01-02 13:52   ` Bob Peterson
2018-01-02 13:52   ` Bob Peterson
2018-01-02 13:52   ` Bob Peterson
2018-01-02 13:52   ` Bob Peterson
2018-01-02 13:55   ` Julia Lawall
2018-01-02 13:55     ` Julia Lawall
2018-01-02 13:55     ` Julia Lawall
2018-01-02 13:55     ` Julia Lawall
2018-01-02 13:55     ` Julia Lawall
2018-01-02 13:56   ` Bob Peterson
2018-01-02 13:56     ` Bob Peterson
2018-01-02 13:56     ` Bob Peterson
2018-01-02 13:56     ` Bob Peterson
2018-01-02 13:56     ` Bob Peterson
2018-01-02 14:00     ` Julia Lawall
2018-01-02 14:00       ` Julia Lawall
2018-01-02 14:00       ` Julia Lawall
2018-01-02 14:00       ` Julia Lawall
2018-01-02 14:00       ` Julia Lawall
2018-01-02 14:00       ` Julia Lawall
2018-01-02 15:11       ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:11         ` Bart Van Assche
2018-01-02 15:16         ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall
2018-01-02 15:16           ` Julia Lawall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.