mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-17 01:51:00 +03:00
Avoid computing strlen() inside loops
Compiling with -O0 (no proper optimizations), strlen() call in loops for comparing the size, isn't being called/initialized before the actual loop gets started, which causes n-numbers of strlen() calls (as long as the string is). Keeping the length before entering in the loop is a good idea. On some places, even with -O2, both GCC and Clang can't recognize this pattern, which seem to happen in an array of char pointer. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: rilysh <nightquick@proton.me> Closes #16584
This commit is contained in:
parent
e8cbb5952d
commit
86737c5927
@ -8800,7 +8800,7 @@ zdb_read_block(char *thing, spa_t *spa)
|
||||
void *lbuf, *buf;
|
||||
char *s, *p, *dup, *flagstr, *sizes, *tmp = NULL;
|
||||
const char *vdev, *errmsg = NULL;
|
||||
int i, error;
|
||||
int i, len, error;
|
||||
boolean_t borrowed = B_FALSE, found = B_FALSE;
|
||||
|
||||
dup = strdup(thing);
|
||||
@ -8828,7 +8828,8 @@ zdb_read_block(char *thing, spa_t *spa)
|
||||
for (s = strtok_r(flagstr, ":", &tmp);
|
||||
s != NULL;
|
||||
s = strtok_r(NULL, ":", &tmp)) {
|
||||
for (i = 0; i < strlen(flagstr); i++) {
|
||||
len = strlen(flagstr);
|
||||
for (i = 0; i < len; i++) {
|
||||
int bit = flagbits[(uchar_t)flagstr[i]];
|
||||
|
||||
if (bit == 0) {
|
||||
@ -9098,13 +9099,14 @@ zdb_embedded_block(char *thing)
|
||||
static boolean_t
|
||||
zdb_numeric(char *str)
|
||||
{
|
||||
int i = 0;
|
||||
int i = 0, len;
|
||||
|
||||
if (strlen(str) == 0)
|
||||
len = strlen(str);
|
||||
if (len == 0)
|
||||
return (B_FALSE);
|
||||
if (strncmp(str, "0x", 2) == 0 || strncmp(str, "0X", 2) == 0)
|
||||
i = 2;
|
||||
for (; i < strlen(str); i++) {
|
||||
for (; i < len; i++) {
|
||||
if (!isxdigit(str[i]))
|
||||
return (B_FALSE);
|
||||
}
|
||||
|
@ -685,15 +685,17 @@ static int
|
||||
str2shift(const char *buf)
|
||||
{
|
||||
const char *ends = "BKMGTPEZ";
|
||||
int i;
|
||||
int i, len;
|
||||
|
||||
if (buf[0] == '\0')
|
||||
return (0);
|
||||
for (i = 0; i < strlen(ends); i++) {
|
||||
|
||||
len = strlen(ends);
|
||||
for (i = 0; i < len; i++) {
|
||||
if (toupper(buf[0]) == ends[i])
|
||||
break;
|
||||
}
|
||||
if (i == strlen(ends)) {
|
||||
if (i == len) {
|
||||
(void) fprintf(stderr, "ztest: invalid bytes suffix: %s\n",
|
||||
buf);
|
||||
usage(B_FALSE);
|
||||
|
@ -1618,15 +1618,17 @@ static int
|
||||
str2shift(libzfs_handle_t *hdl, const char *buf)
|
||||
{
|
||||
const char *ends = "BKMGTPEZ";
|
||||
int i;
|
||||
int i, len;
|
||||
|
||||
if (buf[0] == '\0')
|
||||
return (0);
|
||||
for (i = 0; i < strlen(ends); i++) {
|
||||
|
||||
len = strlen(ends);
|
||||
for (i = 0; i < len; i++) {
|
||||
if (toupper(buf[0]) == ends[i])
|
||||
break;
|
||||
}
|
||||
if (i == strlen(ends)) {
|
||||
if (i == len) {
|
||||
if (hdl)
|
||||
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
|
||||
"invalid numeric suffix '%s'"), buf);
|
||||
|
@ -808,11 +808,12 @@ zfs_name_to_prop(const char *propname)
|
||||
boolean_t
|
||||
zfs_prop_user(const char *name)
|
||||
{
|
||||
int i;
|
||||
int i, len;
|
||||
char c;
|
||||
boolean_t foundsep = B_FALSE;
|
||||
|
||||
for (i = 0; i < strlen(name); i++) {
|
||||
len = strlen(name);
|
||||
for (i = 0; i < len; i++) {
|
||||
c = name[i];
|
||||
if (!zprop_valid_char(c))
|
||||
return (B_FALSE);
|
||||
|
@ -494,11 +494,12 @@ vdev_name_to_prop(const char *propname)
|
||||
boolean_t
|
||||
vdev_prop_user(const char *name)
|
||||
{
|
||||
int i;
|
||||
int i, len;
|
||||
char c;
|
||||
boolean_t foundsep = B_FALSE;
|
||||
|
||||
for (i = 0; i < strlen(name); i++) {
|
||||
len = strlen(name);
|
||||
for (i = 0; i < len; i++) {
|
||||
c = name[i];
|
||||
if (!zprop_valid_char(c))
|
||||
return (B_FALSE);
|
||||
|
@ -56,6 +56,7 @@ main(int argc, const char *const *argv)
|
||||
return (1);
|
||||
}
|
||||
const char *dev_name = argv[1];
|
||||
size_t i, len;
|
||||
|
||||
int fd;
|
||||
struct stat sb;
|
||||
@ -73,11 +74,13 @@ main(int argc, const char *const *argv)
|
||||
}
|
||||
|
||||
const char *dev_part = strrchr(dev_name, 'p');
|
||||
len = strlen(zvol_name);
|
||||
if (dev_part != NULL) {
|
||||
sprintf(zvol_name + strlen(zvol_name), "-part%s", dev_part + 1);
|
||||
sprintf(zvol_name + len, "-part%s", dev_part + 1);
|
||||
len = strlen(zvol_name);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < strlen(zvol_name); ++i)
|
||||
for (i = 0; i < len; ++i)
|
||||
if (isblank(zvol_name[i]))
|
||||
zvol_name[i] = '+';
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user