#!/usr/bin/perl
###############################################################################
#
#  Copyright 2008-2014 Broadcom Corporation
#
#  This program is the proprietary software of Broadcom Corporation
#  and/or its licensors, and may only be used, duplicated, modified or
#  distributed pursuant to the terms and conditions of a separate,
#  written license agreement executed between you and Broadcom (an
#  "Authorized License").  Except as set forth in an Authorized License,
#  Broadcom grants no license (express or implied), right to use, or
#  waiver of any kind with respect to the Software, and Broadcom
#  expressly reserves all rights in and to the Software and all
#  intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
#  LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND
#  SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE
#  SOFTWARE.
#
#  Except as expressly set forth in the Authorized License,
#
#  1.  This program, including its structure, sequence and organization,
#  constitutes the valuable trade secrets of Broadcom, and you shall use
#  all reasonable efforts to protect the confidentiality thereof, and to
#  use this information only in connection with your use of Broadcom
#  integrated circuit products.
#
#  2.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED
#  "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
#  REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR
#  OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
#  DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
#  NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
#  ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
#  CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING OUT
#  OF USE OR PERFORMANCE OF THE SOFTWARE.
#
#  3.  TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM
#  OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL,
#  INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY
#  RELATING TO YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF
#  BROADCOM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii)
#  ANY AMOUNT IN EXCESS OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE
#  ITSELF OR U.S. $1, WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY
#  NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED
#  REMEDY.
#
###############################################################################
#
#  Script:  strip_c_copyright.pl
#
#  Purpose: This script removes a copyright header from a c/c++
#           file. The file is passed into the perl script via STDIN, so this
#           script must be used in conjunction with something like 'cat'.
#
#  Usage:   cat <file> | ./strip_c_copyright.pl
#
#
#  Previous attemps at c-style regular expressions...
#    s#(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
#    s#(?:\/\*.*Copyright\(c\)(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright\(c\)(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
#    good => s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*\n##;
#    good => s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+|(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;
#
#  The following regex can be used for removing redundant C++
#  copyright header from libssd files...
#
#  s#\/\/\*+[^*]*Copyright[^*]*\/\/\*+#//****************************************************************************#;
#
###############################################################################

$/ = undef;
$_ = <>;

#
# The following regex handles the old Teknovus-style copyright headers
#
# e.g. "/*         Copyright(c) 2008-2012 Broadcom, Corp.        */"
#
#s#(?:\/\*.*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;

#
# The following regex handles the new Broadcom standard copyright headers
#
s#(?:\/\*(?:[^*]|(?:\*+[^*\/]))*Copyright(?:[^*]|(?:\*+[^*\/]))*\*+\/).*(?:\s)+##;
print;

