mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-19 20:22:46 +00:00
fix "Casting operation to a pointer"
The print_param struct's member emit who is used for callback, the forth parameter of it is used for transmit the private data of the "print_param". The type translation between "void *" and private date broke the violations. Use the same type to fix it out. Tracked-On: #861 Signed-off-by: Huihuang Shi <huihuang.shi@intel.com> Acked-by: Xu Anthony <anthony.xu@intel.com>
This commit is contained in:
parent
ad1e2ab678
commit
a2516ecc85
@ -6,12 +6,13 @@
|
|||||||
|
|
||||||
#include <hypervisor.h>
|
#include <hypervisor.h>
|
||||||
|
|
||||||
static void charout(size_t cmd, const char *s_arg, uint32_t sz_arg, void *hnd)
|
static void
|
||||||
|
charout(size_t cmd, const char *s_arg, uint32_t sz_arg, struct snprint_param *param)
|
||||||
{
|
{
|
||||||
const char *s = s_arg;
|
const char *s = s_arg;
|
||||||
uint32_t sz = sz_arg;
|
uint32_t sz = sz_arg;
|
||||||
/* pointer to an integer to store the number of characters */
|
/* pointer to an integer to store the number of characters */
|
||||||
size_t *nchars = (size_t *)hnd;
|
size_t nchars = param->wrtn;
|
||||||
/* working pointer */
|
/* working pointer */
|
||||||
const char *p = s;
|
const char *p = s;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -23,30 +24,29 @@ static void charout(size_t cmd, const char *s_arg, uint32_t sz_arg, void *hnd)
|
|||||||
s += len;
|
s += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
*nchars += (s - p);
|
nchars += (s - p);
|
||||||
} else {
|
} else {
|
||||||
/* fill mode */
|
/* fill mode */
|
||||||
*nchars += sz;
|
nchars += sz;
|
||||||
while (sz != 0U) {
|
while (sz != 0U) {
|
||||||
console_putc(s);
|
console_putc(s);
|
||||||
sz--;
|
sz--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
param->wrtn = nchars;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vprintf(const char *fmt, va_list args)
|
void vprintf(const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
/* struct to store all necessary parameters */
|
/* struct to store all necessary parameters */
|
||||||
struct print_param param;
|
struct print_param param;
|
||||||
|
struct snprint_param snparam;
|
||||||
/* argument fo charout() */
|
|
||||||
size_t nchars = 0;
|
|
||||||
|
|
||||||
/* initialize parameters */
|
/* initialize parameters */
|
||||||
|
(void)memset(&snparam, 0U, sizeof(snparam));
|
||||||
(void)memset(¶m, 0U, sizeof(param));
|
(void)memset(¶m, 0U, sizeof(param));
|
||||||
param.emit = charout;
|
param.emit = charout;
|
||||||
param.data = &nchars;
|
param.data = &snparam;
|
||||||
|
|
||||||
/* execute the printf() */
|
/* execute the printf() */
|
||||||
do_print(fmt, ¶m, args);
|
do_print(fmt, ¶m, args);
|
||||||
|
@ -13,14 +13,24 @@
|
|||||||
/* Command for the emit function: fill output with first character. */
|
/* Command for the emit function: fill output with first character. */
|
||||||
#define PRINT_CMD_FILL 0x00000001U
|
#define PRINT_CMD_FILL 0x00000001U
|
||||||
|
|
||||||
|
/** Structure used to call back emit lived in print_param */
|
||||||
|
struct snprint_param {
|
||||||
|
/** The destination buffer. */
|
||||||
|
char *dst;
|
||||||
|
/** The size of the destination buffer. */
|
||||||
|
uint32_t sz;
|
||||||
|
/** Counter for written chars. */
|
||||||
|
uint32_t wrtn;
|
||||||
|
};
|
||||||
|
|
||||||
/* Structure used to parse parameters and variables to subroutines. */
|
/* Structure used to parse parameters and variables to subroutines. */
|
||||||
struct print_param {
|
struct print_param {
|
||||||
/* A pointer to the function that is used to emit characters. */
|
/* A pointer to the function that is used to emit characters. */
|
||||||
void (*emit)(size_t, const char *, uint32_t, void *);
|
void (*emit)(size_t, const char *, uint32_t, struct snprint_param *);
|
||||||
/* An opaque pointer that is passed as third argument to the emit
|
/* An opaque pointer that is passed as forth argument to the emit
|
||||||
* function.
|
* function.
|
||||||
*/
|
*/
|
||||||
void *data;
|
struct snprint_param *data;
|
||||||
/* Contains variables which are recalculated for each argument. */
|
/* Contains variables which are recalculated for each argument. */
|
||||||
struct {
|
struct {
|
||||||
/* A bitfield with the parsed format flags. */
|
/* A bitfield with the parsed format flags. */
|
||||||
|
@ -47,16 +47,6 @@
|
|||||||
/** The value is interpreted as unsigned. */
|
/** The value is interpreted as unsigned. */
|
||||||
#define PRINT_FLAG_UINT32 0x00000400U
|
#define PRINT_FLAG_UINT32 0x00000400U
|
||||||
|
|
||||||
/** Structure used to save (v)snprintf() specific values */
|
|
||||||
struct snprint_param {
|
|
||||||
/** The destination buffer. */
|
|
||||||
char *dst;
|
|
||||||
/** The size of the destination buffer. */
|
|
||||||
uint32_t sz;
|
|
||||||
/** Counter for written chars. */
|
|
||||||
uint32_t wrtn;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** The characters to use for upper case hexadecimal conversion.
|
/** The characters to use for upper case hexadecimal conversion.
|
||||||
*
|
*
|
||||||
* Note that this array is 17 bytes long. The first 16 characters
|
* Note that this array is 17 bytes long. The first 16 characters
|
||||||
@ -551,11 +541,10 @@ void do_print(const char *fmt_arg, struct print_param *param,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void charmem(size_t cmd, const char *s_arg, uint32_t sz, void *hnd)
|
static void
|
||||||
|
charmem(size_t cmd, const char *s_arg, uint32_t sz, struct snprint_param *param)
|
||||||
{
|
{
|
||||||
const char *s = s_arg;
|
const char *s = s_arg;
|
||||||
/* pointer to the snprint parameter list */
|
|
||||||
struct snprint_param *param = (struct snprint_param *) hnd;
|
|
||||||
/* pointer to the destination */
|
/* pointer to the destination */
|
||||||
char *p = param->dst + param->wrtn;
|
char *p = param->dst + param->wrtn;
|
||||||
/* characters actually written */
|
/* characters actually written */
|
||||||
|
Loading…
Reference in New Issue
Block a user