Commit 7f904d7e authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Greg Kroah-Hartman

treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 505

Based on 1 normalized pattern(s):

  gplv2

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-only

has been chosen to replace the boilerplate/reference in 58 file(s).
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarEnrico Weigelt <info@metux.net>
Reviewed-by: default avatarAllison Randal <allison@lohutok.net>
Reviewed-by: default avatarKate Stewart <kstewart@linuxfoundation.org>
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190604081207.556988620@linutronix.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 775c8a3d
// SPDX-License-Identifier: GPL-2.0-only
/* /*
* PowerPC 64-bit swsusp implementation * PowerPC 64-bit swsusp implementation
* *
* Copyright 2006 Johannes Berg <johannes@sipsolutions.net> * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
*
* GPLv2
*/ */
#include <asm/iommu.h> #include <asm/iommu.h>
......
/* SPDX-License-Identifier: GPL-2.0-only */
/* /*
* PowerPC 64-bit swsusp implementation * PowerPC 64-bit swsusp implementation
* *
* Copyright 2006 Johannes Berg <johannes@sipsolutions.net> * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
*
* GPLv2
*/ */
#include <linux/threads.h> #include <linux/threads.h>
......
// SPDX-License-Identifier: GPL-2.0-only
/* /*
* Copyright (C) 2017 James.Bottomley@HansenPartnership.com * Copyright (C) 2017 James.Bottomley@HansenPartnership.com
*
* GPLv2
*/ */
#include <linux/slab.h> #include <linux/slab.h>
#include "tpm-dev.h" #include "tpm-dev.h"
......
// SPDX-License-Identifier: GPL-2.0-only
/* /*
* mac80211 debugfs for wireless PHYs * mac80211 debugfs for wireless PHYs
* *
* Copyright 2007 Johannes Berg <johannes@sipsolutions.net> * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
* Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright 2013-2014 Intel Mobile Communications GmbH
* Copyright (C) 2018 - 2019 Intel Corporation * Copyright (C) 2018 - 2019 Intel Corporation
*
* GPLv2
*
*/ */
#include <linux/debugfs.h> #include <linux/debugfs.h>
......
/* GPLv2 Copyright(c) 2017 Jesper Dangaard Brouer, Red Hat, Inc. // SPDX-License-Identifier: GPL-2.0-only
/* Copyright(c) 2017 Jesper Dangaard Brouer, Red Hat, Inc.
*/ */
static const char *__doc__ = static const char *__doc__ =
" XDP redirect with a CPU-map type \"BPF_MAP_TYPE_CPUMAP\""; " XDP redirect with a CPU-map type \"BPF_MAP_TYPE_CPUMAP\"";
......
// SPDX-License-Identifier: GPL-2.0-only
/// Remove casting the values returned by memory allocation functions /// Remove casting the values returned by memory allocation functions
/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. /// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc.
/// ///
...@@ -8,8 +9,8 @@ ...@@ -8,8 +9,8 @@
//# need some reformatting. //# need some reformatting.
// //
// Confidence: High // Confidence: High
// Copyright: (C) 2014 Himangi Saraogi GPLv2. // Copyright: (C) 2014 Himangi Saraogi
// Copyright: (C) 2017 Himanshu Jha GPLv2. // Copyright: (C) 2017 Himanshu Jha
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
// //
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0 /// Use *_pool_zalloc rather than *_pool_alloc followed by memset with 0
/// ///
// Copyright: (C) 2015 Intel Corp. GPLv2. // Copyright: (C) 2015 Intel Corp.
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
// //
// Keywords: dma_pool_zalloc, pci_pool_zalloc // Keywords: dma_pool_zalloc, pci_pool_zalloc
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Use zeroing allocator rather than allocator followed by memset with 0 /// Use zeroing allocator rather than allocator followed by memset with 0
/// ///
...@@ -6,9 +7,9 @@ ...@@ -6,9 +7,9 @@
/// matched code has to be contiguous /// matched code has to be contiguous
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU.
// Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6.
// Copyright: (C) 2017 Himanshu Jha GPLv2. // Copyright: (C) 2017 Himanshu Jha
// URL: http://coccinelle.lip6.fr/rules/kzalloc.html // URL: http://coccinelle.lip6.fr/rules/kzalloc.html
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
// //
......
// SPDX-License-Identifier: GPL-2.0-only
/// Detect BQ27XXX_DATA structures with identical registers, dm registers or /// Detect BQ27XXX_DATA structures with identical registers, dm registers or
/// properties. /// properties.
//# Doesn't unfold macros used in register or property fields. //# Doesn't unfold macros used in register or property fields.
//# Requires OCaml scripting //# Requires OCaml scripting
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2017 Julia Lawall, Inria/LIP6, GPLv2. // Copyright: (C) 2017 Julia Lawall, Inria/LIP6,
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Requires: 1.0.7 // Requires: 1.0.7
// Keywords: BQ27XXX_DATA // Keywords: BQ27XXX_DATA
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...)) /// Use ERR_CAST inlined function instead of ERR_PTR(PTR_ERR(...))
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2009, 2010 Julia Lawall, DIKU.
// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: // Options:
// //
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use kstrdup rather than duplicating its implementation /// Use kstrdup rather than duplicating its implementation
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use kmemdup rather than duplicating its implementation /// Use kmemdup rather than duplicating its implementation
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use memdup_user rather than duplicating its implementation /// Use memdup_user rather than duplicating its implementation
/// This is a little bit restricted to reduce false positives /// This is a little bit restricted to reduce false positives
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE /// Make sure pm_runtime_* calls does not use unnecessary IS_ERR_VALUE
/// ///
// Keywords: pm_runtime // Keywords: pm_runtime
// Confidence: Medium // Confidence: Medium
// Copyright (C) 2013 Texas Instruments Incorporated - GPLv2. // Copyright (C) 2013 Texas Instruments Incorporated -
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --include-headers // Options: --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR /// Use PTR_ERR_OR_ZERO rather than if(IS_ERR(...)) + PTR_ERR
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
// //
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Use resource_size function on resource object /// Use resource_size function on resource object
/// instead of explicit computation. /// instead of explicit computation.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2009, 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2009, 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2009, 2010 Julia Lawall, DIKU.
// Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: // Options:
// //
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find missing clk_puts. /// Find missing clk_puts.
/// ///
//# This only signals a missing clk_put when there is a clk_put later //# This only signals a missing clk_put when there is a clk_put later
...@@ -5,8 +6,8 @@ ...@@ -5,8 +6,8 @@
//# False positives can be due to loops. //# False positives can be due to loops.
// //
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: // Options:
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find uses of standard freeing functons on values allocated using devm_ /// Find uses of standard freeing functons on values allocated using devm_
/// functions. Values allocated using the devm_functions are freed when /// functions. Values allocated using the devm_functions are freed when
/// the device is detached, and thus the use of the standard freeing /// the device is detached, and thus the use of the standard freeing
...@@ -14,8 +15,8 @@ ...@@ -14,8 +15,8 @@
/// less reliable in these cases. /// less reliable in these cases.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2011 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2011 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2011 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2011 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// NULL check before some freeing functions is not needed. /// NULL check before some freeing functions is not needed.
/// ///
/// Based on checkpatch warning /// Based on checkpatch warning
/// "kfree(NULL) is safe this check is probably not required" /// "kfree(NULL) is safe this check is probably not required"
/// and kfreeaddr.cocci by Julia Lawall. /// and kfreeaddr.cocci by Julia Lawall.
/// ///
// Copyright: (C) 2014 Fabian Frederick. GPLv2. // Copyright: (C) 2014 Fabian Frederick.
// Comments: - // Comments: -
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find missing iounmaps. /// Find missing iounmaps.
/// ///
//# This only signals a missing iounmap when there is an iounmap later //# This only signals a missing iounmap when there is an iounmap later
...@@ -5,8 +6,8 @@ ...@@ -5,8 +6,8 @@
//# False positives can be due to loops. //# False positives can be due to loops.
// //
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: // Options:
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find a use after free. /// Find a use after free.
//# Values of variables may imply that some //# Values of variables may imply that some
//# execution paths are not possible, resulting in false positives. //# execution paths are not possible, resulting in false positives.
...@@ -5,9 +6,9 @@ ...@@ -5,9 +6,9 @@
//# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument //# SCTP_DBG_OBJCNT_DEC that do not actually evaluate their argument
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Free of a structure field /// Free of a structure field
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find missing pci_free_consistent for every pci_alloc_consistent. /// Find missing pci_free_consistent for every pci_alloc_consistent.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2013 Petr Strnad. GPLv2. // Copyright: (C) 2013 Petr Strnad.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Keywords: pci_free_consistent, pci_alloc_consistent // Keywords: pci_free_consistent, pci_alloc_consistent
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Device node iterators put the previous value of the index variable, so an /// Device node iterators put the previous value of the index variable, so an
/// explicit put causes a double put. /// explicit put causes a double put.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2. // Copyright: (C) 2015 Julia Lawall, Inria.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
// Requires: 1.0.4 // Requires: 1.0.4
......
// SPDX-License-Identifier: GPL-2.0-only
/// These iterators only exit normally when the loop cursor is NULL, so there /// These iterators only exit normally when the loop cursor is NULL, so there
/// is no point to call of_node_put on the final value. /// is no point to call of_node_put on the final value.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Many iterators have the property that the first argument is always bound /// Many iterators have the property that the first argument is always bound
/// to a real list element, never NULL. /// to a real list element, never NULL.
//# False positives arise for some iterators that do not have this property, //# False positives arise for some iterators that do not have this property,
...@@ -6,9 +7,9 @@ ...@@ -6,9 +7,9 @@
//# or return). //# or return).
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// list_for_each_entry uses its first argument to get from one element of /// list_for_each_entry uses its first argument to get from one element of
/// the list to the next, so it is usually not a good idea to reassign it. /// the list to the next, so it is usually not a good idea to reassign it.
/// The first rule finds such a reassignment and the second rule checks /// The first rule finds such a reassignment and the second rule checks
/// that there is a path from the reassignment back to the top of the loop. /// that there is a path from the reassignment back to the top of the loop.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// If list_for_each_entry, etc complete a traversal of the list, the iterator /// If list_for_each_entry, etc complete a traversal of the list, the iterator
/// variable ends up pointing to an address at an offset from the list head, /// variable ends up pointing to an address at an offset from the list head,
/// and not a meaningful structure. Thus this value should not be used after /// and not a meaningful structure. Thus this value should not be used after
...@@ -7,8 +8,8 @@ ...@@ -7,8 +8,8 @@
//#may also cause a report to be a false positive. //#may also cause a report to be a false positive.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LIP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find functions that refer to GFP_KERNEL but are called with locks held. /// Find functions that refer to GFP_KERNEL but are called with locks held.
//# The proposed change of converting the GFP_KERNEL is not necessarily the //# The proposed change of converting the GFP_KERNEL is not necessarily the
//# correct one. It may be desired to unlock the lock, or to not call the //# correct one. It may be desired to unlock the lock, or to not call the
//# function under the lock in the first place. //# function under the lock in the first place.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Nicolas Palix. GPLv2. // Copyright: (C) 2012 Nicolas Palix.
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find double locks. False positives may occur when some paths cannot /// Find double locks. False positives may occur when some paths cannot
/// occur at execution, due to the values of variables, and when there is /// occur at execution, due to the values of variables, and when there is
/// an intervening function call that releases the lock. /// an intervening function call that releases the lock.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find nested lock+irqsave functions that use the same flags variables /// Find nested lock+irqsave functions that use the same flags variables
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find missing unlocks. This semantic match considers the specific case /// Find missing unlocks. This semantic match considers the specific case
/// where the unlock is missing from an if branch, and there is a lock /// where the unlock is missing from an if branch, and there is a lock
/// before the if and an unlock after the if. False positives are due to /// before the if and an unlock after the if. False positives are due to
...@@ -6,9 +7,9 @@ ...@@ -6,9 +7,9 @@
/// function call that releases the lock. /// function call that releases the lock.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element /// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element
/// ///
//# This makes an effort to find cases where ARRAY_SIZE can be used such as //# This makes an effort to find cases where ARRAY_SIZE can be used such as
...@@ -6,7 +7,7 @@ ...@@ -6,7 +7,7 @@
//# division of the two sizeofs by ARRAY_SIZE. //# division of the two sizeofs by ARRAY_SIZE.
// //
// Confidence: High // Confidence: High
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. // Copyright: (C) 2014 Himangi Saraogi.
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Correct the size argument to alloc functions /// Correct the size argument to alloc functions
/// ///
//# This makes an effort to find cases where the argument to sizeof is wrong //# This makes an effort to find cases where the argument to sizeof is wrong
...@@ -8,7 +9,7 @@ ...@@ -8,7 +9,7 @@
//# may need some reformatting. //# may need some reformatting.
// //
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. // Copyright: (C) 2014 Himangi Saraogi.
// Comments: // Comments:
// Options: // Options:
......
// SPDX-License-Identifier: GPL-2.0-only
/// Remove unneeded conversion to bool /// Remove unneeded conversion to bool
/// ///
//# Relational and logical operators evaluate to bool, //# Relational and logical operators evaluate to bool,
//# explicit conversion is overly verbose and unneeded. //# explicit conversion is overly verbose and unneeded.
// //
// Copyright: (C) 2016 Andrew F. Davis <afd@ti.com> GPLv2. // Copyright: (C) 2016 Andrew F. Davis <afd@ti.com>
virtual patch virtual patch
virtual context virtual context
......
// SPDX-License-Identifier: GPL-2.0-only
/// Bool initializations should use true and false. Bool tests don't need /// Bool initializations should use true and false. Bool tests don't need
/// comparisons. Based on contributions from Joe Perches, Rusty Russell /// comparisons. Based on contributions from Joe Perches, Rusty Russell
/// and Bruce W Allan. /// and Bruce W Allan.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --include-headers // Options: --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use BUG_ON instead of a if condition followed by BUG. /// Use BUG_ON instead of a if condition followed by BUG.
/// ///
//# This makes an effort to find cases where BUG() follows an if //# This makes an effort to find cases where BUG() follows an if
...@@ -6,7 +7,7 @@ ...@@ -6,7 +7,7 @@
//# as argument. //# as argument.
// //
// Confidence: High // Confidence: High
// Copyright: (C) 2014 Himangi Saraogi. GPLv2. // Copyright: (C) 2014 Himangi Saraogi.
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
///Find conditions where if and else branch are functionally ///Find conditions where if and else branch are functionally
// identical. // identical.
// //
...@@ -37,7 +38,7 @@ ...@@ -37,7 +38,7 @@
// All other cases look like bugs or at least lack of documentation // All other cases look like bugs or at least lack of documentation
// //
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2016 Nicholas Mc Guire, OSADL. GPLv2. // Copyright: (C) 2016 Nicholas Mc Guire, OSADL.
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// PTR_ERR should be applied before its argument is reassigned, typically /// PTR_ERR should be applied before its argument is reassigned, typically
/// to NULL /// to NULL
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find duplicate field initializations. This has a high rate of false /// Find duplicate field initializations. This has a high rate of false
/// positives due to #ifdefs, which Coccinelle is not aware of in a structure /// positives due to #ifdefs, which Coccinelle is not aware of in a structure
/// initialization. /// initialization.
/// ///
// Confidence: Low // Confidence: Low
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// The address of a variable or field is likely always to be non-zero. /// The address of a variable or field is likely always to be non-zero.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find confusingly indented code in or after an if. An if branch should /// Find confusingly indented code in or after an if. An if branch should
/// be indented. The code following an if should not be indented. /// be indented. The code following an if should not be indented.
/// Sometimes, code after an if that is indented is actually intended to be /// Sometimes, code after an if that is indented is actually intended to be
...@@ -8,9 +9,9 @@ ...@@ -8,9 +9,9 @@
//# is not visually aligned may be considered to be in the same column. //# is not visually aligned may be considered to be in the same column.
// //
// Confidence: Low // Confidence: Low
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// sizeof when applied to a pointer typed expression gives the size of /// sizeof when applied to a pointer typed expression gives the size of
/// the pointer /// the pointer
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Check for constants that are added but are used elsewhere as bitmasks /// Check for constants that are added but are used elsewhere as bitmasks
/// The results should be checked manually to ensure that the nonzero /// The results should be checked manually to ensure that the nonzero
/// bits in the two constants are actually disjoint. /// bits in the two constants are actually disjoint.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2013 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6. GPLv2. // Copyright: (C) 2013 Gilles Muller, INRIA/LIP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Remove unneeded variable used to store return value. /// Remove unneeded variable used to store return value.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: Comments on code can be deleted if near code that is removed. // Comments: Comments on code can be deleted if near code that is removed.
// "when strict" can be removed to get more hits, but adds false // "when strict" can be removed to get more hits, but adds false
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// Remove unneeded semicolon. /// Remove unneeded semicolon.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: Some false positives on empty default cases in switch statements. // Comments: Some false positives on empty default cases in switch statements.
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Use WARN(1,...) rather than printk followed by WARN_ON(1) /// Use WARN(1,...) rather than printk followed by WARN_ON(1)
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Compare pointer-typed values to NULL rather than 0 /// Compare pointer-typed values to NULL rather than 0
/// ///
//# This makes an effort to choose between !x and x == NULL. !x is used //# This makes an effort to choose between !x and x == NULL. !x is used
...@@ -7,8 +8,8 @@ ...@@ -7,8 +8,8 @@
//# include path. //# include path.
// //
// Confidence: High // Confidence: High
// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Requires: 1.0.0 // Requires: 1.0.0
// Options: // Options:
......
// SPDX-License-Identifier: GPL-2.0-only
/// ///
/// A variable is dereferenced under a NULL test. /// A variable is dereferenced under a NULL test.
/// Even though it is known to be NULL. /// Even though it is known to be NULL.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: -I ... -all_includes can give more complete results // Comments: -I ... -all_includes can give more complete results
// Options: // Options:
......
// SPDX-License-Identifier: GPL-2.0-only
/// The various basic memory allocation functions don't return ERR_PTR /// The various basic memory allocation functions don't return ERR_PTR
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. // Copyright: (C) 2010-2012 Nicolas Palix.
// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// This semantic patch looks for kmalloc etc that are not followed by a /// This semantic patch looks for kmalloc etc that are not followed by a
/// NULL check. It only gives a report in the case where there is some /// NULL check. It only gives a report in the case where there is some
/// error handling code later in the function, which may be helpful /// error handling code later in the function, which may be helpful
...@@ -5,9 +6,9 @@ ...@@ -5,9 +6,9 @@
/// should be. /// should be.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find bit operations that include the same argument more than once /// Find bit operations that include the same argument more than once
//# One source of false positives is when the argument performs a side //# One source of false positives is when the argument performs a side
//# effect. Another source of false positives is when a neutral value //# effect. Another source of false positives is when a neutral value
...@@ -5,9 +6,9 @@ ...@@ -5,9 +6,9 @@
//# same structure as other similar expressions //# same structure as other similar expressions
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Find &&/|| operations that include the same argument more than once /// Find &&/|| operations that include the same argument more than once
//# A common source of false positives is when the expression, or //# A common source of false positives is when the expression, or
//# another expresssion in the same && or || operation, performs a //# another expresssion in the same && or || operation, performs a
//# side effect. //# side effect.
/// ///
// Confidence: Moderate // Confidence: Moderate
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. // Copyright: (C) 2010 Nicolas Palix, DIKU.
// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. // Copyright: (C) 2010 Julia Lawall, DIKU.
// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Comments: // Comments:
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// PTR_ERR should access the value just tested by IS_ERR /// PTR_ERR should access the value just tested by IS_ERR
//# There can be false positives in the patch case, where it is the call to //# There can be false positives in the patch case, where it is the call to
//# IS_ERR that is wrong. //# IS_ERR that is wrong.
/// ///
// Confidence: High // Confidence: High
// Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2. // Copyright: (C) 2012, 2015 Julia Lawall, INRIA.
// Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2. // Copyright: (C) 2012, 2015 Gilles Muller, INRIA.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --no-includes --include-headers // Options: --no-includes --include-headers
......
// SPDX-License-Identifier: GPL-2.0-only
/// Unsigned expressions cannot be lesser than zero. Presence of /// Unsigned expressions cannot be lesser than zero. Presence of
/// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug, /// comparisons 'unsigned (<|<=|>|>=) 0' often indicates a bug,
/// usually wrong type of variable. /// usually wrong type of variable.
...@@ -11,7 +12,7 @@ ...@@ -11,7 +12,7 @@
/// result is used to avoid false positives difficult to detect by other ways /// result is used to avoid false positives difficult to detect by other ways
/// ///
// Confidence: Average // Confidence: Average
// Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd. GPLv2. // Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd.
// URL: http://coccinelle.lip6.fr/ // URL: http://coccinelle.lip6.fr/
// Options: --all-includes // Options: --all-includes
......
// SPDX-License-Identifier: GPL-2.0-only
/* Disk protection for HP/DELL machines. /* Disk protection for HP/DELL machines.
* *
* Copyright 2008 Eric Piel * Copyright 2008 Eric Piel
* Copyright 2009 Pavel Machek <pavel@ucw.cz> * Copyright 2009 Pavel Machek <pavel@ucw.cz>
* Copyright 2012 Sonal Santan * Copyright 2012 Sonal Santan
* Copyright 2014 Pali Rohár <pali.rohar@gmail.com> * Copyright 2014 Pali Rohár <pali.rohar@gmail.com>
*
* GPLv2.
*/ */
#include <stdio.h> #include <stdio.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment