1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci#include "sysversion.h" 16d9f0492fSopenharmony_ci 17d9f0492fSopenharmony_ci#include <stdlib.h> 18d9f0492fSopenharmony_ci#include <string.h> 19d9f0492fSopenharmony_ci 20d9f0492fSopenharmony_ci#include "beget_ext.h" 21d9f0492fSopenharmony_ci#include "param_comm.h" 22d9f0492fSopenharmony_ci#include "securec.h" 23d9f0492fSopenharmony_ci 24d9f0492fSopenharmony_ci/* * 25d9f0492fSopenharmony_ci * Major(M) version number. 26d9f0492fSopenharmony_ci */ 27d9f0492fSopenharmony_cistatic int g_majorVersion = 2; 28d9f0492fSopenharmony_ci 29d9f0492fSopenharmony_ci/* * 30d9f0492fSopenharmony_ci * Senior(S) version number. 31d9f0492fSopenharmony_ci */ 32d9f0492fSopenharmony_cistatic int g_seniorVersion = 2; 33d9f0492fSopenharmony_ci 34d9f0492fSopenharmony_ci/* * 35d9f0492fSopenharmony_ci * Feature(F) version number. 36d9f0492fSopenharmony_ci */ 37d9f0492fSopenharmony_cistatic int g_featureVersion = 0; 38d9f0492fSopenharmony_ci 39d9f0492fSopenharmony_ci/* * 40d9f0492fSopenharmony_ci * Build(B) version number. 41d9f0492fSopenharmony_ci */ 42d9f0492fSopenharmony_cistatic int g_buildVersion = 0; 43d9f0492fSopenharmony_ci 44d9f0492fSopenharmony_cistatic void GetVersions(void) 45d9f0492fSopenharmony_ci{ 46d9f0492fSopenharmony_ci static int versionInited = 0; 47d9f0492fSopenharmony_ci if (versionInited) { 48d9f0492fSopenharmony_ci return; 49d9f0492fSopenharmony_ci } 50d9f0492fSopenharmony_ci const char *fullName = GetFullName_(); 51d9f0492fSopenharmony_ci if (fullName == NULL) { 52d9f0492fSopenharmony_ci return; 53d9f0492fSopenharmony_ci } 54d9f0492fSopenharmony_ci const char *tmp = strstr(fullName, "-"); 55d9f0492fSopenharmony_ci if (tmp == NULL) { 56d9f0492fSopenharmony_ci return; 57d9f0492fSopenharmony_ci } 58d9f0492fSopenharmony_ci tmp++; // skip "-" 59d9f0492fSopenharmony_ci int ret = sscanf_s(tmp, "%d.%d.%d.%d", &g_majorVersion, &g_seniorVersion, &g_featureVersion, &g_buildVersion); 60d9f0492fSopenharmony_ci BEGET_LOGV("fullName %s %d.%d.%d.%d ret %d", 61d9f0492fSopenharmony_ci fullName, g_majorVersion, g_seniorVersion, g_featureVersion, g_buildVersion, ret); 62d9f0492fSopenharmony_ci if (ret == 4) { // 4 parameters 63d9f0492fSopenharmony_ci versionInited = 1; 64d9f0492fSopenharmony_ci } 65d9f0492fSopenharmony_ci} 66d9f0492fSopenharmony_ci 67d9f0492fSopenharmony_ci/* * 68d9f0492fSopenharmony_ci * Obtains the major (M) version number, which increases with any updates to the overall architecture. 69d9f0492fSopenharmony_ci * <p>The M version number monotonically increases from 1 to 99. 70d9f0492fSopenharmony_ci * 71d9f0492fSopenharmony_ci * @return Returns the M version number. 72d9f0492fSopenharmony_ci * @since 4 73d9f0492fSopenharmony_ci */ 74d9f0492fSopenharmony_ciint GetMajorVersion(void) 75d9f0492fSopenharmony_ci{ 76d9f0492fSopenharmony_ci GetVersions(); 77d9f0492fSopenharmony_ci return g_majorVersion; 78d9f0492fSopenharmony_ci} 79d9f0492fSopenharmony_ci 80d9f0492fSopenharmony_ci/* * 81d9f0492fSopenharmony_ci * Obtains the senior (S) version number, which increases with any updates to the partial 82d9f0492fSopenharmony_ci * architecture or major features. 83d9f0492fSopenharmony_ci * <p>The S version number monotonically increases from 0 to 99. 84d9f0492fSopenharmony_ci * 85d9f0492fSopenharmony_ci * @return Returns the S version number. 86d9f0492fSopenharmony_ci * @since 4 87d9f0492fSopenharmony_ci */ 88d9f0492fSopenharmony_ciint GetSeniorVersion(void) 89d9f0492fSopenharmony_ci{ 90d9f0492fSopenharmony_ci GetVersions(); 91d9f0492fSopenharmony_ci return g_seniorVersion; 92d9f0492fSopenharmony_ci} 93d9f0492fSopenharmony_ci 94d9f0492fSopenharmony_ci/* * 95d9f0492fSopenharmony_ci * Obtains the feature (F) version number, which increases with any planned new features. 96d9f0492fSopenharmony_ci * <p>The F version number monotonically increases from 0 or 1 to 99. 97d9f0492fSopenharmony_ci * 98d9f0492fSopenharmony_ci * @return Returns the F version number. 99d9f0492fSopenharmony_ci * @since 3 100d9f0492fSopenharmony_ci */ 101d9f0492fSopenharmony_ciint GetFeatureVersion(void) 102d9f0492fSopenharmony_ci{ 103d9f0492fSopenharmony_ci GetVersions(); 104d9f0492fSopenharmony_ci return g_featureVersion; 105d9f0492fSopenharmony_ci} 106d9f0492fSopenharmony_ci 107d9f0492fSopenharmony_ci/* * 108d9f0492fSopenharmony_ci * Obtains the build (B) version number, which increases with each new development build. 109d9f0492fSopenharmony_ci * <p>The B version number monotonically increases from 0 or 1 to 999. 110d9f0492fSopenharmony_ci * 111d9f0492fSopenharmony_ci * @return Returns the B version number. 112d9f0492fSopenharmony_ci * @since 3 113d9f0492fSopenharmony_ci */ 114d9f0492fSopenharmony_ciint GetBuildVersion(void) 115d9f0492fSopenharmony_ci{ 116d9f0492fSopenharmony_ci GetVersions(); 117d9f0492fSopenharmony_ci return g_buildVersion; 118d9f0492fSopenharmony_ci}