Skip to content
Snippets Groups Projects
Commit 1211a5c1 authored by Esben Haabendal's avatar Esben Haabendal
Browse files

Merge branch 'toolchain-ci' into 'kirkstone'

CI: Test toolchain and bundle images against OHOS codebase

Closes #6 and oniro#191

See merge request eclipse/oniro-core/meta-openharmony!20
parents 88ed7cf4 2150d11f
No related branches found
No related tags found
1 merge request!20CI: Test toolchain and bundle images against OHOS codebase
Pipeline #5446 passed
Showing
with 411 additions and 23 deletions
......@@ -52,6 +52,8 @@ variables:
# to push to git.ostc-eu.org first, and wait for the bitbake-builder image to
# be pushed to the registry before starting a pipeline on gitlab.eclipse.org.
BITBAKE_BUILDER: "registry.ostc-eu.org/ostc/pre-integration/meta-openharmony/bitbake-builder"
# And same for openharmony-builder
OPENHARMONY_BUILDER: "registry.ostc-eu.org/ostc/pre-integration/meta-openharmony/openharmony-builder"
stages:
- container
......@@ -160,6 +162,7 @@ stages:
cache:
key: bitbake-cache
paths:
- build/downloads/uninative
- build/mirror
- build/cache
- build/tmp*/cache
......@@ -190,11 +193,11 @@ fetch:
- for DISTRO in oniro-openharmony-linux ; do
for OPENHARMONY_VERSION in 3.0 3.1 ; do
for MACHINE in qemuarma7 ; do
for RECIPE in oniro-openharmony-bundle openharmony-standard-image openharmony-standard-image-tests ; do
RECIPES="oniro-openharmony-bundle openharmony-standard-image openharmony-standard-image-tests" ;
echo Fetching DISTRO=$DISTRO OPENHARMONY_VERSION=$OPENHARMONY_VERSION MACHINE=$MACHINE RECIPE=$RECIPE ;
sed -r "s/^OPENHARMONY_VERSION.*/OPENHARMONY_VERSION = \"${OPENHARMONY_VERSION}\"/" -i conf/auto.conf ;
bitbake $RECIPE --runall=fetch ;
done ; done ; done ; done
time bitbake $RECIPES --runall=fetch ;
done ; done ; done
after_script:
# Copy all regular files from downloads dir (except *.done files) to
# mirror dirs. Note, file is first copied to a temporary file (in same
......@@ -274,8 +277,10 @@ build:
- build/tmp-*/deploy/sdk
expire_in: 1 month
# Build OpenHarmony images using normal CI runners
test:
# Build and execute OpenHarmony test image.
#
# This will execute all included ptest test suites.
ptest:
stage: test
needs:
- job: build
......@@ -319,6 +324,110 @@ build_ch:
MANIFEST_FILE: manifests/gitee/ci.xml
SOURCE_MIRROR_URL: $SOURCE_MIRROR_URL_CH
# URL and filename for tarball containing entire OpenHarmony OS codebase
.openharmony_tarball:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH
when: manual
# We don't really want these jobs to fail, but we don't want to block
# pipeline and dependent jobs either
allow_failure: true
before_script:
- if [ "${OPENHARMONY_VERSION}" = "3.0" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.0/code-v3.0-LTS.tar.gz";
elif [ "${OPENHARMONY_VERSION}" = "3.0.1" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.0.1/code-v3.0.1-LTS.tar.gz";
elif [ "${OPENHARMONY_VERSION}" = "3.0.2" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.0.2/code-v3.0.2-LTS.tar.gz";
elif [ "${OPENHARMONY_VERSION}" = "3.0.3" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.0.3/code-v3.0.3-LTS.tar.gz";
elif [ "${OPENHARMONY_VERSION}" = "3.1" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.1-Release/code-v3.1-Release.tar.gz";
elif [ "${OPENHARMONY_VERSION}" = "3.1.1" ]; then
TARBALL_URL="https://repo.huaweicloud.com/harmonyos/os/3.1.1/code-v3.1.1-Release.tar.gz";
else
echo "OPENHARMONY_VERSION=${OPENHARMONY_VERSION} is not supported";
exit 1;
fi
- TARBALL_FILE=$(basename $TARBALL_URL)
- mkdir -p downloads
# Use runner persistent storage if available
- if [ -n "$CI_ONIRO_RUNNER_PERSISTENT_STORAGE" ] ; then
TARBALL_FILE="$CI_ONIRO_RUNNER_PERSISTENT_STORAGE/$TARBALL_FILE" ;
touch downloads/.dummy_file ;
else
TARBALL_FILE="downloads/$TARBALL_FILE" ;
fi ;
echo "Using $TARBALL_FILE"
# Fetch OpenHarmony OS codebase.
#
# This is for use in ohos test jobs.
ohos_fetch:
stage: fetch
image:
name: $OPENHARMONY_BUILDER:$OPENHARMONY_CONTAINER_VERSION
extends: .openharmony_tarball
parallel:
matrix:
- OPENHARMONY_VERSION: ["3.0", "3.1"]
script:
# Integrity check of cached tarball
- if [ -f "${TARBALL_FILE}.sha256" -a -f "${TARBALL_FILE}" ] ; then
read tarball_sha256 _ <<<$(sha256sum "${TARBALL_FILE}") ;
read expected_sha256 _ < "${TARBALL_FILE}.sha256" ;
if [ "$tarball_sha256" = "$expected_sha256" ] ; then
echo "Using cached ${TARBALL_FILE}" ;
exit 0 ;
else
echo "Deleting bad ${TARBALL_FILE}" ;
rm -f "${TARBALL_FILE}" "${TARBALL_FILE}.sha256" ;
fi ;
elif [ -f "${TARBALL_FILE}.sha256" ] ; then
echo "Deleting ${TARBALL_FILE}.sha256" ;
rm -f "${TARBALL_FILE}.sha256" ;
fi
- pushd $(dirname $TARBALL_FILE)
# Download tarball (should continue if partial download is found
- wget --progress=dot:giga "${TARBALL_URL}" --timestamping --no-if-modified-since
# Download sha256 signature
- wget "${TARBALL_URL}.sha256" --timestamping --no-if-modified-since
- popd
- read tarball_sha256 _ <<<$(sha256sum "${TARBALL_FILE}") ;
- read expected_sha256 _ < "${TARBALL_FILE}.sha256" ;
- if [ "$tarball_sha256" != "$expected_sha256" ] ; then
echo "Deleting bad ${TARBALL_FILE}" ;
rm -f "${TARBALL_FILE}" "${TARBALL_FILE}.sha256" ;
exit 1 ;
fi
artifacts:
paths:
- downloads
expire_in: 1 month
# Test prebuilts images against OpenHarmony OS codebase
ohos:
stage: test
needs:
- job: ohos_fetch
artifacts: true
- job: build
artifacts: true
parallel:
matrix:
- OPENHARMONY_VERSION: ["3.0", "3.1"]
PREBUILT_IMAGE: [oniro-openharmony-toolchain, oniro-openharmony-bundle]
image:
name: $OPENHARMONY_BUILDER:$OPENHARMONY_CONTAINER_VERSION
extends: .openharmony_tarball
script:
- tar xfz $TARBALL_FILE
- cd $(basename $TARBALL_FILE .tar.gz)/OpenHarmony
- ../../build/tmp-*/deploy/sdk/${PREBUILT_IMAGE}-${OPENHARMONY_VERSION}-*.sh -y -d oniro
- ./oniro/setup.sh
- ./build.sh --product-name Hi3516DV300
# Job for triggering a prune of the sstate-cache mirror in runner persistent
# storage. This should be done periodically, but as I believe it removes a
# bit too much, not too often. And a complete rebuild is done also, to refill
......
......@@ -15,6 +15,7 @@
variables:
BITBAKE_CONTAINER_VERSION: "0.6"
OPENHARMONY_CONTAINER_VERSION: "0.1"
.kaniko:
stage: container
......@@ -83,3 +84,21 @@ bitbake-toolbox:
needs:
- job: bitbake-builder
artifacts: false
openharmony-builder:
extends: .kaniko
variables:
CONTAINER_NAME: openharmony-builder
CONTAINER_VERSION: $OPENHARMONY_CONTAINER_VERSION
openharmony-toolbox:
extends: .kaniko
variables:
CONTAINER_NAME: openharmony-toolbox
CONTAINER_VERSION: $OPENHARMONY_CONTAINER_VERSION
CONTAINER_PATH: openharmony-builder
CONTAINER_DOCKERFILE: Dockerfile.toolbox
CONTAINER_FROM: openharmony-builder
needs:
- job: openharmony-builder
artifacts: false
# SPDX-FileCopyrightText: 2021 Huawei Inc.
# SPDX-License-Identifier: Apache-2.0
[user]
name = OSTC Builder
email = ostc-builder@example.org
# Copyright 2021 Huawei Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# This builds a container image for use in building OpenHarmony images,
# following the build system specification in
# https://repo.huaweicloud.com/harmonyos/os/2.0/tool_chain/Standard_System.md
FROM ubuntu:18.04
ARG DEBIAN_FRONTEND="noninteractive"
RUN apt-get update -qq \
&& apt-get install -qq -y \
bash locales \
apt-utils vim software-properties-common openssh-server iputils-ping \
curl net-tools bsdmainutils kmod bc rsync gawk ssh ccache zip python-dev \
make m4 gcc-multilib ca-certificates-java unzip python3-yaml perl \
openssl libssl1.1 gnupg xsltproc x11proto-core-dev tcl python3-crypto \
python-crypto libxml2-utils libxml2-dev libx11-dev libssl-dev \
libgl1-mesa-dev lib32z1-dev lib32ncurses5-dev g++-multilib flex bison \
doxygen git subversion tofrodos pigz expect python3-xlrd python-xlrd \
git-core gperf build-essential zlib1g-dev libc6-dev-i386 lib32z-dev \
openjdk-8-jdk \
ruby cpio \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN locale-gen
# Let's just have /bin/sh as bash
RUN echo "dash dash/sh boolean false" | debconf-set-selections \
&& dpkg-reconfigure dash
# For some reason for containers built using kaniko ping errors with:
# `permission denied` for user other than root. Even running container in
# privileged mode doesn't help for non-root user. Most probably it is related
# to this issue: https://github.com/GoogleContainerTools/kaniko/issues/1851
# ping is required by Yocto testing machinery and therefore temporarily setting
# suid to get it working
RUN chmod u+s $(command -v ping)
RUN apt-get update -qq \
&& apt-get install -qq -y python3.8 python3-pip \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 \
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.6 3 \
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.8 4 \
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2 \
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 3
RUN pip3 install --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple setuptools \
&& pip3 install --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple kconfiglib \
&& pip3 install --trusted-host mirrors.aliyun.com -i http://mirrors.aliyun.com/pypi/simple pycryptodome \
&& pip3 install --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple ecdsa \
&& python3 -m pip install ohos-build==0.4.6
RUN mkdir -p /opt/harmonyos
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz \
&& tar xf /opt/harmonyos/llvm.tar.gz -C /opt/harmonyos \
&& rm /opt/harmonyos/llvm.tar.gz
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/compiler/hc-gen/0.65/linux/hc-gen-0.65-linux.tar \
&& tar xf /opt/harmonyos/hc-gen-0.65-linux.tar -C /opt/harmonyos \
&& rm /opt/harmonyos/hc-gen-0.65-linux.tar
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/compiler/gcc_riscv32/7.3.0/linux/gcc_riscv32-linux-7.3.0.tar.gz \
&& tar xf /opt/harmonyos/gcc_riscv32-linux-7.3.0.tar.gz -C /opt/harmonyos \
&& rm /opt/harmonyos/gcc_riscv32-linux-7.3.0.tar.gz
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/compiler/ninja/1.9.0/linux/ninja.1.9.0.tar \
&& tar xf /opt/harmonyos/ninja.1.9.0.tar -C /opt/harmonyos \
&& rm /opt/harmonyos/ninja.1.9.0.tar
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/compiler/gn/1717/linux/gn-linux-x86-1717.tar.gz \
&& tar xf /opt/harmonyos/gn-linux-x86-1717.tar.gz -C /opt/harmonyos \
&& rm /opt/harmonyos/gn-linux-x86-1717.tar.gz
RUN wget -q -P /opt/harmonyos https://mirrors.huaweicloud.com/nodejs/v12.20.0/node-v12.20.0-linux-x64.tar.gz \
&& tar xf /opt/harmonyos/node-v12.20.0-linux-x64.tar.gz -C /opt/harmonyos \
&& rm /opt/harmonyos/node-v12.20.0-linux-x64.tar.gz
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/develop_tools/hmos_app_packing_tool.jar
RUN wget -q -P /opt/harmonyos https://repo.huaweicloud.com/harmonyos/develop_tools/hapsigntoolv2.jar
RUN sed -i '$aexport PATH=/opt/harmonyos/llvm/bin:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/opt/harmonyos/hc-gen:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/opt/harmonyos/gcc_riscv32/bin:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/opt/harmonyos/ninja:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/opt/harmonyos/node-v12.20.0-linux-x64/bin:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/opt/harmonyos:$PATH' /root/.bashrc \
&& sed -i '$aexport PATH=/root/.local/bin:$PATH' /root/.bashrc \
&& export PATH=/opt/harmonyos/llvm/bin:$PATH \
&& export PATH=/opt/harmonyos/hc-gen:$PATH \
&& export PATH=/opt/harmonyos/gcc_riscv32/bin:$PATH \
&& export PATH=/opt/harmonyos/ninja:$PATH \
&& export PATH=/opt/harmonyos/node-v12.20.0-linux-x64/bin:$PATH \
&& export PATH=/opt/harmonyos:$PATH \
&& export PATH=/root/.local/bin:$PATH \
&& npm install -g @ohos/hpm-cli --registry https://mirrors.huaweicloud.com/repository/npm/
RUN useradd --create-home --uid 1000 --shell /usr/bin/bash builder
COPY --chown=builder:builder .gitconfig /home/builder/.gitconfig
USER builder
WORKDIR /home/builder
# Copyright 2020 Huawei Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
FROM openharmony-builder
# Revert setup with builder user account
USER root
WORKDIR /
RUN userdel -r builder
# Install packages needed by Toolbox
ARG DEBIAN_FRONTEND="noninteractive"
RUN apt-get update -qq \
&& apt-get install -qq -y \
bash sudo libcap2-bin locales \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Use UTF-8 locale
RUN echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | debconf-set-selections \
&& echo "locales locales/default_environment_locale select en_US.UTF-8" | debconf-set-selections \
&& sed -i 's/^# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& dpkg-reconfigure locales
ENV LANG=en_US.UTF-8
# Allow password-less sudo
RUN echo '%sudo ALL=(ALL:ALL) NOPASSWD:ALL' > /etc/sudoers.d/toolbox
LABEL com.github.containers.toolbox="true" \
com.github.debarshiray.toolbox="true"
<!--
SPDX-FileCopyrightText: 2021 Huawei Inc.
SPDX-License-Identifier: Apache-2.0
-->
# OpenHarmony build container
This container is intended for use in building OpenHarmony images,
following the build system specification in
https://repo.huaweicloud.com/harmonyos/os/2.0/tool_chain/Standard_System.md
The default user is called builder, making usage of bitbake easier.
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: Apache-2.0
Patch for //drivers/framework git repository of OpenHarmony 3.1 codebase.
Build hdi-gen with Yocto native toolchain.
Signed-off-by: Esben Haabendal <esben.haabendal@huawei.com>
Upstream-Status: Inappropriate
diff --git a/tools/hdi-gen/Makefile b/tools/hdi-gen/Makefile
index 033c257575dc..99e0d0ca7a0a 100644
--- a/tools/hdi-gen/Makefile
+++ b/tools/hdi-gen/Makefile
@@ -27,9 +28,9 @@ endif
all:
$(Q) echo start build $(TARGET) ...
- $(Q) $(MAKE) -f $(MAKE_FILE_NAME)
+ $(Q) $(MAKE) CXX=${BUILD_CXX} -f $(MAKE_FILE_NAME)
clean:
$(Q) $(MAKE) -f $(MAKE_FILE_NAME) clean
......@@ -48,6 +48,7 @@ SRC_URI += "file://graphic_config.patch;patchdir=${S}/foundation/graphic/standar
SRC_URI += "file://camera_hal.patch;patchdir=${S}/drivers/peripheral"
SRC_URI += "file://ace-js2bundle_node-path.patch;patchdir=${S}/developtools/ace-js2bundle"
SRC_URI += "file://hc-gen-compiler.patch;patchdir=${S}/drivers/framework"
SRC_URI += "file://hdi-gen-compiler.patch;patchdir=${S}/drivers/framework"
SRC_URI += "file://build_node-path.patch;patchdir=${S}/build"
SRC_URI += "file://build_hapsigner-tool.patch;patchdir=${S}/build"
SRC_URI += "file://build_packing-tool-path.patch;patchdir=${S}/build"
......
......@@ -31,10 +31,10 @@ and entire git repositories!
To install the `oniro-openharmony-bundle` to a clean OpenHarmony 3.0-LTS
repository, you should do something like this:
tar xfz $DOWNLOADS/code-v3.0-LTS.tar.gz
cd code-v3.0-LTS/OpenHarmony
$DOWNLOADS/oniro-openharmony-bundle-cortexa7-neon-vfpv4-3.0.sh -y -d oniro
./oniro/setup.should
tar xfz $DOWNLOADS/code-v3.1-Release.tar.gz
cd code-v3.1-Relase/OpenHarmony
$DOWNLOADS/oniro-openharmony-bundle-3.1-cortexa7-neon-vfpv4-1.99.99.sh -y -d oniro
./oniro/setup.sh
After this, you can use normal OpenHarmony build system procedures to build as
usual. To build image for HiSilicon Hi3516DV300 (taurus) board:
......
......@@ -15,3 +15,4 @@ SRC_URI += "file://patches/foundation_graphic_standard.patch;apply=no;subdir=src
SRC_URI += "file://patches/productdefine_common.patch;apply=no;subdir=src"
SRC_URI += "file://patches/third_party_libevdev.patch;apply=no;subdir=src"
SRC_URI += "file://patches/third_party_libusb.patch;apply=no;subdir=src"
SRC_URI += "file://patches/third_party_e2fsprogs-backports-to-3.1.patch;apply=no;subdir=src"
......@@ -15,7 +15,7 @@ folders before building."
inherit populate_sdk
TOOLCHAIN_OUTPUTNAME = "${PN}-${TUNE_PKGARCH}-${SDK_VERSION}"
TOOLCHAIN_OUTPUTNAME = "${PN}-${OPENHARMONY_VERSION}-${TUNE_PKGARCH}-${SDK_VERSION}"
SDK_VERSION ?= "${DISTRO_VERSION}"
TOOLCHAIN_HOST_TASK += "nativesdk-oniro-openharmony-toolchain-integration"
......
......@@ -63,16 +63,3 @@ index 6497fab81da3..66495ef184e0 100644
{
int i;
struct HdfDriverEntry *driverEntry = NULL;
diff --git a/drivers/framework/tools/hdi-gen/Makefile b/drivers/framework/tools/hdi-gen/Makefile
index 033c257575dc..99e0d0ca7a0a 100644
--- a/drivers/framework/tools/hdi-gen/Makefile
+++ b/drivers/framework/tools/hdi-gen/Makefile
@@ -27,9 +28,9 @@ endif
all:
$(Q) echo start build $(TARGET) ...
- $(Q) $(MAKE) -f $(MAKE_FILE_NAME)
+ $(Q) $(MAKE) CXX=${BUILD_CXX} -f $(MAKE_FILE_NAME)
clean:
$(Q) $(MAKE) -f $(MAKE_FILE_NAME) clean
# SPDX-FileCopyrightText: Huawei Inc.
#
# SPDX-License-Identifier: Apache-2.0
Backport of fixes included in OpenHarmony-v3.1.1 release
f1f1a3471fdf - Fix CodeCheck warning.
00663d8aab61 - static_cast size_t to int
97aa5de11e0d - Pass parameter p by reference.
6758af0c0da8 - Fix the crash problem caused by overflow in GetDacConfig.
Signed-off-by: Esben Haabendal <esben.haabendal@huawei.com>
Upstream-Status: Backport
diff --git a/third_party/e2fsprogs/contrib/android/dac_config.cpp b/third_party/e2fsprogs/contrib/android/dac_config.cpp
index 422e0d52280f..1c76dfd7e7d1 100644
--- a/third_party/e2fsprogs/contrib/android/dac_config.cpp
+++ b/third_party/e2fsprogs/contrib/android/dac_config.cpp
@@ -35,14 +35,14 @@ struct DacConfig {
string path;
DacConfig() : uid(0), gid(0), mode(0), capabilities(0), path("") {}
- DacConfig(unsigned int m, unsigned int u, unsigned int g, uint64_t c, string p) :
+ DacConfig(unsigned int m, unsigned int u, unsigned int g, uint64_t c, const string &p) :
uid(u),
gid(g),
mode(m),
capabilities(c),
path(p) {}
- void SetDefault(unsigned int m, unsigned int u, unsigned int g, uint64_t c, string p)
+ void SetDefault(unsigned int m, unsigned int u, unsigned int g, uint64_t c, const string &p)
{
this->uid = u;
this->gid = g;
@@ -198,33 +198,28 @@ extern "C" {
return 0;
}
- void GetDacConfig(const char* path, int dir, char* targetOutPath,
+ void GetDacConfig(const char* path, int dir, char*,
unsigned* uid, unsigned* gid, unsigned* mode,
uint64_t* capabilities)
{
- if (path && path[0] == '/') {
- path++;
- }
-
- (void)targetOutPath;
- string str = path;
- string str2;
+ string str = (path != nullptr && *path == '/') ? path + 1 : path;
DacConfig dacConfig(00755, 0, 0, 0, "");
if (dir == 0) {
dacConfig.SetDefault(00644, 0, 0, 0, "");
}
- if (g_configMap.count(str)) {
- dacConfig = g_configMap[str];
+ auto it = g_configMap.find(str);
+ if (it != g_configMap.end()) {
+ dacConfig = it->second;
} else if (dir == 0 && !str.empty()) {
- for (auto i = str.size() - 1; i >= 0; i--) {
+ for (int i = static_cast<int>(str.size()) - 1; i >= 0; i--) {
if (str[i] == '/') {
break;
} else {
- str2 = str.substr(0, i) + "*";
- if (g_configMap.count(str2)) {
- dacConfig = g_configMap[str2];
+ it = g_configMap.find(str.substr(0, i) + "*");
+ if (it != g_configMap.end()) {
+ dacConfig = it->second;
break;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment