379 строки
8.8 KiB
Bash
Исполняемый файл
379 строки
8.8 KiB
Bash
Исполняемый файл
#!/bin/bash
|
|
echo `cppcheck --version`
|
|
|
|
LOG_FILE=/tmp/cppcheck_proj.txt
|
|
|
|
SCRIPT_DIR=$(dirname "$0")
|
|
case $SCRIPT_DIR in
|
|
"/"*)
|
|
;;
|
|
".")
|
|
SCRIPT_DIR=$(pwd)
|
|
;;
|
|
*)
|
|
SCRIPT_DIR=$(pwd)/$(dirname "$0")
|
|
;;
|
|
esac
|
|
|
|
TOPDIR="$SCRIPT_DIR/.."
|
|
|
|
echo "" > ${LOG_FILE}
|
|
for dirname in ${TOPDIR}/src; do
|
|
echo "Running cppcheck on $dirname... (can be long)"
|
|
if ! cppcheck --inline-suppr --template='{file}:{line},{severity},{id},{message}' \
|
|
--enable=all --inconclusive --std=posix \
|
|
-DCPPCHECK -D__cplusplus=201103L -DACCEPT_USE_OF_DEPRECATED_PROJ_API_H -DNAN \
|
|
-I${TOPDIR}/src -I${TOPDIR}/include \
|
|
"$dirname" \
|
|
-j 8 >>${LOG_FILE} 2>&1 ; then
|
|
echo "cppcheck failed"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
ret_code=0
|
|
|
|
grep -v "unmatchedSuppression" ${LOG_FILE} \
|
|
| grep -v "nn.hpp" \
|
|
| grep -v "nlohmann/json.hpp" \
|
|
| grep -v "wkt1_generated_parser" \
|
|
| grep -v "wkt2_generated_parser" \
|
|
| grep -v "passedByValue,Function parameter 'coo' should be passed by const reference" \
|
|
| grep -v "passedByValue,Function parameter 'lpz' should be passed by const reference" \
|
|
| grep -v "passedByValue,Function parameter 'xyz' should be passed by const reference" \
|
|
| grep -v "passedByValue,Function parameter 'in' should be passed by const reference" \
|
|
| grep -v "knownConditionTrueFalse,Condition '!allowEmptyIntersection' is always false" \
|
|
| grep -v -e "unitconvert.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \
|
|
| grep -v -e "helmert.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \
|
|
| grep -v -e "molodensky.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \
|
|
| grep -v -e "vgridshift.*unreadVariable,Variable 'point.*' is assigned a value that is never used" \
|
|
> ${LOG_FILE}.tmp
|
|
mv ${LOG_FILE}.tmp ${LOG_FILE}
|
|
|
|
if grep "null pointer" ${LOG_FILE} ; then
|
|
echo "Null pointer check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "duplicateBreak" ${LOG_FILE} ; then
|
|
echo "duplicateBreak check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "duplicateBranch" ${LOG_FILE} ; then
|
|
echo "duplicateBranch check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "uninitMemberVar" ${LOG_FILE} ; then
|
|
echo "uninitMemberVar check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "useInitializationList" ${LOG_FILE} ; then
|
|
echo "uninitMemberVar check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "clarifyCalculation" ${LOG_FILE} ; then
|
|
echo "clarifyCalculation check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "invalidPrintfArgType_uint" ${LOG_FILE} ; then
|
|
echo "invalidPrintfArgType_uint check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "catchExceptionByValue" ${LOG_FILE} ; then
|
|
echo "catchExceptionByValue check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "memleakOnRealloc" ${LOG_FILE} ; then
|
|
echo "memleakOnRealloc check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "arrayIndexOutOfBoundsCond" ${LOG_FILE} ; then
|
|
echo "arrayIndexOutOfBoundsCond check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "arrayIndexOutOfBounds," ${LOG_FILE} ; then
|
|
echo "arrayIndexOutOfBounds check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "syntaxError" ${LOG_FILE} | grep -v "is invalid C code" ; then
|
|
echo "syntaxError check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "memleak," ${LOG_FILE} ; then
|
|
echo "memleak check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "eraseDereference" ${LOG_FILE} ; then
|
|
echo "eraseDereference check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "memsetClass," ${LOG_FILE} ; then
|
|
echo "memsetClass check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "uninitvar," ${LOG_FILE} ; then
|
|
echo "uninitvar check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "uninitdata," ${LOG_FILE} ; then
|
|
echo "uninitdata check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "va_list_usedBeforeStarted" ${LOG_FILE} ; then
|
|
echo "va_list_usedBeforeStarted check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "duplInheritedMember" ${LOG_FILE} ; then
|
|
echo "duplInheritedMember check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "terminateStrncpy" ${LOG_FILE} ; then
|
|
echo "terminateStrncpy check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "operatorEqVarError" ${LOG_FILE} ; then
|
|
echo "operatorEqVarError check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "uselessAssignmentPtrArg" ${LOG_FILE} ; then
|
|
echo "uselessAssignmentPtrArg check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "bufferNotZeroTerminated" ${LOG_FILE} ; then
|
|
echo "bufferNotZeroTerminated check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "sizeofDivisionMemfunc" ${LOG_FILE} ; then
|
|
echo "sizeofDivisionMemfunc check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "selfAssignment" ${LOG_FILE} ; then
|
|
echo "selfAssignment check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "invalidPrintfArgType_sint" ${LOG_FILE} ; then
|
|
echo "invalidPrintfArgType_sint check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "redundantAssignInSwitch" ${LOG_FILE} ; then
|
|
echo "redundantAssignInSwitch check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "publicAllocationError" ${LOG_FILE} ; then
|
|
echo "publicAllocationError check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "invalidScanfArgType_int" ${LOG_FILE} ; then
|
|
echo "invalidScanfArgType_int check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "invalidscanf," ${LOG_FILE} ; then
|
|
echo "invalidscanf check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "moduloAlwaysTrueFalse" ${LOG_FILE} ; then
|
|
echo "moduloAlwaysTrueFalse check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "charLiteralWithCharPtrCompare" ${LOG_FILE} ; then
|
|
echo "charLiteralWithCharPtrCompare check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "noConstructor" ${LOG_FILE} ; then
|
|
echo "noConstructor check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "noExplicitConstructor" ${LOG_FILE} ; then
|
|
echo "noExplicitConstructor check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "noCopyConstructor" ${LOG_FILE} ; then
|
|
echo "noCopyConstructor check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "passedByValue" ${LOG_FILE} ; then
|
|
echo "passedByValue check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "postfixOperator" ${LOG_FILE} ; then
|
|
echo "postfixOperator check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "redundantCopy" ${LOG_FILE} ; then
|
|
echo "redundantCopy check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "stlIfStrFind" ${LOG_FILE} ; then
|
|
echo "stlIfStrFind check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "functionStatic" ${LOG_FILE} ; then
|
|
echo "functionStatic check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "knownConditionTrueFalse" ${LOG_FILE} ; then
|
|
echo "knownConditionTrueFalse check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "arrayIndexThenCheck" ${LOG_FILE} ; then
|
|
echo "arrayIndexThenCheck check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unusedPrivateFunction" ${LOG_FILE} ; then
|
|
echo "unusedPrivateFunction check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "redundantCondition" ${LOG_FILE} ; then
|
|
echo "redundantCondition check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unusedStructMember" ${LOG_FILE} ; then
|
|
echo "unusedStructMember check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "multiCondition" ${LOG_FILE} ; then
|
|
echo "multiCondition check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "duplicateExpression" ${LOG_FILE} ; then
|
|
echo "duplicateExpression check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "operatorEq" ${LOG_FILE} ; then
|
|
echo "operatorEq check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "truncLongCastAssignment" ${LOG_FILE} ; then
|
|
echo "truncLongCastAssignment check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "exceptRethrowCopy" ${LOG_FILE} ; then
|
|
echo "exceptRethrowCopy check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unusedVariable" ${LOG_FILE} ; then
|
|
echo "unusedVariable check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unsafeClassCanLeak" ${LOG_FILE} ; then
|
|
echo "unsafeClassCanLeak check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unsignedLessThanZero" ${LOG_FILE} ; then
|
|
echo "unsignedLessThanZero check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unpreciseMathCall" ${LOG_FILE} ; then
|
|
echo "unpreciseMathCall check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unreachableCode" ${LOG_FILE} ; then
|
|
echo "unreachableCode check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "clarifyCondition" ${LOG_FILE} ; then
|
|
echo "clarifyCondition check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "redundantIfRemove" ${LOG_FILE} ; then
|
|
echo "redundantIfRemove check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unassignedVariable" ${LOG_FILE} ; then
|
|
echo "unassignedVariable check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "redundantAssignment" ${LOG_FILE} ; then
|
|
echo "redundantAssignment check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "unreadVariable" ${LOG_FILE} ; then
|
|
echo "unreadVariable check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if grep "AssignmentAddressToInteger" ${LOG_FILE} ; then
|
|
echo "AssignmentAddressToInteger check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
|
|
# Check any remaining errors
|
|
if grep "error," ${LOG_FILE} | grep -v "uninitvar" | \
|
|
grep -v "memleak," | grep -v "memleakOnRealloc" | \
|
|
grep -v "is invalid C code" ; then
|
|
|
|
echo "Errors check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
# Check any remaining warnings
|
|
if grep "warning," ${LOG_FILE}; then
|
|
echo "Warnings check failed"
|
|
ret_code=1
|
|
fi
|
|
|
|
if [ ${ret_code} = 0 ]; then
|
|
echo "cppcheck succeeded"
|
|
fi
|
|
|
|
exit ${ret_code}
|