gpt4 book ai didi

c - 如何最大化代码覆盖率?

转载 作者:行者123 更新时间:2023-11-30 14:30:56 26 4
gpt4 key购买 nike

大家好,以下是取自 unix ptx 实用程序的代码片段。我正在尝试最大化此实用程序的代码覆盖率,但我无法到达代码的指示部分。不可否认,我的 C 技能已经不像以前那么强了。代码部分用注释指示,但它位于 block 的底部。

if (used_length == allocated_length)
{
allocated_length += (1 << SWALLOW_REALLOC_LOG);
block->start
= (char *) xrealloc (block->start, allocated_length);
}

任何解释指示部分以覆盖该 block 的帮助将不胜感激。

/* Reallocation step when swallowing non regular files.  The value is not
the actual reallocation step, but its base two logarithm. */
#define SWALLOW_REALLOC_LOG 12

static void swallow_file_in_memory (const char *file_name, BLOCK *block)
{
int file_handle; /* file descriptor number */
struct stat stat_block; /* stat block for file */
size_t allocated_length; /* allocated length of memory buffer */
size_t used_length; /* used length in memory buffer */
int read_length; /* number of character gotten on last read */

/* As special cases, a file name which is NULL or "-" indicates standard
input, which is already opened. In all other cases, open the file from
its name. */
bool using_stdin = !file_name || !*file_name || strcmp (file_name, "-") == 0;
if (using_stdin)
file_handle = STDIN_FILENO;
else
if ((file_handle = open (file_name, O_RDONLY)) < 0)
error (EXIT_FAILURE, errno, "%s", file_name);

/* If the file is a plain, regular file, allocate the memory buffer all at
once and swallow the file in one blow. In other cases, read the file
repeatedly in smaller chunks until we have it all, reallocating memory
once in a while, as we go. */

if (fstat (file_handle, &stat_block) < 0)
error (EXIT_FAILURE, errno, "%s", file_name);

if (S_ISREG (stat_block.st_mode))
{
size_t in_memory_size;

block->start = (char *) xmalloc ((size_t) stat_block.st_size);

if ((in_memory_size = read (file_handle,
block->start, (size_t) stat_block.st_size))
!= stat_block.st_size)
{
error (EXIT_FAILURE, errno, "%s", file_name);
}
block->end = block->start + in_memory_size;
}
else
{
block->start = (char *) xmalloc ((size_t) 1 << SWALLOW_REALLOC_LOG);
used_length = 0;
allocated_length = (1 << SWALLOW_REALLOC_LOG);

while (read_length = read (file_handle,
block->start + used_length,
allocated_length - used_length),
read_length > 0)
{
used_length += read_length;
/* Cannot cover from this point...*/
if (used_length == allocated_length)
{
allocated_length += (1 << SWALLOW_REALLOC_LOG);
block->start
= (char *) xrealloc (block->start, allocated_length);
}
/* ...to this point. */
}

if (read_length < 0)
error (EXIT_FAILURE, errno, "%s", file_name);

block->end = block->start + used_length;
}

/* Close the file, but only if it was not the standard input. */

if (! using_stdin && close (file_handle) != 0)
error (EXIT_FAILURE, errno, "%s", file_name);
}

最佳答案

根据代码,听起来您的输入长度小于 4096 ( 1 << SWALLOW_REALLOC_LOG ) 字节。给它一个更大的输入(并确保您不是以普通文件的形式提供这个更大的输入,而是通过管道提供),您应该点击该代码。

关于c - 如何最大化代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com