1570af302Sopenharmony_ci/* 2570af302Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3570af302Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4570af302Sopenharmony_ci * you may not use this file except in compliance with the License. 5570af302Sopenharmony_ci * You may obtain a copy of the License at 6570af302Sopenharmony_ci * 7570af302Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8570af302Sopenharmony_ci * 9570af302Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10570af302Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11570af302Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12570af302Sopenharmony_ci * See the License for the specific language governing permissions and 13570af302Sopenharmony_ci * limitations under the License. 14570af302Sopenharmony_ci */ 15570af302Sopenharmony_ci 16570af302Sopenharmony_ci#include <signal.h> 17570af302Sopenharmony_ci#include <stdlib.h> 18570af302Sopenharmony_ci#include <string.h> 19570af302Sopenharmony_ci 20570af302Sopenharmony_ci#include "test.h" 21570af302Sopenharmony_ci 22570af302Sopenharmony_ci#define BUF_SIZE (13) 23570af302Sopenharmony_ci 24570af302Sopenharmony_civoid handler(int sig) 25570af302Sopenharmony_ci{ 26570af302Sopenharmony_ci exit(t_status); 27570af302Sopenharmony_ci} 28570af302Sopenharmony_ci 29570af302Sopenharmony_ci/** 30570af302Sopenharmony_ci * @tc.name : stpncpy_0100 31570af302Sopenharmony_ci * @tc.desc : copy a string returning a pointer to its end 32570af302Sopenharmony_ci * @tc.level : Level 0 33570af302Sopenharmony_ci */ 34570af302Sopenharmony_civoid stpncpy_0100(void) 35570af302Sopenharmony_ci{ 36570af302Sopenharmony_ci char buf[BUF_SIZE]; 37570af302Sopenharmony_ci memset(buf, 'A', sizeof(buf)); 38570af302Sopenharmony_ci 39570af302Sopenharmony_ci char *src = "Hello"; 40570af302Sopenharmony_ci char *dest = (char *)buf; 41570af302Sopenharmony_ci stpncpy(dest, src, strlen(src)); 42570af302Sopenharmony_ci 43570af302Sopenharmony_ci if (strncmp(src, buf, strlen(src))) { 44570af302Sopenharmony_ci t_error("%s failed: src = %s, buf = %s\n", __func__, src, buf); 45570af302Sopenharmony_ci return; 46570af302Sopenharmony_ci } 47570af302Sopenharmony_ci 48570af302Sopenharmony_ci for (int i = strlen(src) + 1; i < BUF_SIZE; i++) { 49570af302Sopenharmony_ci if (buf[i] != 'A') { 50570af302Sopenharmony_ci t_error("%s failed: buf[%d] = %c\n", __func__, i, buf[i]); 51570af302Sopenharmony_ci return; 52570af302Sopenharmony_ci } 53570af302Sopenharmony_ci } 54570af302Sopenharmony_ci} 55570af302Sopenharmony_ci 56570af302Sopenharmony_ci/** 57570af302Sopenharmony_ci * @tc.name : stpncpy_0200 58570af302Sopenharmony_ci * @tc.desc : copy an empty string returning a pointer to its end 59570af302Sopenharmony_ci * @tc.level : Level 1 60570af302Sopenharmony_ci */ 61570af302Sopenharmony_civoid stpncpy_0200(void) 62570af302Sopenharmony_ci{ 63570af302Sopenharmony_ci char buf[1]; 64570af302Sopenharmony_ci memset(buf, 0, sizeof(buf)); 65570af302Sopenharmony_ci 66570af302Sopenharmony_ci char *src = ""; 67570af302Sopenharmony_ci char *dest = (char *)buf; 68570af302Sopenharmony_ci stpncpy(dest, src, strlen(src)); 69570af302Sopenharmony_ci 70570af302Sopenharmony_ci if (strcmp(src, buf)) { 71570af302Sopenharmony_ci t_error("%s failed: src = %s, buf = %s\n", __func__, src, buf); 72570af302Sopenharmony_ci return; 73570af302Sopenharmony_ci } 74570af302Sopenharmony_ci 75570af302Sopenharmony_ci if (buf[0] != '\0') { 76570af302Sopenharmony_ci t_error("%s failed: buf[0] = %c\n", __func__, buf[0]); 77570af302Sopenharmony_ci return; 78570af302Sopenharmony_ci } 79570af302Sopenharmony_ci} 80570af302Sopenharmony_ci 81570af302Sopenharmony_ci/** 82570af302Sopenharmony_ci * @tc.name : stpncpy_0300 83570af302Sopenharmony_ci * @tc.desc : copy a string with the same size 84570af302Sopenharmony_ci * @tc.level : Level 1 85570af302Sopenharmony_ci */ 86570af302Sopenharmony_civoid stpncpy_0300(void) 87570af302Sopenharmony_ci{ 88570af302Sopenharmony_ci char buf[BUF_SIZE]; 89570af302Sopenharmony_ci memset(buf, 'A', sizeof(buf)); 90570af302Sopenharmony_ci 91570af302Sopenharmony_ci char *src = "Hello world!"; 92570af302Sopenharmony_ci char *dest = (char *)buf; 93570af302Sopenharmony_ci stpncpy(dest, src, strlen(src)); 94570af302Sopenharmony_ci 95570af302Sopenharmony_ci if (strncmp(src, buf, strlen(src))) { 96570af302Sopenharmony_ci t_error("%s failed: src = %s, buf = %s\n", __func__, src, buf); 97570af302Sopenharmony_ci return; 98570af302Sopenharmony_ci } 99570af302Sopenharmony_ci} 100570af302Sopenharmony_ci 101570af302Sopenharmony_ci/** 102570af302Sopenharmony_ci * @tc.name : stpncpy_0400 103570af302Sopenharmony_ci * @tc.desc : copy a string to a NULL pointer 104570af302Sopenharmony_ci * @tc.level : Level 2 105570af302Sopenharmony_ci */ 106570af302Sopenharmony_civoid stpncpy_0400(void) 107570af302Sopenharmony_ci{ 108570af302Sopenharmony_ci signal(SIGSEGV, handler); 109570af302Sopenharmony_ci 110570af302Sopenharmony_ci char *src = "Hello world!"; 111570af302Sopenharmony_ci stpncpy(NULL, src, strlen(src)); 112570af302Sopenharmony_ci} 113570af302Sopenharmony_ci 114570af302Sopenharmony_ciint main(int argc, char *argv[]) 115570af302Sopenharmony_ci{ 116570af302Sopenharmony_ci stpncpy_0100(); 117570af302Sopenharmony_ci stpncpy_0200(); 118570af302Sopenharmony_ci stpncpy_0300(); 119570af302Sopenharmony_ci stpncpy_0400(); 120570af302Sopenharmony_ci 121570af302Sopenharmony_ci return t_status; 122570af302Sopenharmony_ci} 123