菜鸟刚使用 8H8K64U串口发数据到串口屏,求snprintf,sprintf,printf函数代码
使用STC8H8K64U的串口控制串口屏这都是库函数,没有源码,printf函数很复杂的 bkeuqoaq 发表于 2024-10-30 15:47
这都是库函数,没有源码,printf函数很复杂的
那我想在STC8H8K64U里面使用这些函数,该如何使用呢 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598
void Uart_Printf(unsigned char *v,...)
{
va_list ap;
va_start(ap,v);
while(Uart_Send_Lenth);
UART_Send(vsprintf(T_Buffer,v,ap));
va_end(ap);
}
DebugLab 发表于 2024-10-30 16:01
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);
您的这个范例程序是否可以发变量呢 bh7ni 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);
您的这个范例程序是否可以发 ...
可以 bh7ni 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);
您的这个范例程序是否可以发 ...
printf会调用putchar函数,修改这个函数即可, bkeuqoaq 发表于 2024-10-30 16:45
printf会调用putchar函数,修改这个函数即可,
请教是如何修改呢, bh7ni 发表于 2024-10-30 20:15
请教是如何修改呢,
int putchar(int ch) {
while(TI);
SBUF = ch;
return ch;
}
其它的按串口正常配置初始化就行了 如果只是对接,对接putchar就可以。这里给出这几个函数的写法,虽然不是标准stdio实现,但还是有参考价值的。#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
int new_vprintf(const char *vformat, va_list varg, ...);
int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...);
int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...);
int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...);
int findNumber(char *num_array);
//static int (*orig_puts)(const char *put) = NULL;
static int (*orig_printf)(const char *format, ...) = NULL;
static int (*orig_fprintf)(FILE *file,const char *format, ...) = NULL;
static int (*orig_sprintf)(char * str,const char *format, ...) = NULL;
static int (*orig_snprintf)(char * str,size_t size,const char *format, ...) = NULL;
char *n="%n";
char *x25="\x25";
char *str_to_print;
//char * removeAlln(const char * buf);
int printf (const char *format, ...)
{
//variables
int i=0;
int out_int;
int *out_n;
//char temp;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
va_list argp;
va_start(argp, format);
for (i=0;format!='\0';)
{
if (format=='%')
{
//
i=i+1;
while (format=='0'||format=='1'||format=='2'||format=='3'||format=='4'||format=='5'||format=='6'||format=='7'||format=='8'||format=='9'||format=='$'||format=='*'||format=='.')
//while (!isalpha(format))
{
if (format=='%')
{
break;
}
else
{
number_array=format;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (format=='d')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
(orig_printf)("%d",out_int);
i=i+1; //
}
else if (format=='i')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
(orig_printf)("%i",out_int);
i=i+1; //
}
else if (format=='s')
{
out_string=va_arg(argp, char*);
count=count+strlen(out_string);
(orig_printf)("%s",out_string);
i=i+1; //
}
else if (format=='c')
{
out_char=va_arg(argp, int);
count++;
(orig_printf)("%c",out_char);
i=i+1; //
}
else if (format=='x')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
(orig_printf)("%x",out_hex_int);
i=i+1; //
}
else if (format=='X')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
(orig_printf)("%X",out_hex_int);
i=i+1;
}
else if (format=='f')
{
out_f=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
(orig_printf)("%f",out_f);
i=i+1; //
}
else if (format=='u')
{
out_unsigned_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
(orig_printf)("%u",out_unsigned_int);
i=i+1; //
}
//new
else if (format=='h')
{
if (format=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",format);
i=i+1;
}
}
else if (format=='e')
{
out_e=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (format=='o')
{
out_o=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (format=='p')
{
out_p=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (format=='a')
{
out_a=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (format=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (format=='%')
{
count++;
(orig_printf)("%c",format);
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
(orig_printf)("%c",format);
i++;
}
}
va_end(argp);
return 0;
}
int fprintf (FILE * file, const char *fmt, ...)
{
int i=0;
int out_int;
int *out_n;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
va_list argp;
va_start(argp, fmt);
for (i=0;fmt!='\0';)
{
if (fmt=='%')
{
//
i=i+1;
while (fmt=='0'||fmt=='1'||fmt=='2'||fmt=='3'||fmt=='4'||fmt=='5'||fmt=='6'||fmt=='7'||fmt=='8'||fmt=='9'||fmt=='$'||fmt=='*'||fmt=='.')
//while (!isalpha(fmt))
{
if (fmt=='%')
{
break;
}
else
{
number_array=fmt;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (fmt=='d')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%d",out_int);
i=i+1; //
}
else if (fmt=='i')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%i",out_int);
i=i+1; //
}
else if (fmt=='s')
{
out_string=va_arg(argp, char*);
count=count+strlen(out_string);
(orig_fprintf)(file,"%s",out_string);
i=i+1; //
}
else if (fmt=='c')
{
out_char=va_arg(argp, int);
count++;
(orig_fprintf)(file,"%c",out_char);
i=i+1; //
}
else if (fmt=='x')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%x",out_hex_int);
i=i+1; //
}
else if (fmt=='X')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%X",out_hex_int);
i=i+1; //
}
else if (fmt=='f')
{
out_f=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%f",out_f);
i=i+1; //
}
else if (fmt=='u')
{
out_unsigned_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%u",out_unsigned_int);
i=i+1; //
}
//new
else if (fmt=='h')
{
if (fmt=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",fmt);
i=i+1;
}
}
else if (fmt=='e')
{
out_e=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (fmt=='o')
{
out_o=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (fmt=='p')
{
out_p=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (fmt=='a')
{
out_a=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (fmt=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (fmt=='%')
{
count++;
(orig_fprintf)(file,"%c",fmt);
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
(orig_fprintf)(file,"%c",fmt);
i++;
}
}
va_end(argp);
return 0;
}
int sprintf (char *str, const char *sformat, ...)
{
int i=0;
int out_int;
int *out_n;
int len;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
char final_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
va_list argp;
va_start(argp, sformat);
for (i=0;sformat!='\0';)
{
if (sformat=='%')
{
//
i=i+1;
while (sformat=='0'||sformat=='1'||sformat=='2'||sformat=='3'||sformat=='4'||sformat=='5'||sformat=='6'||sformat=='7'||sformat=='8'||sformat=='9'||sformat=='$'||sformat=='*'||sformat=='.')
//while (!isalpha(sformat))
{
if (sformat=='%')
{
break;
}
else
{
number_array=sformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (sformat=='d')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (sformat=='i')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1;
}
else if (sformat=='s')
{
out_string=va_arg(argp, char*);
count=count+strlen(out_string);
strcat(final_string,out_string);
i=i+1; //
}
else if (sformat=='c')
{
out_char=va_arg(argp, int);
count++;
len=strlen(final_string);
final_string=out_char;
i=i+1; //
}
else if (sformat=='x')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (sformat=='X')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1;
}
else if (sformat=='f')
{
out_f=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (sformat=='u')
{
out_unsigned_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
//new
else if (sformat=='h')
{
if (sformat=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",sformat);
i=i+1;
}
}
else if (sformat=='e')
{
out_e=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (sformat=='o')
{
out_o=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (sformat=='p')
{
out_p=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (sformat=='a')
{
out_a=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (sformat=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (sformat=='%')
{
count++;
len=strlen(final_string);
final_string=sformat;
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
len=strlen(final_string);
final_string=sformat;
i++;
}
}
(orig_sprintf)(str,"%s",final_string);
va_end(argp);
return 0;
}
int snprintf(char *snstr, size_t size, const char * snformat, ...)
{
int i=0;
int out_int;
int *out_n;
int len;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
char final_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
int count=0;
va_list argp;
va_start(argp, snformat);
for (i=0;snformat!='\0';)
{
if (snformat=='%')
{
//
i=i+1;
while (snformat=='0'||snformat=='1'||snformat=='2'||snformat=='3'||snformat=='4'||snformat=='5'||snformat=='6'||snformat=='7'||snformat=='8'||snformat=='9'||snformat=='$'||snformat=='*'||snformat=='.')
//while (!isalpha(snformat))
{
if (snformat=='%')
{
break;
}
else
{
number_array=snformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (snformat=='d')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (snformat=='i')
{
out_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1;
}
else if (snformat=='s')
{
out_string=va_arg(argp, char*);
count=count+strlen(out_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (snformat=='c')
{
out_char=va_arg(argp, int);
count++;
len=strlen(final_string);
final_string=out_char;
i=i+1; //
}
else if (snformat=='x')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (snformat=='X')
{
out_hex_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1;
}
else if (snformat=='f')
{
out_f=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (snformat=='u')
{
out_unsigned_int=va_arg(argp, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
//new
else if (snformat=='h')
{
if (snformat=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",snformat);
i=i+1;
}
}
else if (snformat=='e')
{
out_e=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (snformat=='o')
{
out_o=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (snformat=='p')
{
out_p=va_arg(argp, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (snformat=='a')
{
out_a=va_arg(argp,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (snformat=='n')
{
out_n=(int *)va_arg(argp,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (snformat=='%')
{
count++;
len=strlen(final_string);
final_string=snformat;
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
len=strlen(final_string);
final_string=snformat;
i++;
}
}
(orig_snprintf)(snstr,size,"%s",final_string);
//(orig_snprintf)(snstr,size,final_string);
va_end(argp);
return 0;
}
int vprintf (const char *format, va_list arg)
{
new_vprintf(format,arg);
return 0;
}
int vfprintf(FILE *file, const char *format, va_list arg)
{
new_vfprintf(file, format, arg);
return 0;
}
int new_vprintf(const char *vformat, va_list varg, ...)
{
int i=0;
int out_int;
int *out_n;
//char temp;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
for (i=0;vformat!='\0';)
{
if (vformat=='%')
{
//
i=i+1;
while (vformat=='0'||vformat=='1'||vformat=='2'||vformat=='3'||vformat=='4'||vformat=='5'||vformat=='6'||vformat=='7'||vformat=='8'||vformat=='9'||vformat=='$'||vformat=='*'||vformat=='.')
//while (!isalpha(vformat))
{
if (vformat=='%')
{
break;
}
else
{
number_array=vformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (vformat=='d')
{
out_int=va_arg(varg, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
(orig_printf)("%d",out_int);
i=i+1; //
}
else if (vformat=='i')
{
out_int=va_arg(varg, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
(orig_printf)("%i",out_int);
i=i+1;
}
else if (vformat=='s')
{
out_string=va_arg(varg, char*);
count=count+strlen(out_string);
(orig_printf)("%s",out_string);
i=i+1; //
}
else if (vformat=='c')
{
out_char=va_arg(varg, int);
count++;
(orig_printf)("%c",out_char);
i=i+1; //
}
else if (vformat=='x')
{
out_hex_int=va_arg(varg, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
(orig_printf)("%x",out_hex_int);
i=i+1; //
}
else if (vformat=='X')
{
out_hex_int=va_arg(varg, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
(orig_printf)("%X",out_hex_int);
i=i+1;
}
else if (vformat=='f')
{
out_f=va_arg(varg,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
(orig_printf)("%f",out_f);
i=i+1; //
}
else if (vformat=='u')
{
out_unsigned_int=va_arg(varg, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
(orig_printf)("%u",out_unsigned_int);
i=i+1; //
}
//new
else if (vformat=='h')
{
if (vformat=='n')
{
out_n=(int *)va_arg(varg,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",vformat);
i=i+1;
}
}
else if (vformat=='e')
{
out_e=va_arg(varg,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (vformat=='o')
{
out_o=va_arg(varg, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (vformat=='p')
{
out_p=va_arg(varg, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (vformat=='a')
{
out_a=va_arg(varg,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (vformat=='n')
{
out_n=(int *)va_arg(varg,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (vformat=='%')
{
count++;
(orig_printf)("%c",vformat);
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
(orig_printf)("%c",vformat);
i++;
}
}
return 0;
}
int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...)
{
int i=0;
int out_int;
int *out_n;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
for (i=0;vfformat!='\0';)
{
if (vfformat=='%')
{
//
i=i+1;
while (vfformat=='0'||vfformat=='1'||vfformat=='2'||vfformat=='3'||vfformat=='4'||vfformat=='5'||vfformat=='6'||vfformat=='7'||vfformat=='8'||vfformat=='9'||vfformat=='$'||vfformat=='*'||vfformat=='.')
//while (!isalpha(vfformat))
{
if (vfformat=='%')
{
break;
}
else
{
number_array=vfformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (vfformat=='d')
{
out_int=va_arg(vfarg, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%d",out_int);
i=i+1; //
}
else if (vfformat=='i')
{
out_int=va_arg(vfarg, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%i",out_int);
i=i+1; //
}
else if (vfformat=='s')
{
out_string=va_arg(vfarg, char*);
count=count+strlen(out_string);
(orig_fprintf)(file,"%s",out_string);
i=i+1; //
}
else if (vfformat=='c')
{
out_char=va_arg(vfarg, int);
count++;
(orig_fprintf)(file,"%c",out_char);
i=i+1; //
}
else if (vfformat=='x')
{
out_hex_int=va_arg(vfarg, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%x",out_hex_int);
i=i+1; //
}
else if (vfformat=='X')
{
out_hex_int=va_arg(vfarg, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%X",out_hex_int);
i=i+1;
}
else if (vfformat=='f')
{
out_f=va_arg(vfarg,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%f",out_f);
i=i+1; //
}
else if (vfformat=='u')
{
out_unsigned_int=va_arg(vfarg, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
(orig_fprintf)(file,"%u",out_unsigned_int);
i=i+1; //
}
//new
else if (vfformat=='h')
{
if (vfformat=='n')
{
out_n=(int *)va_arg(vfarg,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",vfformat);
i=i+1;
}
}
else if (vfformat=='e')
{
out_e=va_arg(vfarg,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (vfformat=='o')
{
out_o=va_arg(vfarg, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (vfformat=='p')
{
out_p=va_arg(vfarg, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (vfformat=='a')
{
out_a=va_arg(vfarg,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (vfformat=='n')
{
out_n=(int *)va_arg(vfarg,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (vfformat=='%')
{
count++;
(orig_fprintf)(file,"%c",vfformat);
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
(orig_fprintf)(file,"%c",vfformat);
i++;
}
}
return 0;
}
int vsprintf(char *str, const char * format, va_list arg)
{
new_vsprintf(str,format,arg);
return 0;
}
int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...)
{
int i=0;
int out_int;
int *out_n;
int len;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
char final_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
int count=0;
for (i=0;vsformat!='\0';)
{
if (vsformat=='%')
{
//
i=i+1;
while (vsformat=='0'||vsformat=='1'||vsformat=='2'||vsformat=='3'||vsformat=='4'||vsformat=='5'||vsformat=='6'||vsformat=='7'||vsformat=='8'||vsformat=='9'||vsformat=='$'||vsformat=='*'||vsformat=='.')
//while (!isalpha(vsformat))
{
if (vsformat=='%')
{
break;
}
else
{
number_array=vsformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (vsformat=='d')
{
out_int=va_arg(vsarg, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsformat=='i')
{
out_int=va_arg(vsarg, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsformat=='s')
{
out_string=va_arg(vsarg, char*);
count=count+strlen(out_string);
strcat(final_string,out_string);
i=i+1; //
}
else if (vsformat=='c')
{
out_char=va_arg(vsarg, int);
count++;
len=strlen(final_string);
final_string=out_char;
i=i+1; //
}
else if (vsformat=='x')
{
out_hex_int=va_arg(vsarg, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsformat=='X')
{
out_hex_int=va_arg(vsarg, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1;
}
else if (vsformat=='f')
{
out_f=va_arg(vsarg,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsformat=='u')
{
out_unsigned_int=va_arg(vsarg, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
//new
else if (vsformat=='h')
{
if (vsformat=='n')
{
out_n=(int *)va_arg(vsarg,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",vsformat);
i=i+1;
}
}
else if (vsformat=='e')
{
out_e=va_arg(vsarg,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (vsformat=='o')
{
out_o=va_arg(vsarg, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (vsformat=='p')
{
out_p=va_arg(vsarg, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (vsformat=='a')
{
out_a=va_arg(vsarg,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (vsformat=='n')
{
out_n=(int *)va_arg(vsarg,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (vsformat=='%')
{
count++;
len=strlen(final_string);
final_string=vsformat;
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
len=strlen(final_string);
final_string=vsformat;
i++;
}
}
(orig_sprintf)(str,"%s",final_string);
return 0;
}
int vsnprintf(char *snstr, size_t size, const char *snformat, va_list arg)
{
new_vsnprintf(snstr, size, snformat, arg);
return 0;
}
int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...)
{
int i=0;
int out_int;
int *out_n;
int len;
unsigned int out_hex_int;
unsigned int out_unsigned_int;
char out_char=NULL;
char *out_string=NULL;
char int_to_string;
char final_string;
double out_f;
double out_e;
//
double out_a;
unsigned int out_o;
unsigned int out_p;
int k=0;
//int circle=0;
//int number;
char number_array;
//int loop;
//
orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
int count=0;
for (i=0;vsnformat!='\0';)
{
if (vsnformat=='%')
{
//
i=i+1;
while (vsnformat=='0'||vsnformat=='1'||vsnformat=='2'||vsnformat=='3'||vsnformat=='4'||vsnformat=='5'||vsnformat=='6'||vsnformat=='7'||vsnformat=='8'||vsnformat=='9'||vsnformat=='$'||vsnformat=='*'||vsnformat=='.')
//while (!isalpha(vsnformat))
{
if (vsnformat=='%')
{
break;
}
else
{
number_array=vsnformat;
i=i+1;
}
}
//number=findNumber(number_array);
//
if (vsnformat=='d')
{
out_int=va_arg(vsnfarg, int);
(orig_sprintf)(int_to_string,"%d",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='i')
{
out_int=va_arg(vsnfarg, int);
(orig_sprintf)(int_to_string,"%i",out_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='s')
{
out_string=va_arg(vsnfarg, char*);
count=count+strlen(out_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='c')
{
out_char=va_arg(vsnfarg, int);
count++;
len=strlen(final_string);
final_string=out_char;
i=i+1; //
}
else if (vsnformat=='x')
{
out_hex_int=va_arg(vsnfarg, int);
(orig_sprintf)(int_to_string,"%x",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='X')
{
out_hex_int=va_arg(vsnfarg, int);
(orig_sprintf)(int_to_string,"%X",out_hex_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='f')
{
out_f=va_arg(vsnfarg,double);
(orig_sprintf)(int_to_string,"%f",out_f);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
else if (vsnformat=='u')
{
out_unsigned_int=va_arg(vsnfarg, int);
(orig_sprintf)(int_to_string,"%u",out_unsigned_int);
count=count+strlen(int_to_string);
strcat(final_string,int_to_string);
i=i+1; //
}
//new
else if (vsnformat=='h')
{
if (vsnformat=='n')
{
out_n=(int *)va_arg(vsnfarg,int*);
//*out_n=count;
i=i+2;
}
else
{
count++;
(orig_printf)("%c",vsnformat);
i=i+1;
}
}
else if (vsnformat=='e')
{
out_e=va_arg(vsnfarg,double);
(orig_sprintf)(int_to_string,"%e",out_e);
count=count+strlen(int_to_string);
(orig_printf)("%e",out_e);
i=i+1;
}
else if (vsnformat=='o')
{
out_o=va_arg(vsnfarg, unsigned int);
(orig_sprintf)(int_to_string,"%o",out_o);
count=count+strlen(int_to_string);
(orig_printf)("%o",out_o);
i=i+1;
}
else if (vsnformat=='p')
{
out_p=va_arg(vsnfarg, unsigned int);
(orig_sprintf)(int_to_string,"%p",out_p);
count=count+strlen(int_to_string);
(orig_printf)("%p",out_p);
i=i+1;
}
else if (vsnformat=='a')
{
out_a=va_arg(vsnfarg,double);
(orig_sprintf)(int_to_string,"%a",out_a);
count=count+strlen(int_to_string);
(orig_printf)("%a",out_a);
i=i+1;
}
//new
else if (vsnformat=='n')
{
out_n=(int *)va_arg(vsnfarg,int*);
//*out_n=count; //uncomment this for test1 and test2
i=i+1;
}
else if (vsnformat=='%')
{
count++;
len=strlen(final_string);
final_string=vsnformat;
i=i+1;
}
else
{
count++;
i++;
}
}
else
{
count++;
len=strlen(final_string);
final_string=vsnformat;
i++;
}
}
(orig_snprintf)(snstr,size,"%s",final_string);
//(orig_snprintf)(snstr,size,final_string);
return 0;
}
int findNumber(char *num_array)
{
//int length=strlen(num_array);
int number;
sscanf(num_array,"%d",&number);
return number;
}
页:
[1]
2