object: Make INIT() a compound statement

This forces the use of a semicolon after INIT() and makes existing ones,
which was the case for basically all instances, necessary so e.g.
sonarcloud won't complain about an empty statement after every one of
them.

By evaluating to the allocated object, it would theoretically also allow
constructs like this:

  struct_t *this;

  return INIT(this,
  	.a = x,
  	.b = y,
  );

or this:

  array_insert(a, ARRAY_TAIL, INIT(this,
    .a = x,
    .b = y,
  ));
This commit is contained in:
Tobias Brunner
2022-09-29 11:36:00 +02:00
parent 3da4ac8ef6
commit e0fd191f31
3 changed files with 4 additions and 4 deletions
@@ -266,7 +266,7 @@ static array_t *select_signature_schemes(keymat_v2_t *keymat,
{
INIT(config,
.scheme = scheme,
)
);
array_insert(selected, ARRAY_TAIL, config);
}
}
+2 -2
View File
@@ -41,8 +41,8 @@
/**
* Object allocation/initialization macro, using designated initializer.
*/
#define INIT(this, ...) { (this) = malloc(sizeof(*(this))); \
*(this) = (typeof(*(this))){ __VA_ARGS__ }; }
#define INIT(this, ...) ({ (this) = malloc(sizeof(*(this))); \
*(this) = (typeof(*(this))){ __VA_ARGS__ }; (this); })
/**
* Aligning version of INIT().
+1 -1
View File
@@ -78,7 +78,7 @@ static package_t* create_package(swid_gen_info_t *info, chunk_t package,
.package = strndup(package.ptr, package.len),
.version = strndup(version.ptr, version.len),
.old_version = strndup(old_version.ptr, old_version.len),
)
);
this->sw_id = info->create_sw_id(info, this->package, this->version);
if (old_version.len)