Travis CI เปเบเบฑเบเบเปเบฅเบดเบเบฒเบเปเบงเบฑเบเปเบเบเปเบเบตเปเปเบเบเบขเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบฅเบฐเบเบฒเบเบเบปเบเบชเบญเบเบเบญเบเปเบงเบเบตเปเปเบเป GitHub เปเบเบฑเบเปเบเบปเปเบฒเบเบฒเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบ. เบเบญเบเปเบซเบเบทเบญเปเบเบเบฒเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเบเปเบเบดเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบเปเบฒเบเปเบญเบเบเบฑเบเบเบปเบงเปเบฅเบทเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบเบงเปเบฒเบเบเบงเบฒเบ. เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐ configure Travis CI เปเบฎเบฑเบเบงเบฝเบเบเบฑเบ PVS-Studio เปเบเบเปเบเปเบเบปเบงเบขเปเบฒเบเบฅเบฐเบซเบฑเบ PPSSPP.
เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เบเบฒเบเบเบฑเปเบเบเปเบฒ Travis CI
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบเบฒเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเปเบ GitHub, เบเปเบญเบเบเบตเปเปเบเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบฑเปเบเบขเบนเป, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฐเปเบเบชเปเบฒเบฅเบฑเบ PVS-Studio (เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบ.
เปเบซเปเบเบญเบเปเบเบซเบฒเปเบงเบฑเบเปเบ
เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบชเบญเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเป forked PPSSPP.
เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเปเบเป repository เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบฑเบเบเปเบฒ:
เปเบเบเบฑเบเบเบธเบเบฑเบ, Travis CI เบเปเปเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบฒเบฐเบงเปเบฒเบเปเปเบกเบตเบเปเบฒเปเบเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบ. เบชเบฐเบเบฑเปเบเบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒ.
เปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เบเบฒเบเบเบปเบงเปเบเบเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเบเปเปเบเบงเบเปเบฎเบปเบฒ, เบเบปเบงเบขเปเบฒเบ, เบเบธเบเปเบเบชเปเบฒเบฅเบฑเบ PVS-Studio, เปเบเบดเปเบเบญเบฒเบเบเบฐเบเปเปเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบฅเบฐเบเบธเปเบงเปเปเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ. เบชเบฐเบเบฑเปเบเปเบซเปเปเบเบตเปเบกเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเปเปเบชเปเบฒเบเปเบ Travis CI:
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบเบฒเบ:
- PVS_USERNAME - เบเบทเปเบเบนเปเปเบเป
- PVS_KEY - เบเบฐเปเบ
- MAIL_USER - เบญเบตเปเบกเบงเบเบตเปเบเบฐเปเบเปเปเบเบทเปเบญเบชเบปเปเบเบฅเบฒเบเบเบฒเบ
- MAIL_PASSWORD - เบฅเบฐเบซเบฑเบเบเปเบฒเบเบญเบตเปเบกเบง
เบชเบญเบเบญเบฑเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเบเบฒเบเปเบฅเบทเบญเบ. เบชเบดเปเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบฐเบเบทเบเปเบเปเปเบเบทเปเบญเบชเบปเปเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบเบชเบฐเบเบต. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบเบขเบฒเบเบเบปเบเบฅเบฒเบเบเบฒเบเปเบเบเบฒเบเบญเบทเปเบ, เบเปเบฒเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบตเปเบเบญเบเบเบงเบเปเบเบปเบฒ.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบตเปเบกเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบ:
เปเบเบเบฑเบเบเบธเบเบฑเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเปเบเบฅเป .travis.yml เปเบฅเบฐเบงเบฒเบเปเบงเปเปเบเบฎเบฒเบเบเบญเบเปเบเบเบเบฒเบ. PPSSPP เบกเบตเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบชเปเบฒเบฅเบฑเบ Travis CI เปเบฅเปเบง, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบกเบฑเบเบกเบตเบเบฐเบซเบเบฒเบเปเบซเบเปเปเบเบตเบเปเบเปเบฅเบฐเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเปเบฎเบฑเบเปเบซเปเบกเบฑเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบเปเบฅเบฐเบเปเบญเบเปเบซเปเบเบฝเบเปเบเปเบญเบปเบเบเบฐเบเบญเบเบเบทเปเบเบเบฒเบ.
เบเปเบญเบเบญเบทเปเบ, เปเบซเปเบเบตเปเบเบญเบเบเบฒเบชเบฒ, เปเบงเบตเบเบฑเบเบเบญเบ Ubuntu Linux เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเปเปเบเปเบเบทเปเบญเบ virtual, เปเบฅเบฐเบเบธเบเบเบตเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเปเบชเปเบฒเบ:
language: cpp
dist: xenial
addons:
apt:
update: true
packages:
- ant
- aria2
- build-essential
- cmake
- libgl1-mesa-dev
- libglu1-mesa-dev
- libsdl2-dev
- pv
- sendemail
- software-properties-common
sources:
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'ppa:ubuntu-sdk-team/ppa'
เบเบธเบเบเบธเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบกเปเบเบเปเบญเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเบชเบณเบฅเบฑเบ PPSSPP.
เบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเบเบฐเบเบญเบ:
matrix:
include:
- os: linux
compiler: "gcc"
env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes
- os: linux
compiler: "clang"
env: PPSSPP_BUILD_TYPE=Linux
เปเบเบตเปเบกเปเบเบตเบกเปเบฅเบฑเบเบเปเบญเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเปเบงเบ matrix. เปเบ Travis CI, เบกเบตเบชเบญเบเบงเบดเบเบตเบเบตเปเบเบฐเบชเปเบฒเบเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเปเปเบชเปเบฒเบ: เบเปเบฒเบญเบดเบเปเบกเปเบเบเปเบฒเบเบปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบ compilers, เบเบฐเปเบเบเบเบญเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบ, เบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก, เปเบฅเบฐเบญเบทเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ matrix เบเบญเบเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบเบทเบเบชเปเบฒเบเบเบถเปเบ; เบญเบฑเบเบเบตเบชเบญเบเปเบกเปเบเบเบปเบงเบเบตเปเบเบญเบเบขเปเบฒเบเบเบฐเปเบเปเบเบเบญเบเบกเบฒเบเบฃเบดเบเปเบเบทเปเบญเบ. เปเบเปเบเบญเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบปเบกเบเบปเบเบชเบญเบเบงเบดเบเบตเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบฅเบฐเปเบเบตเปเบกเบเปเบฅเบฐเบเบตเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบ, เบซเบผเบท, เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเบปเบเปเบงเบฑเปเบเบกเบฑเบเปเบเบเปเบเปเบเบฒเบ. เบเบปเบเปเบงเบฑเปเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบ
เบชเบดเปเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบกเปเบเปเบเบทเปเบญเปเบซเปเบเปเบฒเปเบเบฐเบเปเบฒเบเบฒเบเบเบฐเบเบญเบเปเบเบเบเบฒเบเบชเบฐเปเบเบฒเบฐ:
before_install:
- travis_retry bash .travis.sh travis_before_install
install:
- travis_retry bash .travis.sh travis_install
script:
- bash .travis.sh travis_script
after_success:
- bash .travis.sh travis_after_success
Travis CI เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเปเบฒเบชเบฑเปเบเบเบญเบเบเปเบฒเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฑเปเบเบเบญเบเบเปเบฒเบเปเบเบญเบเบเบตเบงเบดเบเบเบญเบเปเบเบทเปเบญเบ virtual. เบเบฒเบ before_install เบเบฐเบเบดเบเบฑเบเบเปเบญเบเบเบตเปเบเบฐเบเบดเบเบเบฑเปเบเปเบเบฑเบเปเบเบ. เบเบฒเบเบเบฑเปเบ เบเบฒเบเบเบดเบเบเบฑเปเบ, เปเบเบดเปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฒเบเบเบดเบเบเบฑเปเบเบเบธเบเบเบฒเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเป addons.aptเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบตเปเปเบซเปเปเบซเบฑเบเบเปเบฒเบเปเบเบดเบ. เบเบฒเบเบเบธเบกเบเบธเบกเบเบปเบงเบกเบฑเบเปเบญเบเปเบเปเปเบงเบฅเบฒเบชเบฐเบเบฒเบเบเบตเปเปเบ script. เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเบธเบโเบชเบดเปเบโเบเบธเบโเบขเปเบฒเบโเปเบเบฑเบโเปเบโเปเบเปโเบเบต, เบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเบงเบโเปเบฎเบปเบฒโเบเบญเบโเบซเบฒโเบเบปเบงโเปเบฎเบปเบฒโเปเบญเบโเปเบ after_success (เบกเบฑเบเบขเบนเปเปเบเบเบฒเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบงเบดเปเบเบฒเบฐ static). เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเปเปเปเบกเปเบเบเบฑเปเบเบเบญเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเป, เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเบตเปเบกเปเบเบตเบก, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบเบงเบเปเบเบดเปเบเปเบ
เปเบเบทเปเบญเบเบงเบฒเบกเบเปเบฒเบเบเบญเบเบเบฒเบเบญเปเบฒเบ, เบเปเบฒเบชเบฑเปเบเปเบเปเบเบทเบเบเบฑเบเปเบชเปเปเบ script เปเบเบเบเปเบฒเบเบซเบฒเบ .travis.sh, เปเบเบดเปเบเบเบทเบเบเบฑเบเปเบชเปเบขเบนเปเปเบเบฎเบฒเบเปเบเบเบเบฒเบ.
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเบฅเปเบเปเปเปเบเบเบตเป .travis.yml:
language: cpp
dist: xenial
addons:
apt:
update: true
packages:
- ant
- aria2
- build-essential
- cmake
- libgl1-mesa-dev
- libglu1-mesa-dev
- libsdl2-dev
- pv
- sendemail
- software-properties-common
sources:
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'ppa:ubuntu-sdk-team/ppa'
matrix:
include:
- os: linux
compiler: "gcc"
env: PVS_ANALYZE=Yes
- os: linux
compiler: "clang"
before_install:
- travis_retry bash .travis.sh travis_before_install
install:
- travis_retry bash .travis.sh travis_install
script:
- bash .travis.sh travis_script
after_success:
- bash .travis.sh travis_after_success
เบเปเบญเบเบเบตเปเบเบฐเบเบดเบเบเบฑเปเบเปเบเบฑเบเปเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฑเบเบเบธเบ submodules. เบญเบฑเบโเบเบตเปโเปเบกเปเบโเบเบณโเปเบเบฑเบโเปเบเบทเปเบญโเบชเปเบฒเบ PPSSPP. เปเบซเปเปเบเบตเปเบกเบซเบเปเบฒเบเบตเปเบเปเบฒเบญเบดเบเปเบชเป .travis.sh (เบซเบกเบฒเบโเปเบซเบโเบเบฒเบโเบเบฐโเบซเบเบฒเบโ)โ:
travis_before_install() {
git submodule update --init --recursive
}
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบกเบฒเปเบเบเบเบปเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเบตเบเบเบปเบงเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบญเบ PVS-Studio เปเบ Travis CI. เบเปเบญเบเบญเบทเปเบ เปเบปเบ เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบดเบเบเบฑเปเบเบเบธเบ PVS-Studio เปเบเบฅเบฐเบเบปเบ:
travis_install() {
if [ "$CXX" = "g++" ]; then
sudo apt-get install -qq g++-4.8
fi
if [ "$PVS_ANALYZE" = "Yes" ]; then
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
libio-socket-ssl-perl
libnet-ssleay-perl
fi
download_extract
"https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"
cmake-3.6.2-Linux-x86_64.tar.gz
}
เปเบเบเบญเบเบเบปเปเบเบเบญเบเบซเบเปเบฒเบเบตเป travis_install เบเบงเบเปเบฎเบปเบฒเบเบดเบเบเบฑเปเบ compilers เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบเปเบเปเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบปเบงเปเบ $PVS_ANALYZE เปเบเบฑเบเบฎเบฑเบเบชเบฒเบกเบนเบเบเปเบฒ เปเบกเปเบโเปเบฅเปเบง (เบเบงเบเปเบฎเบปเบฒเบเบตเปเปเบซเปเปเบซเบฑเบเบกเบฑเบเบขเบนเปเปเบเบเบฒเบ เบเบฐเบกเบฒเบ เปเบโเบฅเบฐโเบซเบงเปเบฒเบโเบเบฒเบโเบชเปเบฒเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒ matrixโ)โ, เบเบงเบโเปเบฎเบปเบฒโเบเบดเบโเบเบฑเปเบโเบเบธเบโ pvs-studio. เบเบญเบโเบเบฒเบโเบเบตเปโ, เบเบฒเบโเบซเบธเปเบกโเบซเปเปโเบเบฑเบโเปเบเปโเบฅเบฐโเบเบธโเปเบงเปโ libio-socket-ssl-perl ะธ libnet-ssleay-perlเบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบกเปเบเบเปเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเบเบฒเบเปเบเบชเบฐเบเบต, เบเบฑเปเบเบเบฑเปเบเปเบเบปเบฒเปเบเบปเปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเปเบเปเปเบฅเบทเบญเบเบงเบดเบเบตเบเบฒเบเบญเบทเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบญเบเบเปเบฒเบ.
เบเบฒเบเบเปเบฒเบเบฒเบเบเบญเบ download_extract เบเบฒเบงโเปเบซเบผเบโเปเบฅเบฐ unpacks เบเบฒเบโเปเบเบฑเบโเบเปเบฒโเบเบปเบโเปเบงเปโ:
download_extract() {
aria2c -x 16 $1 -o $2
tar -xf $2
}
เบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบงเบฒเบเปเบเบเบเบฒเบเบฎเปเบงเบกเบเบฑเบ. เบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบเบฒเบ script:
travis_script() {
if [ -d cmake-3.6.2-Linux-x86_64 ]; then
export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
fi
CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
cmake $CMAKE_ARGS CMakeLists.txt
make
}
เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบตเปเปเบกเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเปเบเบชเบฐเบเบฑเบเบเบตเปเบเปเบฒเบเบเบฒเบ, เบเบปเบเปเบงเบฑเปเบเบชเบฒเบเปเบซเบผเบปเปเบฒเบเบตเป:
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
เปเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบชเปเบฒเบฅเบฑเบ เบเบฑเบเบเบตเปเบกเบฑเบ เบเบธเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบญเบญเบเบเปเบฒเบชเบฑเปเบเบเบฒเบเบฅเบงเบเบฅเบงเบก. เบเบตเปเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบฅเบฐเบซเบฑเบเบเบปเบเบเบตเป. เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบเบเบปเบเบเบงเบฒเบก "
เบเปเบฒเบเบฒเบเบเบธเบกเบเบธเบกเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบ after_success, เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐ static:
travis_after_success() {
if [ "$PVS_ANALYZE" = "Yes" ]; then
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
sendemail -t [email protected]
-u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-s smtp.gmail.com:587
-xu $MAIL_USER
-xp $MAIL_PASSWORD
-o tls=yes
-f $MAIL_USER
-a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
fi
}
เบเปโเปเบซเปโเปเบฎเบปเบฒโเปเบเบดเปเบโเบเบตเปโเปเบเปโเบเบดเบโเบขเบนเปโเปเบโเปเบชเบฑเปเบโเบเบฑเปเบโเบเปเปโเปเบโเบเบตเปโ:
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
เปเบเบงเบเปเบฒเบญเบดเบเบชเปเบฒเบเปเบเบฅเปเปเบเบญเบฐเบเบธเบเบฒเบเบเบฒเบเบเบทเปเบเบนเปเปเบเปเปเบฅเบฐเบฅเบฐเบซเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบญเบเบเบปเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเปเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก Travis CI.
เปเบชเบฑเปเบเบเบตเบชเบญเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบปเบ. เบเบธเบ -j เบเปเบฒเบเบปเบเบเปเบฒเบเบงเบเบเบญเบเบเบฐเบเบนเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เบเบธเบ -l เบเบตเปเบเบญเบเปเบเบญเบฐเบเบธเบเบฒเบ, เบเบธเบ -o เบเปเบฒเบเบปเบเปเบเบฅเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบญเบญเบเบเบฑเบเบเบถเบ, เปเบฅเบฐเบเบธเบ -เบเบดเบโเบเบฒเบโเบเบงเบโเบชเบญเบโเบเบฒเบโเบซเบกเบปเบโเบญเบฒโเบเบธโเปเบโเบญเบฐโเบเบธโเบเบฒเบโ เบเปเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเบเบฑเบเบเบปเบเบฅเบญเบ, เบเบฑเบเบเบฑเปเบเปเบเปเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ pvs-studio-analyzer เบเบฐเปเบเบทเบญเบเบเบนเปเปเบเปเบงเปเบฒเปเบเบญเบฐเบเบธเบเบฒเบเบเปเบฒเบฅเบฑเบเบเบฐเบซเบกเบปเบเบญเบฒเบเบธ. เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเปเปเปเบซเปเปเบซเบเบเบฒเบเบเบตเปเปเบเบตเบเบเบถเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเบธเบเบเบตเป.
เปเบเบฅเปเบเบฑเบเบเบถเบเบกเบตเบเบปเบเบเบฐเบฅเบดเบเบเบดเบเบเบตเปเบเปเปเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเปเบเบเบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเปเบซเบฅเบทเปเบญเบกเปเบช, เบเบฑเปเบเบเบฑเปเบเบเปเบญเบเบญเบทเปเบ เปเบปเบ เบเปเบฒเบเบเปเบญเบเปเบฎเบฑเบเปเบซเปเปเบเบฅเปเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเป. เบเปเปเบซเปเบเปเบฒเบเบเบฑเบเบเบถเบเบเปเบฒเบ เบเบปเบงเปเบเบเบชเบฑเบเบเบฒเบ, เปเบฅเบฐเบเบปเบเบเบฐเบฅเบดเบเปเบกเปเบเปเบเบฅเป html.
เปเบเบเบปเบงเบขเปเบฒเบเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบชเบปเปเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบฒเบเปเบเบชเบฐเบเบตเปเบเบเปเบเปเบเปเบฒเบชเบฑเปเบ mailemail.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเปเบเบฅเปเบเบฑเปเบเบเปเปเปเบเบเบตเป .travis.sh:
#/bin/bash
travis_before_install() {
git submodule update --init --recursive
}
download_extract() {
aria2c -x 16 $1 -o $2
tar -xf $2
}
travis_install() {
if [ "$CXX" = "g++" ]; then
sudo apt-get install -qq g++-4.8
fi
if [ "$PVS_ANALYZE" = "Yes" ]; then
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
libio-socket-ssl-perl
libnet-ssleay-perl
fi
download_extract
"https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"
cmake-3.6.2-Linux-x86_64.tar.gz
}
travis_script() {
if [ -d cmake-3.6.2-Linux-x86_64 ]; then
export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
fi
CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
cmake $CMAKE_ARGS CMakeLists.txt
make
}
travis_after_success() {
if [ "$PVS_ANALYZE" = "Yes" ]; then
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
sendemail -t [email protected]
-u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-s smtp.gmail.com:587
-xu $MAIL_USER
-xp $MAIL_PASSWORD
-o tls=yes
-f $MAIL_USER
-a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
fi
}
set -e
set -x
$1;
เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเบเบฐเบเบนเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเบ git repository, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ Travis CI เบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เปเบซเปเบเบฅเบดเบเปเบชเป "ppsspp" เปเบเบทเปเบญเปเบเบซเบฒเบเบปเบเบฅเบฒเบเบเบฒเบเบเบฒเบเบเปเปเบชเปเบฒเบ:
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบเบเบฒเบเบฅเบงเบกเบเบญเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบเบเบฐเบเบธเบเบฑเบ:
เบเปเบฒเบเบฒเบเบเปเปเบชเปเบฒเบเปเบเปเบเบทเบเบชเปเบฒเปเบฅเบฑเบเบขเปเบฒเบเบชเปเบฒเปเบฅเบฑเบเบเบปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบฎเบฑเบเบญเบตเปเบกเบงเบเบตเปเบกเบตเบเบปเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบชเบฐเบเบดเบ. เปเบเปเบเบญเบ, เบเบฒเบเปเบเบชเบฐเบเบตเบเปเปเปเบกเปเบเบงเบดเบเบตเบเบฝเบงเบเบตเปเบเบฐเปเบเปเบฎเบฑเบเบเบปเบเบฅเบฒเบเบเบฒเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบทเบญเบเบงเบดเบเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเป. เปเบเปเบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบเบตเปเบเบฐเบเบทเปเบเปเบฒเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเปเปเบชเปเบฒเบเบชเปเบฒเปเบฅเบฑเบ, เบกเบฑเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบเบปเปเบฒเปเบเบดเบเปเบเบฅเป virtual machine เปเบเป.
เบชเบฐเบซเบผเบธเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ
เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเปเบเบชเปเบงเบเบเบตเปเบเบฒเบเบเบตเปเบชเบธเบ. เบเบฑเบโเบเบตเปโเปเบซเปโเปเบเปโเปเบโเบงเปเบฒโเบเบงเบฒเบกโเบเบฐโเบเบฒโเบเบฒเบกโเบเบฑเบโเปเบปเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบธเปเบกโเบเปเบฒ. เปเบซเปเปเบเบดเปเบเบเบฒเบเบเบธเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบเบฒเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบฒเบเบงเบดเปเบเบฒเบฐ static เบเบตเปเปเบเบปเปเบฒเบกเบฒเบซเบฒเบเปเบญเบเบเบฒเบเปเบเบชเบฐเบเบต (เบกเบฑเบเบเปเปเปเบกเปเบเบชเปเบฒเบฅเบฑเบเบชเบดเปเบเบเบตเปเบเปเบญเบเบเบตเปเบเบญเบเบกเบฑเบ).
เบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบญเบฑเบเบเบฐเบฅเบฒเบ
void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
sha1_context ctx;
sha1_starts( &ctx );
sha1_update( &ctx, input, ilen );
sha1_finish( &ctx, output );
memset( &ctx, 0, sizeof( sha1_context ) );
}
เบเบณเปเบเบทเบญเบ PVS-Studio:
เบเบดเปเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบกเปเบเบขเบนเปเปเบเปเบกเบเบนเบ hashing เบเบตเปเบเบญเบเปเบ, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบกเบฑเบเบกเบตเบเปเปเบเบปเบเบเปเบญเบเบเปเบฒเบเบเบงเบฒเบกเบเบญเบเปเบเบเบตเปเบฎเปเบฒเบเปเบฎเบ (
; Line 355
mov r8d, 20
xor edx, edx
lea rcx, QWORD PTR sum$[rsp]
call memset
; Line 356
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบขเบนเปเปเบเบเปเบฒเบชเบฑเปเบเปเบฅเบฐเบซเบเปเบฒเบเบตเป เบเบฑเบเบเบถเบเปเบงเป เปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเบฝเบเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเบชเปเบฒเบเบฑเบเปเบ RAM, เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเปเปเบเบดเบเบดเบเบดเบเบเบตเปเบเบทเปเบญ. เบฅเบญเบเปเบเบดเปเบเบฅเบฒเบเบเบฒเบเบเบฐเบเบญเบเบเบญเบเบฅเบธเปเบ Release เบเปเบงเบเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบ:
; 354 :
; 355 : memset( sum, 0, sizeof( sum ) );
; 356 :}
เบเบฑเปเบเบเบตเปเปเบซเบฑเบเปเบเปเบเบฒเบเบฅเบฒเบเบเบทเป, เบเบนเปเบฅเบงเบเบฅเบงเบกเบเปเปเบกเบนเบเบเปเปเบชเบปเบเปเบเบเบฒเบเปเบ เบเบฑเบเบเบถเบเปเบงเป. เบเบตเปเปเบกเปเบเปเบเบทเปเบญเบเบกเบฒเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบเบซเบเปเบฒเบเบตเป sha1 เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเปเบโ เบเบฑเบเบเบถเบเปเบงเป เบเปเปเบกเบตเบเบฒเบเบญเปเบฒเบเบญเบตเบเปเบเบเบชเปเบฒเบเบญเบตเบเบเปเปเปเบ ctx. เบเบฑเปเบเบเบฑเปเบ, compiler เบเปเปเปเบซเบฑเบเบเบธเบเบเบตเปเบเบฐเปเบชเบเปเบงเบฅเบฒเบเบญเบเปเบเปเบเบเปเบเบตเบเบตเปเบเบฐเบเบฝเบเบเบฑเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเปเปเปเบเปเปเบเปเปเบเบญเบฐเบเบฒเบเบปเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบตเปเปเบเปเปเบเบเบเบฒเบเปเบเปเบเบฑเบเบเบฑเบ RtlSecureZeroMemory เบซเบผเบท
เบเบทเบเบเปเบญเบ:
void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
sha1_context ctx;
sha1_starts( &ctx );
sha1_update( &ctx, input, ilen );
sha1_finish( &ctx, output );
RtlSecureZeroMemory(&ctx, sizeof( sha1_context ) );
}
เบเบฒเบเบเบฝเบเบเบฝเบเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบ
static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
int result = 0;
// For some reason, this is the only one that checks for negative.
if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
....
} else {
if (leftvol >= 0) {
chans[chan].leftVolume = leftvol;
}
if (rightvol >= 0) {
chans[chan].rightVolume = rightvol;
}
chans[chan].sampleAddress = samplePtr;
result = __AudioEnqueue(chans[chan], chan, true);
}
}
เบเบณเปเบเบทเบญเบ PVS-Studio:
เปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบชเบฒเบเบฒเบญเบทเปเบเบชเปเบฒเบฅเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบ if. เบฅเบฐเบซเบฑเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบฝเบเปเบเปเบเปเบฒเปเบเบทเปเบญเบเปเบเบเบฑเบเบซเบกเบปเบ เบเปเบฒเบvol > 0xFFFF || เบชเบดเบvol > 0xFFFF || เบเปเบฒเบvol < 0 || เบชเบดเบvol < 0 เบเบฐเบเบฒเบเปเบเบฑเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเปเบฒเบเบฐเปเบซเบผเบเบเปเปเปเบเบเบตเป, เปเบเบดเปเบเบเบฐเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบชเปเบฒเบฅเบฑเบเบชเบฒเบเบฒเบญเบทเปเบ: leftvol <= 0xFFFF, เบชเบดเบvol <= 0xFFFF, เบเปเบฒเบvol >= 0 ะธ เบชเบดเบvol >= 0. เบชเบฑเบเปเบเบเปเบซเบฑเบเบชเบญเบเบเปเบฒเบเบฐเปเบซเบผเบเบชเบธเบเบเปเบฒเบ. เบกเบฑเบเบชเบปเบกเปเบซเบเบชเบปเบกเบเบปเบเบเบตเปเบเบฐเบเบงเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเปเบเบฑเบเปเบเบทเปเบญเบเปเบเบเบตเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบฅเบฐเบซเบฑเบเบเบตเปเบเป?
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบเปเปเบเบงเบฒเบกเบเบตเปเบกเบตเปเบเบทเปเบญเบเปเบเปเบซเบผเบปเปเบฒเบเบตเปเบญเบญเบเปเบเปเบขเปเบฒเบเบเบญเบเปเบ:
static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
int result = 0;
// For some reason, this is the only one that checks for negative.
if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
....
} else {
chans[chan].leftVolume = leftvol;
chans[chan].rightVolume = rightvol;
chans[chan].sampleAddress = samplePtr;
result = __AudioEnqueue(chans[chan], chan, true);
}
}
เบชเบฐเบเบฒเบเบฐเบเบฒเบเบญเบทเปเบ. เบกเบตเบเบฒเบเบเบฐเปเบเบเบเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเปเบเบทเปเบญเบเปเบงเปเบขเบนเปเปเบเบทเปเบญเบเบซเบผเบฑเบเปเบเบทเปเบญเบเปเบเบเบตเปเบเปเปเบฒเบเปเบญเบเปเบซเบผเบปเปเบฒเบเบตเป. เบเบฒเบเบเบตเบเบงเบเปเบเบปเบฒเบเปเปเปเบเปเบเบงเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเปเบญเบเบเบฒเบ.
Ctrl+C Ctrl+V เบเบตเบเบทเบ
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfData) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
เปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเปเบ if. เบเปเบฒเบเบเบดเบเบงเปเบฒเบกเบฑเบเปเบเบฑเบเปเบฅเบทเปเบญเบเปเบเบเบเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบตเปเบขเบนเปเบเบฑเปเบเบเบทเบเบเปเบญเบเบเป? psmfData, เบชเบญเบเปเบเบปเปเบฒ? เบเบฑเปเบเบเบฑเปเบเบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบเบชเปเบฒเบฅเบฑเบเบเปเบญเบ ... เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบตเปเปเบกเปเบ, เปเบเปเบเบญเบ, เบเบดเบกเบเบดเบ, เปเบฅเบฐเบเบงเบฒเบกเบเบดเบเปเบกเปเบเปเบเบทเปเบญเบเบงเบเปเบเบดเปเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบเบฑเบเบชเบญเบ.
เบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบทเบเบเปเบญเบ:
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfStruct) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
เบเบปเบงเปเบเบเบตเปเบฅเบทเบก
extern void ud_translate_att(
int size = 0;
....
if (size == 8) {
ud_asmprintf(u, "b");
} else if (size == 16) {
ud_asmprintf(u, "w");
} else if (size == 64) {
ud_asmprintf(u, "q");
}
....
}
เบเบณเปเบเบทเบญเบ PVS-Studio:
เบเปเปเบเบดเบเบเบฒเบเบเบตเปเปเบกเปเบเบขเบนเปเปเบเปเบเบเปเบเบต ext, เบเบฑเปเบเบเบฑเปเบเบเปเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเปเบเบเบเบฒเบเบขเปเบฒเบเปเบเปเบเบดเบ, เปเบเปเปเบกเบเปเบกเปเปเบเปเบเบทเบเบเบปเบเปเบซเบฑเบเบเปเบญเบเบเบตเปเบเปเบญเบเบเบฐเบชเบฑเบเปเบเบเปเบซเบฑเบเบกเบฑเบ, เบเบฑเปเบเบเบฑเปเบเบเปเบญเบเบเบถเปเบเบเบฑเบเบชเบดเบเปเบเบญเบญเบเบเบฒเบเบกเบฑเบ. เบซเบผเบฑเบเบเบฒเบเบเบตเปเบเบฑเบเบซเบกเบปเบ, เบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเปเปเบกเปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบปเบเบเบงเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ, เปเบเปเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบ Travis CI, เปเบฅเบฐเบเปเปเบกเบตเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบเบปเบงเบงเบดเปเบเบฒเบฐเปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบ.
เบเบปเบงเบเปเบฝเบเปเบเบ เบเบฐเบซเบเบฒเบ เปเบกเปเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเบเปเบฒเบเบปเบเบเบตเป, เปเบเบงเปเบเบเปเปเบเบฒเบก, เบกเบฑเบเบเปเปเปเบเปเบเบทเบเบเปเบฒเปเบเปเบขเบนเปเปเบเบฅเบฐเบซเบฑเบเบเบฑเบเบซเบกเบปเบ, เบฅเบปเบเปเบเบซเบฒเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ if, เบเบตเป, เปเบเปเบเบญเบ, เปเบซเป เบเบตเปเบเปเปเบเบทเบเบเปเบญเบ เปเบเบเบฐเบเบฐเบเบตเปเบเบงเบเปเบเบดเปเบเปเบเบทเปเบญเบเปเบ, เปเบเบฒเบฐเบงเปเบฒ, เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบทเป, เบเบฐเบซเบเบฒเบ เปเบเบปเปเบฒเบเบฑเบเบชเบนเบ. เบเบฒเบเบเบงเบเบชเบญเบเบเปเปเบกเบฒเบเปเปเบเปเปเบกเบตเบเบงเบฒเบกเบซเบกเบฒเบ.
เบเบฒเบเบปเบเบเบทเปเบ, เบเบนเปเบเบฝเบเบเบญเบเบเบดเปเบเบชเปเบงเบเบฅเบฐเบซเบฑเบเบฅเบทเบกเบเบฝเบเบเบฑเบเบเบปเบงเปเบ เบเบฐเบซเบเบฒเบ เบเปเบญเบเบเบฑเปเบ.
เบขเบธเบ
เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบญเบฒเบเบเบฐเบชเบดเปเบเบชเบธเบเบเปเบงเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ. เบเบธเบเบเบฐเบชเบปเบเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบกเปเบเปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ PVS-Studio เบฎเปเบงเบกเบเบฑเบเบเบฑเบ Travis CI, เปเบฅเบฐเบเปเปเปเบกเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบฒเบเบขเปเบฒเบเบฅเบฐเบญเบฝเบเปเบเบปเปเบฒเบเบตเปเปเบเบฑเบเปเบเปเบเป. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเปเบซเบเปเบเบงเปเบฒเปเบฅเบฐเบชเบงเบเบเบฒเบก, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบปเบกเปเบเบตเบเบเบงเบเปเบเบปเบฒเบชเบฐเปเบซเบกเบต
เบชเบฐเบซเบฅเบธเบ
เบเบฒเบเบเปเบฒเปเบเปเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบงเบฑเบเปเบเบเปเปเบเบทเปเบญเบชเปเบฒเบเปเบเบเบเบฒเบเบฎเปเบงเบกเบเบฑเบเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบตเปเปเบเบตเปเบกเบเบถเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบปเบเบเบฑเบเบซเบฒเบซเบผเบฒเบเบขเปเบฒเบเบเบฑเบเบเบตเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบฅเบงเบกเบฅเบฐเบซเบฑเบ. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบฒเบเบเปเปเบชเปเบฒเบเบซเบเบถเปเบเบญเบฒเบเบเบฐเบเปเปเบเบฝเบเบเป, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบญเบเบเปเบญเบกเบเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบปเบเบเบตเปเบเบฐเบเปเบงเบเบเบฑเบเบเบธเบเบเบธเบเบเบฐเบเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ.
เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ
เปเบเบตเบเบเบปเบง PVS-Studio เปเบ Linux เปเบฅเบฐ macOS เปเบเบตเบเบเบปเบง PVS-Studio เปเบ Docker เปเบญเบเบฐเบชเบฒเบ Travis CI
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฑเบเบเบนเปเบเบปเบกเบเบตเปเปเบงเบปเปเบฒเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ, เบเบฐเบฅเบธเบเบฒเปเบเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบเปเบเบเบฒเบชเบฒ: Maxim Zvyagintsev.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com