找回密码
 立即注册
查看: 820|回复: 15

菜鸟刚使用 8H8K64U串口发数据到串口屏,求snprintf,sprintf,printf函数代码

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-05-01 14:31:13

7

主题

50

回帖

838

积分

高级会员

积分
838
发表于 2024-10-30 15:12:37 | 显示全部楼层 |阅读模式
使用STC8H8K64U的串口控制串口屏
BH7NI 在深圳的安徽人
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-10-30 15:47:57 | 显示全部楼层
这都是库函数,没有源码,printf函数很复杂的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-05-01 14:31:13

7

主题

50

回帖

838

积分

高级会员

积分
838
发表于 2024-10-30 15:53:36 | 显示全部楼层
bkeu*** 发表于 2024-10-30 15:47
这都是库函数,没有源码,printf函数很复杂的

那我想在STC8H8K64U里面使用这些函数,该如何使用呢
BH7NI 在深圳的安徽人
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-10-30 16:01:16 | 显示全部楼层
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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-05-01 14:31:13

7

主题

50

回帖

838

积分

高级会员

积分
838
发表于 2024-10-30 16:20:33 | 显示全部楼层
Debu*** 发表于 2024-10-30 16:01
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598

我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发变量呢

点评

可以  详情 回复 发表于 2024-10-30 16:22
BH7NI 在深圳的安徽人
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-10-30 16:22:29 | 显示全部楼层
bh7*** 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发 ...

可以
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-10-30 16:45:37 | 显示全部楼层
bh7*** 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发 ...

printf会调用putchar函数,修改这个函数即可,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-05-01 14:31:13

7

主题

50

回帖

838

积分

高级会员

积分
838
发表于 2024-10-30 20:15:04 | 显示全部楼层
bkeu*** 发表于 2024-10-30 16:45
printf会调用putchar函数,修改这个函数即可,

请教是如何修改呢,
BH7NI 在深圳的安徽人
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2024-10-31 10:54:20 | 显示全部楼层
bh7*** 发表于 2024-10-30 20:15
请教是如何修改呢,
  1. int putchar(int ch) {
  2.     while(TI);
  3.     SBUF = ch;
  4.     return ch;
  5. }
复制代码

其它的按串口正常配置初始化就行了
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-30 13:52:43

10

主题

134

回帖

993

积分

高级会员

积分
993
发表于 2024-10-31 11:03:51 | 显示全部楼层
如果只是对接,对接putchar就可以。这里给出这几个函数的写法,虽然不是标准stdio实现,但还是有参考价值的。
  1. #include <stdio.h>
  2. #include <dlfcn.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <stdarg.h>
  6. #include <ctype.h>
  7. int new_vprintf(const char *vformat, va_list varg, ...);
  8. int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...);
  9. int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...);
  10. int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...);
  11. int findNumber(char *num_array);
  12. //static int (*orig_puts)(const char *put) = NULL;
  13. static int (*orig_printf)(const char *format, ...) = NULL;
  14. static int (*orig_fprintf)(FILE *file,const char *format, ...) = NULL;
  15. static int (*orig_sprintf)(char * str,const char *format, ...) = NULL;
  16. static int (*orig_snprintf)(char * str,size_t size,const char *format, ...) = NULL;
  17. char *n="%n";
  18. char *x25="\x25";
  19. char *str_to_print;
  20. //char * removeAlln(const char * buf);
  21. int printf (const char *format, ...)
  22. {
  23.         //variables
  24.         int i=0;
  25.         int out_int;
  26.         int *out_n;
  27.         //char temp;
  28.         unsigned int out_hex_int;
  29.         unsigned int out_unsigned_int;
  30.         char out_char=NULL;
  31.         char *out_string=NULL;
  32.         char int_to_string[20];
  33.         double out_f;
  34.         double out_e;
  35.         //
  36.         double out_a;
  37.         unsigned int out_o;
  38.         unsigned int out_p;
  39.         int k=0;
  40.         //int circle=0;
  41.         //int number;
  42.         char number_array[6];
  43.         //int loop;
  44.         //
  45.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  46.         orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  47.         int count=0;
  48.         va_list argp;
  49.         va_start(argp, format);
  50.         for (i=0;format[i]!='\0';)
  51.         {
  52.                 if (format[i]=='%')
  53.                 {       
  54.                         //
  55.                         i=i+1;
  56.                         while (format[i]=='0'||format[i]=='1'||format[i]=='2'||format[i]=='3'||format[i]=='4'||format[i]=='5'||format[i]=='6'||format[i]=='7'||format[i]=='8'||format[i]=='9'||format[i]=='$'||format[i]=='*'||format[i]=='.')
  57.                         //while (!isalpha(format[i]))
  58.                         {
  59.                                 if (format[i]=='%')
  60.                                 {
  61.                                         break;
  62.                                 }
  63.                                 else
  64.                                 {
  65.                                         number_array[k++]=format[i];
  66.                                         i=i+1;                                       
  67.                                 }       
  68.                         }
  69.                         //number=findNumber(number_array);
  70.                         //
  71.                         if (format[i]=='d')
  72.                         {
  73.                                 out_int=va_arg(argp, int);
  74.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  75.                                 count=count+strlen(int_to_string);
  76.                                 (orig_printf)("%d",out_int);
  77.                                 i=i+1;                        //
  78.                         }
  79.                         else if (format[i]=='i')
  80.                         {
  81.                                 out_int=va_arg(argp, int);
  82.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  83.                                 count=count+strlen(int_to_string);
  84.                                 (orig_printf)("%i",out_int);
  85.                                 i=i+1;                        //
  86.                         }
  87.                         else if (format[i]=='s')
  88.                         {
  89.                                 out_string=va_arg(argp, char*);
  90.                                 count=count+strlen(out_string);
  91.                                 (orig_printf)("%s",out_string);
  92.                                 i=i+1;                        //
  93.                         }
  94.                         else if (format[i]=='c')
  95.                         {
  96.                                 out_char=va_arg(argp, int);
  97.                                 count++;
  98.                                 (orig_printf)("%c",out_char);
  99.                                 i=i+1;                        //
  100.                         }
  101.                         else if (format[i]=='x')
  102.                         {
  103.                                 out_hex_int=va_arg(argp, int);
  104.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  105.                                 count=count+strlen(int_to_string);
  106.                                 (orig_printf)("%x",out_hex_int);
  107.                                 i=i+1;                        //
  108.                         }
  109.                         else if (format[i]=='X')
  110.                         {
  111.                                 out_hex_int=va_arg(argp, int);
  112.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  113.                                 count=count+strlen(int_to_string);
  114.                                 (orig_printf)("%X",out_hex_int);
  115.                                 i=i+1;       
  116.                         }
  117.                         else if (format[i]=='f')
  118.                         {
  119.                                 out_f=va_arg(argp,double);
  120.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  121.                                 count=count+strlen(int_to_string);
  122.                                 (orig_printf)("%f",out_f);
  123.                                 i=i+1;                        //
  124.                         }
  125.                         else if (format[i]=='u')
  126.                         {
  127.                                 out_unsigned_int=va_arg(argp, int);
  128.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  129.                                 count=count+strlen(int_to_string);
  130.                                 (orig_printf)("%u",out_unsigned_int);
  131.                                 i=i+1;                        //
  132.                         }
  133.                         //new
  134.                         else if (format[i]=='h')
  135.                         {
  136.                                 if (format[i+1]=='n')
  137.                                 {
  138.                                         out_n=(int *)va_arg(argp,int*);
  139.                                         //*out_n=count;
  140.                                         i=i+2;
  141.                                 }
  142.                                 else
  143.                                 {
  144.                                         count++;
  145.                                         (orig_printf)("%c",format[i]);
  146.                                         i=i+1;
  147.                                 }
  148.                         }
  149.                         else if (format[i]=='e')
  150.                         {
  151.                                 out_e=va_arg(argp,double);
  152.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  153.                                 count=count+strlen(int_to_string);
  154.                                 (orig_printf)("%e",out_e);
  155.                                 i=i+1;       
  156.                         }
  157.                         else if (format[i]=='o')
  158.                         {
  159.                                 out_o=va_arg(argp, unsigned int);
  160.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  161.                                 count=count+strlen(int_to_string);
  162.                                 (orig_printf)("%o",out_o);
  163.                                 i=i+1;       
  164.                         }
  165.                         else if (format[i]=='p')
  166.                         {
  167.                                 out_p=va_arg(argp, unsigned int);
  168.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  169.                                 count=count+strlen(int_to_string);
  170.                                 (orig_printf)("%p",out_p);
  171.                                 i=i+1;
  172.                         }
  173.                         else if (format[i]=='a')
  174.                         {
  175.                                 out_a=va_arg(argp,double);
  176.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  177.                                 count=count+strlen(int_to_string);
  178.                                 (orig_printf)("%a",out_a);
  179.                                 i=i+1;               
  180.                         }
  181.                         //new
  182.                         else if (format[i]=='n')
  183.                         {
  184.                                 out_n=(int *)va_arg(argp,int*);
  185.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  186.                                 i=i+1;
  187.                         }
  188.                         else if (format[i]=='%')
  189.                         {
  190.                                 count++;
  191.                                 (orig_printf)("%c",format[i]);
  192.                                 i=i+1;
  193.                         }
  194.                         else
  195.                         {
  196.                                 count++;
  197.                                 i++;
  198.                         }
  199.                 }
  200.                 else
  201.                 {
  202.                         count++;
  203.                         (orig_printf)("%c",format[i]);
  204.                         i++;
  205.                 }
  206.         }
  207.         va_end(argp);
  208.         return 0;
  209. }
  210. int fprintf (FILE * file, const char *fmt, ...)
  211. {
  212.         int i=0;
  213.         int out_int;
  214.         int *out_n;
  215.         unsigned int out_hex_int;
  216.         unsigned int out_unsigned_int;
  217.         char out_char=NULL;
  218.         char *out_string=NULL;
  219.         char int_to_string[20];
  220.         double out_f;
  221.         double out_e;
  222.         //
  223.         double out_a;
  224.         unsigned int out_o;
  225.         unsigned int out_p;
  226.         int k=0;
  227.         //int circle=0;
  228.         //int number;
  229.         char number_array[6];
  230.         //int loop;
  231.         //
  232.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  233.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  234.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  235.         int count=0;
  236.         va_list argp;
  237.         va_start(argp, fmt);
  238.         for (i=0;fmt[i]!='\0';)
  239.         {
  240.                 if (fmt[i]=='%')
  241.                 {
  242.                         //
  243.                         i=i+1;
  244.                         while (fmt[i]=='0'||fmt[i]=='1'||fmt[i]=='2'||fmt[i]=='3'||fmt[i]=='4'||fmt[i]=='5'||fmt[i]=='6'||fmt[i]=='7'||fmt[i]=='8'||fmt[i]=='9'||fmt[i]=='$'||fmt[i]=='*'||fmt[i]=='.')
  245.                         //while (!isalpha(fmt[i]))
  246.                         {       
  247.                                 if (fmt[i]=='%')
  248.                                 {
  249.                                         break;
  250.                                 }
  251.                                 else
  252.                                 {
  253.                                         number_array[k++]=fmt[i];
  254.                                         i=i+1;
  255.                                 }
  256.                         }
  257.                         //number=findNumber(number_array);
  258.                         //
  259.                         if (fmt[i]=='d')
  260.                         {
  261.                                 out_int=va_arg(argp, int);
  262.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  263.                                 count=count+strlen(int_to_string);
  264.                                 (orig_fprintf)(file,"%d",out_int);
  265.                                 i=i+1;                        //
  266.                         }
  267.                         else if (fmt[i]=='i')
  268.                         {
  269.                                 out_int=va_arg(argp, int);
  270.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  271.                                 count=count+strlen(int_to_string);
  272.                                 (orig_fprintf)(file,"%i",out_int);
  273.                                 i=i+1;                        //
  274.                         }
  275.                         else if (fmt[i]=='s')
  276.                         {
  277.                                 out_string=va_arg(argp, char*);
  278.                                 count=count+strlen(out_string);
  279.                                 (orig_fprintf)(file,"%s",out_string);
  280.                                 i=i+1;                        //
  281.                         }
  282.                         else if (fmt[i]=='c')
  283.                         {
  284.                                 out_char=va_arg(argp, int);
  285.                                 count++;
  286.                                 (orig_fprintf)(file,"%c",out_char);
  287.                                 i=i+1;                        //
  288.                         }
  289.                         else if (fmt[i]=='x')
  290.                         {
  291.                                 out_hex_int=va_arg(argp, int);
  292.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  293.                                 count=count+strlen(int_to_string);
  294.                                 (orig_fprintf)(file,"%x",out_hex_int);
  295.                                 i=i+1;                        //
  296.                         }
  297.                         else if (fmt[i]=='X')
  298.                         {
  299.                                 out_hex_int=va_arg(argp, int);
  300.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  301.                                 count=count+strlen(int_to_string);
  302.                                 (orig_fprintf)(file,"%X",out_hex_int);
  303.                                 i=i+1;                        //
  304.                         }
  305.                         else if (fmt[i]=='f')
  306.                         {
  307.                                 out_f=va_arg(argp,double);
  308.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  309.                                 count=count+strlen(int_to_string);
  310.                                 (orig_fprintf)(file,"%f",out_f);
  311.                                 i=i+1;                        //
  312.                         }
  313.                         else if (fmt[i]=='u')
  314.                         {
  315.                                 out_unsigned_int=va_arg(argp, int);
  316.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  317.                                 count=count+strlen(int_to_string);
  318.                                 (orig_fprintf)(file,"%u",out_unsigned_int);
  319.                                 i=i+1;                        //
  320.                         }
  321.                         //new
  322.                         else if (fmt[i]=='h')
  323.                         {
  324.                                 if (fmt[i+1]=='n')
  325.                                 {
  326.                                         out_n=(int *)va_arg(argp,int*);
  327.                                         //*out_n=count;
  328.                                         i=i+2;
  329.                                 }
  330.                                 else
  331.                                 {
  332.                                         count++;
  333.                                         (orig_printf)("%c",fmt[i]);
  334.                                         i=i+1;
  335.                                 }
  336.                         }
  337.                         else if (fmt[i]=='e')
  338.                         {
  339.                                 out_e=va_arg(argp,double);
  340.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  341.                                 count=count+strlen(int_to_string);
  342.                                 (orig_printf)("%e",out_e);
  343.                                 i=i+1;       
  344.                         }
  345.                         else if (fmt[i]=='o')
  346.                         {
  347.                                 out_o=va_arg(argp, unsigned int);
  348.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  349.                                 count=count+strlen(int_to_string);
  350.                                 (orig_printf)("%o",out_o);
  351.                                 i=i+1;       
  352.                         }
  353.                         else if (fmt[i]=='p')
  354.                         {
  355.                                 out_p=va_arg(argp, unsigned int);
  356.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  357.                                 count=count+strlen(int_to_string);
  358.                                 (orig_printf)("%p",out_p);
  359.                                 i=i+1;
  360.                         }
  361.                         else if (fmt[i]=='a')
  362.                         {
  363.                                 out_a=va_arg(argp,double);
  364.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  365.                                 count=count+strlen(int_to_string);
  366.                                 (orig_printf)("%a",out_a);
  367.                                 i=i+1;               
  368.                         }
  369.                         //new
  370.                         else if (fmt[i]=='n')
  371.                         {
  372.                                 out_n=(int *)va_arg(argp,int*);
  373.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  374.                                 i=i+1;
  375.                         }
  376.                         else if (fmt[i]=='%')
  377.                         {
  378.                                 count++;
  379.                                 (orig_fprintf)(file,"%c",fmt[i]);
  380.                                 i=i+1;
  381.                         }
  382.                         else
  383.                         {
  384.                                 count++;
  385.                                 i++;
  386.                         }
  387.                 }
  388.                 else
  389.                 {
  390.                         count++;
  391.                         (orig_fprintf)(file,"%c",fmt[i]);
  392.                         i++;
  393.                 }
  394.         }
  395.         va_end(argp);
  396.         return 0;
  397. }
  398. int sprintf (char *str, const char *sformat, ...)
  399. {
  400.         int i=0;
  401.         int out_int;
  402.         int *out_n;
  403.         int len;
  404.         unsigned int out_hex_int;
  405.         unsigned int out_unsigned_int;
  406.         char out_char=NULL;
  407.         char *out_string=NULL;
  408.         char int_to_string[20];
  409.         char final_string[65535];
  410.         double out_f;
  411.         double out_e;
  412.         //
  413.         double out_a;
  414.         unsigned int out_o;
  415.         unsigned int out_p;
  416.         int k=0;
  417.         //int circle=0;
  418.         //int number;
  419.         char number_array[6];
  420.         //int loop;
  421.         //
  422.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  423.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  424.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  425.         int count=0;
  426.         va_list argp;
  427.         va_start(argp, sformat);
  428.         for (i=0;sformat[i]!='\0';)
  429.         {
  430.                 if (sformat[i]=='%')
  431.                 {
  432.                         //
  433.                         i=i+1;
  434.                         while (sformat[i]=='0'||sformat[i]=='1'||sformat[i]=='2'||sformat[i]=='3'||sformat[i]=='4'||sformat[i]=='5'||sformat[i]=='6'||sformat[i]=='7'||sformat[i]=='8'||sformat[i]=='9'||sformat[i]=='$'||sformat[i]=='*'||sformat[i]=='.')
  435.                         //while (!isalpha(sformat[i]))
  436.                         {       
  437.                                 if (sformat[i]=='%')
  438.                                 {
  439.                                         break;
  440.                                 }
  441.                                 else
  442.                                 {
  443.                                         number_array[k++]=sformat[i];
  444.                                         i=i+1;
  445.                                 }
  446.                         }
  447.                         //number=findNumber(number_array);
  448.                         //
  449.                         if (sformat[i]=='d')
  450.                         {
  451.                                 out_int=va_arg(argp, int);
  452.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  453.                                 count=count+strlen(int_to_string);
  454.                                 strcat(final_string,int_to_string);
  455.                                 i=i+1;                        //
  456.                         }
  457.                         else if (sformat[i]=='i')
  458.                         {
  459.                                 out_int=va_arg(argp, int);
  460.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  461.                                 count=count+strlen(int_to_string);
  462.                                 strcat(final_string,int_to_string);
  463.                                 i=i+1;
  464.                         }
  465.                         else if (sformat[i]=='s')
  466.                         {
  467.                                 out_string=va_arg(argp, char*);
  468.                                 count=count+strlen(out_string);
  469.                                 strcat(final_string,out_string);
  470.                                 i=i+1;                        //
  471.                         }
  472.                         else if (sformat[i]=='c')
  473.                         {
  474.                                 out_char=va_arg(argp, int);
  475.                                 count++;
  476.                                 len=strlen(final_string);
  477.                                 final_string[len]=out_char;
  478.                                 i=i+1;                        //
  479.                         }
  480.                         else if (sformat[i]=='x')
  481.                         {
  482.                                 out_hex_int=va_arg(argp, int);
  483.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  484.                                 count=count+strlen(int_to_string);
  485.                                 strcat(final_string,int_to_string);
  486.                                 i=i+1;                        //
  487.                         }
  488.                         else if (sformat[i]=='X')
  489.                         {
  490.                                 out_hex_int=va_arg(argp, int);
  491.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  492.                                 count=count+strlen(int_to_string);
  493.                                 strcat(final_string,int_to_string);
  494.                                 i=i+1;               
  495.                         }
  496.                         else if (sformat[i]=='f')
  497.                         {
  498.                                 out_f=va_arg(argp,double);
  499.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  500.                                 count=count+strlen(int_to_string);
  501.                                 strcat(final_string,int_to_string);
  502.                                 i=i+1;                        //
  503.                         }
  504.                         else if (sformat[i]=='u')
  505.                         {
  506.                                 out_unsigned_int=va_arg(argp, int);
  507.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  508.                                 count=count+strlen(int_to_string);
  509.                                 strcat(final_string,int_to_string);
  510.                                 i=i+1;                        //
  511.                         }
  512.                         //new
  513.                         else if (sformat[i]=='h')
  514.                         {
  515.                                 if (sformat[i+1]=='n')
  516.                                 {
  517.                                         out_n=(int *)va_arg(argp,int*);
  518.                                         //*out_n=count;
  519.                                         i=i+2;
  520.                                 }
  521.                                 else
  522.                                 {
  523.                                         count++;
  524.                                         (orig_printf)("%c",sformat[i]);
  525.                                         i=i+1;
  526.                                 }
  527.                         }
  528.                         else if (sformat[i]=='e')
  529.                         {
  530.                                 out_e=va_arg(argp,double);
  531.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  532.                                 count=count+strlen(int_to_string);
  533.                                 (orig_printf)("%e",out_e);
  534.                                 i=i+1;       
  535.                         }
  536.                         else if (sformat[i]=='o')
  537.                         {
  538.                                 out_o=va_arg(argp, unsigned int);
  539.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  540.                                 count=count+strlen(int_to_string);
  541.                                 (orig_printf)("%o",out_o);
  542.                                 i=i+1;       
  543.                         }
  544.                         else if (sformat[i]=='p')
  545.                         {
  546.                                 out_p=va_arg(argp, unsigned int);
  547.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  548.                                 count=count+strlen(int_to_string);
  549.                                 (orig_printf)("%p",out_p);
  550.                                 i=i+1;
  551.                         }
  552.                         else if (sformat[i]=='a')
  553.                         {
  554.                                 out_a=va_arg(argp,double);
  555.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  556.                                 count=count+strlen(int_to_string);
  557.                                 (orig_printf)("%a",out_a);
  558.                                 i=i+1;               
  559.                         }
  560.                         //new
  561.                         else if (sformat[i]=='n')
  562.                         {
  563.                                 out_n=(int *)va_arg(argp,int*);
  564.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  565.                                 i=i+1;
  566.                         }
  567.                         else if (sformat[i]=='%')
  568.                         {
  569.                                 count++;
  570.                                 len=strlen(final_string);
  571.                                 final_string[len]=sformat[i];
  572.                                 i=i+1;
  573.                         }
  574.                         else
  575.                         {
  576.                                 count++;
  577.                                 i++;
  578.                         }
  579.                 }
  580.                 else
  581.                 {
  582.                         count++;
  583.                         len=strlen(final_string);
  584.                         final_string[len]=sformat[i];
  585.                         i++;
  586.                 }
  587.         }
  588.         (orig_sprintf)(str,"%s",final_string);
  589.         va_end(argp);
  590.         return 0;
  591. }
  592. int snprintf(char *snstr, size_t size, const char * snformat, ...)
  593. {
  594.         int i=0;
  595.         int out_int;
  596.         int *out_n;
  597.         int len;
  598.         unsigned int out_hex_int;
  599.         unsigned int out_unsigned_int;
  600.         char out_char=NULL;
  601.         char *out_string=NULL;
  602.         char int_to_string[20];
  603.         char final_string[65535];
  604.         double out_f;
  605.         double out_e;
  606.         //
  607.         double out_a;
  608.         unsigned int out_o;
  609.         unsigned int out_p;
  610.         int k=0;
  611.         //int circle=0;
  612.         //int number;
  613.         char number_array[6];
  614.         //int loop;
  615.         //
  616.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  617.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  618.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  619.         orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
  620.         int count=0;
  621.         va_list argp;
  622.         va_start(argp, snformat);
  623.         for (i=0;snformat[i]!='\0';)
  624.         {
  625.                 if (snformat[i]=='%')
  626.                 {
  627.                         //
  628.                         i=i+1;
  629.                         while (snformat[i]=='0'||snformat[i]=='1'||snformat[i]=='2'||snformat[i]=='3'||snformat[i]=='4'||snformat[i]=='5'||snformat[i]=='6'||snformat[i]=='7'||snformat[i]=='8'||snformat[i]=='9'||snformat[i]=='$'||snformat[i]=='*'||snformat[i]=='.')
  630.                         //while (!isalpha(snformat[i]))
  631.                         {       
  632.                                 if (snformat[i]=='%')
  633.                                 {
  634.                                         break;
  635.                                 }
  636.                                 else
  637.                                 {
  638.                                         number_array[k++]=snformat[i];
  639.                                         i=i+1;
  640.                                 }
  641.                         }
  642.                         //number=findNumber(number_array);
  643.                         //
  644.                         if (snformat[i]=='d')
  645.                         {
  646.                                 out_int=va_arg(argp, int);
  647.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  648.                                 count=count+strlen(int_to_string);
  649.                                 strcat(final_string,int_to_string);
  650.                                 i=i+1;                        //
  651.                         }
  652.                         else if (snformat[i]=='i')
  653.                         {
  654.                                 out_int=va_arg(argp, int);
  655.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  656.                                 count=count+strlen(int_to_string);
  657.                                 strcat(final_string,int_to_string);
  658.                                 i=i+1;               
  659.                         }
  660.                         else if (snformat[i]=='s')
  661.                         {
  662.                                 out_string=va_arg(argp, char*);
  663.                                 count=count+strlen(out_string);
  664.                                 strcat(final_string,int_to_string);
  665.                                 i=i+1;                        //
  666.                         }
  667.                         else if (snformat[i]=='c')
  668.                         {
  669.                                 out_char=va_arg(argp, int);
  670.                                 count++;
  671.                                 len=strlen(final_string);
  672.                                 final_string[len]=out_char;
  673.                                 i=i+1;                        //
  674.                         }
  675.                         else if (snformat[i]=='x')
  676.                         {
  677.                                 out_hex_int=va_arg(argp, int);
  678.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  679.                                 count=count+strlen(int_to_string);
  680.                                 strcat(final_string,int_to_string);
  681.                                 i=i+1;                        //
  682.                         }
  683.                         else if (snformat[i]=='X')
  684.                         {
  685.                                 out_hex_int=va_arg(argp, int);
  686.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  687.                                 count=count+strlen(int_to_string);
  688.                                 strcat(final_string,int_to_string);
  689.                                 i=i+1;               
  690.                         }
  691.                         else if (snformat[i]=='f')
  692.                         {
  693.                                 out_f=va_arg(argp,double);
  694.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  695.                                 count=count+strlen(int_to_string);
  696.                                 strcat(final_string,int_to_string);
  697.                                 i=i+1;                        //
  698.                         }
  699.                         else if (snformat[i]=='u')
  700.                         {
  701.                                 out_unsigned_int=va_arg(argp, int);
  702.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  703.                                 count=count+strlen(int_to_string);
  704.                                 strcat(final_string,int_to_string);
  705.                                 i=i+1;                        //
  706.                         }
  707.                         //new
  708.                         else if (snformat[i]=='h')
  709.                         {
  710.                                 if (snformat[i+1]=='n')
  711.                                 {
  712.                                         out_n=(int *)va_arg(argp,int*);
  713.                                         //*out_n=count;
  714.                                         i=i+2;
  715.                                 }
  716.                                 else
  717.                                 {
  718.                                         count++;
  719.                                         (orig_printf)("%c",snformat[i]);
  720.                                         i=i+1;
  721.                                 }
  722.                         }
  723.                         else if (snformat[i]=='e')
  724.                         {
  725.                                 out_e=va_arg(argp,double);
  726.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  727.                                 count=count+strlen(int_to_string);
  728.                                 (orig_printf)("%e",out_e);
  729.                                 i=i+1;       
  730.                         }
  731.                         else if (snformat[i]=='o')
  732.                         {
  733.                                 out_o=va_arg(argp, unsigned int);
  734.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  735.                                 count=count+strlen(int_to_string);
  736.                                 (orig_printf)("%o",out_o);
  737.                                 i=i+1;       
  738.                         }
  739.                         else if (snformat[i]=='p')
  740.                         {
  741.                                 out_p=va_arg(argp, unsigned int);
  742.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  743.                                 count=count+strlen(int_to_string);
  744.                                 (orig_printf)("%p",out_p);
  745.                                 i=i+1;
  746.                         }
  747.                         else if (snformat[i]=='a')
  748.                         {
  749.                                 out_a=va_arg(argp,double);
  750.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  751.                                 count=count+strlen(int_to_string);
  752.                                 (orig_printf)("%a",out_a);
  753.                                 i=i+1;               
  754.                         }
  755.                         //new
  756.                         else if (snformat[i]=='n')
  757.                         {
  758.                                 out_n=(int *)va_arg(argp,int*);
  759.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  760.                                 i=i+1;
  761.                         }
  762.                         else if (snformat[i]=='%')
  763.                         {
  764.                                 count++;
  765.                                 len=strlen(final_string);
  766.                                 final_string[len]=snformat[i];
  767.                                 i=i+1;
  768.                         }
  769.                         else
  770.                         {
  771.                                 count++;
  772.                                 i++;
  773.                         }
  774.                 }
  775.                 else
  776.                 {
  777.                         count++;
  778.                         len=strlen(final_string);
  779.                         final_string[len]=snformat[i];
  780.                         i++;
  781.                 }
  782.         }
  783.         (orig_snprintf)(snstr,size,"%s",final_string);
  784.         //(orig_snprintf)(snstr,size,final_string);
  785.         va_end(argp);
  786.         return 0;
  787. }
  788. int vprintf (const char *format, va_list arg)
  789. {
  790.         new_vprintf(format,arg);
  791.         return 0;
  792. }
  793. int vfprintf(FILE *file, const char *format, va_list arg)
  794. {
  795.         new_vfprintf(file, format, arg);
  796.         return 0;
  797. }
  798. int new_vprintf(const char *vformat, va_list varg, ...)
  799. {
  800.         int i=0;
  801.         int out_int;
  802.         int *out_n;
  803.         //char temp;
  804.         unsigned int out_hex_int;
  805.         unsigned int out_unsigned_int;
  806.         char out_char=NULL;
  807.         char *out_string=NULL;
  808.         char int_to_string[20];
  809.         double out_f;
  810.         double out_e;
  811.         //
  812.         double out_a;
  813.         unsigned int out_o;
  814.         unsigned int out_p;
  815.         int k=0;
  816.         //int circle=0;
  817.         //int number;
  818.         char number_array[6];
  819.         //int loop;
  820.         //
  821.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  822.         orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  823.         int count=0;
  824.        
  825.         for (i=0;vformat[i]!='\0';)
  826.         {
  827.                 if (vformat[i]=='%')
  828.                 {
  829.                         //
  830.                         i=i+1;
  831.                         while (vformat[i]=='0'||vformat[i]=='1'||vformat[i]=='2'||vformat[i]=='3'||vformat[i]=='4'||vformat[i]=='5'||vformat[i]=='6'||vformat[i]=='7'||vformat[i]=='8'||vformat[i]=='9'||vformat[i]=='$'||vformat[i]=='*'||vformat[i]=='.')
  832.                         //while (!isalpha(vformat[i]))
  833.                         {       
  834.                                 if (vformat[i]=='%')
  835.                                 {
  836.                                         break;
  837.                                 }
  838.                                 else
  839.                                 {
  840.                                         number_array[k++]=vformat[i];
  841.                                         i=i+1;                                       
  842.                                 }
  843.                         }
  844.                         //number=findNumber(number_array);
  845.                         //
  846.                         if (vformat[i]=='d')
  847.                         {
  848.                                 out_int=va_arg(varg, int);
  849.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  850.                                 count=count+strlen(int_to_string);
  851.                                 (orig_printf)("%d",out_int);
  852.                                 i=i+1;                        //
  853.                         }
  854.                         else if (vformat[i]=='i')
  855.                         {
  856.                                 out_int=va_arg(varg, int);
  857.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  858.                                 count=count+strlen(int_to_string);
  859.                                 (orig_printf)("%i",out_int);
  860.                                 i=i+1;                       
  861.                         }
  862.                         else if (vformat[i]=='s')
  863.                         {
  864.                                 out_string=va_arg(varg, char*);
  865.                                 count=count+strlen(out_string);
  866.                                 (orig_printf)("%s",out_string);
  867.                                 i=i+1;                        //
  868.                         }
  869.                         else if (vformat[i]=='c')
  870.                         {
  871.                                 out_char=va_arg(varg, int);
  872.                                 count++;
  873.                                 (orig_printf)("%c",out_char);
  874.                                 i=i+1;                        //
  875.                         }
  876.                         else if (vformat[i]=='x')
  877.                         {
  878.                                 out_hex_int=va_arg(varg, int);
  879.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  880.                                 count=count+strlen(int_to_string);
  881.                                 (orig_printf)("%x",out_hex_int);
  882.                                 i=i+1;                        //
  883.                         }
  884.                         else if (vformat[i]=='X')
  885.                         {
  886.                                 out_hex_int=va_arg(varg, int);
  887.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  888.                                 count=count+strlen(int_to_string);
  889.                                 (orig_printf)("%X",out_hex_int);
  890.                                 i=i+1;       
  891.                         }
  892.                         else if (vformat[i]=='f')
  893.                         {
  894.                                 out_f=va_arg(varg,double);
  895.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  896.                                 count=count+strlen(int_to_string);
  897.                                 (orig_printf)("%f",out_f);
  898.                                 i=i+1;                        //
  899.                         }
  900.                         else if (vformat[i]=='u')
  901.                         {
  902.                                 out_unsigned_int=va_arg(varg, int);
  903.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  904.                                 count=count+strlen(int_to_string);
  905.                                 (orig_printf)("%u",out_unsigned_int);
  906.                                 i=i+1;                        //
  907.                         }
  908.                         //new
  909.                         else if (vformat[i]=='h')
  910.                         {
  911.                                 if (vformat[i+1]=='n')
  912.                                 {
  913.                                         out_n=(int *)va_arg(varg,int*);
  914.                                         //*out_n=count;
  915.                                         i=i+2;
  916.                                 }
  917.                                 else
  918.                                 {
  919.                                         count++;
  920.                                         (orig_printf)("%c",vformat[i]);
  921.                                         i=i+1;
  922.                                 }
  923.                         }
  924.                         else if (vformat[i]=='e')
  925.                         {
  926.                                 out_e=va_arg(varg,double);
  927.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  928.                                 count=count+strlen(int_to_string);
  929.                                 (orig_printf)("%e",out_e);
  930.                                 i=i+1;       
  931.                         }
  932.                         else if (vformat[i]=='o')
  933.                         {
  934.                                 out_o=va_arg(varg, unsigned int);
  935.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  936.                                 count=count+strlen(int_to_string);
  937.                                 (orig_printf)("%o",out_o);
  938.                                 i=i+1;       
  939.                         }
  940.                         else if (vformat[i]=='p')
  941.                         {
  942.                                 out_p=va_arg(varg, unsigned int);
  943.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  944.                                 count=count+strlen(int_to_string);
  945.                                 (orig_printf)("%p",out_p);
  946.                                 i=i+1;
  947.                         }
  948.                         else if (vformat[i]=='a')
  949.                         {
  950.                                 out_a=va_arg(varg,double);
  951.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  952.                                 count=count+strlen(int_to_string);
  953.                                 (orig_printf)("%a",out_a);
  954.                                 i=i+1;               
  955.                         }
  956.                         //new
  957.                         else if (vformat[i]=='n')
  958.                         {
  959.                                 out_n=(int *)va_arg(varg,int*);
  960.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  961.                                 i=i+1;
  962.                         }
  963.                         else if (vformat[i]=='%')
  964.                         {
  965.                                 count++;
  966.                                 (orig_printf)("%c",vformat[i]);
  967.                                 i=i+1;
  968.                         }
  969.                         else
  970.                         {
  971.                                 count++;
  972.                                 i++;
  973.                         }
  974.                 }
  975.                 else
  976.                 {
  977.                         count++;
  978.                         (orig_printf)("%c",vformat[i]);
  979.                         i++;
  980.                 }
  981.         }
  982.         return 0;
  983. }
  984. int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...)
  985. {
  986.         int i=0;
  987.         int out_int;
  988.         int *out_n;
  989.         unsigned int out_hex_int;
  990.         unsigned int out_unsigned_int;
  991.         char out_char=NULL;
  992.         char *out_string=NULL;
  993.         char int_to_string[20];
  994.         double out_f;
  995.         double out_e;
  996.         //
  997.         double out_a;
  998.         unsigned int out_o;
  999.         unsigned int out_p;
  1000.         int k=0;
  1001.         //int circle=0;
  1002.         //int number;
  1003.         char number_array[6];
  1004.         //int loop;
  1005.         //
  1006.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  1007.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  1008.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  1009.         int count=0;
  1010.         for (i=0;vfformat[i]!='\0';)
  1011.         {
  1012.                 if (vfformat[i]=='%')
  1013.                 {
  1014.                         //
  1015.                         i=i+1;
  1016.                         while (vfformat[i]=='0'||vfformat[i]=='1'||vfformat[i]=='2'||vfformat[i]=='3'||vfformat[i]=='4'||vfformat[i]=='5'||vfformat[i]=='6'||vfformat[i]=='7'||vfformat[i]=='8'||vfformat[i]=='9'||vfformat[i]=='$'||vfformat[i]=='*'||vfformat[i]=='.')
  1017.                         //while (!isalpha(vfformat[i]))
  1018.                         {       
  1019.                                 if (vfformat[i]=='%')
  1020.                                 {
  1021.                                         break;
  1022.                                 }
  1023.                                 else
  1024.                                 {
  1025.                                         number_array[k++]=vfformat[i];
  1026.                                         i=i+1;
  1027.                                 }
  1028.                         }
  1029.                         //number=findNumber(number_array);
  1030.                         //
  1031.                         if (vfformat[i]=='d')
  1032.                         {
  1033.                                 out_int=va_arg(vfarg, int);
  1034.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  1035.                                 count=count+strlen(int_to_string);
  1036.                                 (orig_fprintf)(file,"%d",out_int);
  1037.                                 i=i+1;                        //
  1038.                         }
  1039.                         else if (vfformat[i]=='i')
  1040.                         {
  1041.                                 out_int=va_arg(vfarg, int);
  1042.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  1043.                                 count=count+strlen(int_to_string);
  1044.                                 (orig_fprintf)(file,"%i",out_int);
  1045.                                 i=i+1;                        //       
  1046.                         }
  1047.                         else if (vfformat[i]=='s')
  1048.                         {
  1049.                                 out_string=va_arg(vfarg, char*);
  1050.                                 count=count+strlen(out_string);
  1051.                                 (orig_fprintf)(file,"%s",out_string);
  1052.                                 i=i+1;                        //
  1053.                         }
  1054.                         else if (vfformat[i]=='c')
  1055.                         {
  1056.                                 out_char=va_arg(vfarg, int);
  1057.                                 count++;
  1058.                                 (orig_fprintf)(file,"%c",out_char);
  1059.                                 i=i+1;                        //
  1060.                         }
  1061.                         else if (vfformat[i]=='x')
  1062.                         {
  1063.                                 out_hex_int=va_arg(vfarg, int);
  1064.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  1065.                                 count=count+strlen(int_to_string);
  1066.                                 (orig_fprintf)(file,"%x",out_hex_int);
  1067.                                 i=i+1;                        //
  1068.                         }
  1069.                         else if (vfformat[i]=='X')
  1070.                         {
  1071.                                 out_hex_int=va_arg(vfarg, int);
  1072.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  1073.                                 count=count+strlen(int_to_string);
  1074.                                 (orig_fprintf)(file,"%X",out_hex_int);
  1075.                                 i=i+1;       
  1076.                         }
  1077.                         else if (vfformat[i]=='f')
  1078.                         {
  1079.                                 out_f=va_arg(vfarg,double);
  1080.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  1081.                                 count=count+strlen(int_to_string);
  1082.                                 (orig_fprintf)(file,"%f",out_f);
  1083.                                 i=i+1;                        //
  1084.                         }
  1085.                         else if (vfformat[i]=='u')
  1086.                         {
  1087.                                 out_unsigned_int=va_arg(vfarg, int);
  1088.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  1089.                                 count=count+strlen(int_to_string);
  1090.                                 (orig_fprintf)(file,"%u",out_unsigned_int);
  1091.                                 i=i+1;                        //
  1092.                         }
  1093.                         //new
  1094.                         else if (vfformat[i]=='h')
  1095.                         {
  1096.                                 if (vfformat[i+1]=='n')
  1097.                                 {
  1098.                                         out_n=(int *)va_arg(vfarg,int*);
  1099.                                         //*out_n=count;
  1100.                                         i=i+2;
  1101.                                 }
  1102.                                 else
  1103.                                 {
  1104.                                         count++;
  1105.                                         (orig_printf)("%c",vfformat[i]);
  1106.                                         i=i+1;
  1107.                                 }
  1108.                         }
  1109.                         else if (vfformat[i]=='e')
  1110.                         {
  1111.                                 out_e=va_arg(vfarg,double);
  1112.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  1113.                                 count=count+strlen(int_to_string);
  1114.                                 (orig_printf)("%e",out_e);
  1115.                                 i=i+1;       
  1116.                         }
  1117.                         else if (vfformat[i]=='o')
  1118.                         {
  1119.                                 out_o=va_arg(vfarg, unsigned int);
  1120.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  1121.                                 count=count+strlen(int_to_string);
  1122.                                 (orig_printf)("%o",out_o);
  1123.                                 i=i+1;       
  1124.                         }
  1125.                         else if (vfformat[i]=='p')
  1126.                         {
  1127.                                 out_p=va_arg(vfarg, unsigned int);
  1128.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  1129.                                 count=count+strlen(int_to_string);
  1130.                                 (orig_printf)("%p",out_p);
  1131.                                 i=i+1;
  1132.                         }
  1133.                         else if (vfformat[i]=='a')
  1134.                         {
  1135.                                 out_a=va_arg(vfarg,double);
  1136.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  1137.                                 count=count+strlen(int_to_string);
  1138.                                 (orig_printf)("%a",out_a);
  1139.                                 i=i+1;               
  1140.                         }
  1141.                         //new
  1142.                         else if (vfformat[i]=='n')
  1143.                         {
  1144.                                 out_n=(int *)va_arg(vfarg,int*);
  1145.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  1146.                                 i=i+1;
  1147.                         }
  1148.                         else if (vfformat[i]=='%')
  1149.                         {
  1150.                                 count++;
  1151.                                 (orig_fprintf)(file,"%c",vfformat[i]);
  1152.                                 i=i+1;
  1153.                         }
  1154.                         else
  1155.                         {
  1156.                                 count++;
  1157.                                 i++;
  1158.                         }
  1159.                 }
  1160.                 else
  1161.                 {
  1162.                         count++;
  1163.                         (orig_fprintf)(file,"%c",vfformat[i]);
  1164.                         i++;
  1165.                 }
  1166.         }
  1167.         return 0;
  1168. }
  1169. int vsprintf(char *str, const char * format, va_list arg)
  1170. {
  1171.         new_vsprintf(str,format,arg);
  1172.         return 0;
  1173. }
  1174. int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...)
  1175. {
  1176.         int i=0;
  1177.         int out_int;
  1178.         int *out_n;
  1179.         int len;
  1180.         unsigned int out_hex_int;
  1181.         unsigned int out_unsigned_int;
  1182.         char out_char=NULL;
  1183.         char *out_string=NULL;
  1184.         char int_to_string[20];
  1185.         char final_string[65535];
  1186.         double out_f;
  1187.         double out_e;
  1188.         //
  1189.         double out_a;
  1190.         unsigned int out_o;
  1191.         unsigned int out_p;
  1192.         int k=0;
  1193.         //int circle=0;
  1194.         //int number;
  1195.         char number_array[6];
  1196.         //int loop;
  1197.         //
  1198.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  1199.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  1200.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  1201.         int count=0;
  1202.         for (i=0;vsformat[i]!='\0';)
  1203.         {
  1204.                 if (vsformat[i]=='%')
  1205.                 {
  1206.                         //
  1207.                         i=i+1;
  1208.                         while (vsformat[i]=='0'||vsformat[i]=='1'||vsformat[i]=='2'||vsformat[i]=='3'||vsformat[i]=='4'||vsformat[i]=='5'||vsformat[i]=='6'||vsformat[i]=='7'||vsformat[i]=='8'||vsformat[i]=='9'||vsformat[i]=='$'||vsformat[i]=='*'||vsformat[i]=='.')
  1209.                         //while (!isalpha(vsformat[i]))
  1210.                         {       
  1211.                                 if (vsformat[i]=='%')
  1212.                                 {
  1213.                                         break;
  1214.                                 }
  1215.                                 else
  1216.                                 {
  1217.                                         number_array[k++]=vsformat[i];
  1218.                                         i=i+1;                               
  1219.                                 }
  1220.                         }
  1221.                         //number=findNumber(number_array);
  1222.                         //
  1223.                         if (vsformat[i]=='d')
  1224.                         {
  1225.                                 out_int=va_arg(vsarg, int);
  1226.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  1227.                                 count=count+strlen(int_to_string);
  1228.                                 strcat(final_string,int_to_string);
  1229.                                 i=i+1;                        //
  1230.                         }
  1231.                         else if (vsformat[i]=='i')
  1232.                         {
  1233.                                 out_int=va_arg(vsarg, int);
  1234.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  1235.                                 count=count+strlen(int_to_string);
  1236.                                 strcat(final_string,int_to_string);
  1237.                                 i=i+1;                        //
  1238.                         }
  1239.                         else if (vsformat[i]=='s')
  1240.                         {
  1241.                                 out_string=va_arg(vsarg, char*);
  1242.                                 count=count+strlen(out_string);
  1243.                                 strcat(final_string,out_string);
  1244.                                 i=i+1;                        //
  1245.                         }
  1246.                         else if (vsformat[i]=='c')
  1247.                         {
  1248.                                 out_char=va_arg(vsarg, int);
  1249.                                 count++;
  1250.                                 len=strlen(final_string);
  1251.                                 final_string[len]=out_char;
  1252.                                 i=i+1;                        //
  1253.                         }
  1254.                         else if (vsformat[i]=='x')
  1255.                         {
  1256.                                 out_hex_int=va_arg(vsarg, int);
  1257.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  1258.                                 count=count+strlen(int_to_string);
  1259.                                 strcat(final_string,int_to_string);
  1260.                                 i=i+1;                        //
  1261.                         }
  1262.                         else if (vsformat[i]=='X')
  1263.                         {
  1264.                                 out_hex_int=va_arg(vsarg, int);
  1265.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  1266.                                 count=count+strlen(int_to_string);
  1267.                                 strcat(final_string,int_to_string);
  1268.                                 i=i+1;
  1269.                         }
  1270.                         else if (vsformat[i]=='f')
  1271.                         {
  1272.                                 out_f=va_arg(vsarg,double);
  1273.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  1274.                                 count=count+strlen(int_to_string);
  1275.                                 strcat(final_string,int_to_string);
  1276.                                 i=i+1;                        //
  1277.                         }
  1278.                         else if (vsformat[i]=='u')
  1279.                         {
  1280.                                 out_unsigned_int=va_arg(vsarg, int);
  1281.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  1282.                                 count=count+strlen(int_to_string);
  1283.                                 strcat(final_string,int_to_string);
  1284.                                 i=i+1;                        //
  1285.                         }
  1286.                         //new
  1287.                         else if (vsformat[i]=='h')
  1288.                         {
  1289.                                 if (vsformat[i+1]=='n')
  1290.                                 {
  1291.                                         out_n=(int *)va_arg(vsarg,int*);
  1292.                                         //*out_n=count;
  1293.                                         i=i+2;
  1294.                                 }
  1295.                                 else
  1296.                                 {
  1297.                                         count++;
  1298.                                         (orig_printf)("%c",vsformat[i]);
  1299.                                         i=i+1;
  1300.                                 }
  1301.                         }
  1302.                         else if (vsformat[i]=='e')
  1303.                         {
  1304.                                 out_e=va_arg(vsarg,double);
  1305.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  1306.                                 count=count+strlen(int_to_string);
  1307.                                 (orig_printf)("%e",out_e);
  1308.                                 i=i+1;       
  1309.                         }
  1310.                         else if (vsformat[i]=='o')
  1311.                         {
  1312.                                 out_o=va_arg(vsarg, unsigned int);
  1313.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  1314.                                 count=count+strlen(int_to_string);
  1315.                                 (orig_printf)("%o",out_o);
  1316.                                 i=i+1;       
  1317.                         }
  1318.                         else if (vsformat[i]=='p')
  1319.                         {
  1320.                                 out_p=va_arg(vsarg, unsigned int);
  1321.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  1322.                                 count=count+strlen(int_to_string);
  1323.                                 (orig_printf)("%p",out_p);
  1324.                                 i=i+1;
  1325.                         }
  1326.                         else if (vsformat[i]=='a')
  1327.                         {
  1328.                                 out_a=va_arg(vsarg,double);
  1329.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  1330.                                 count=count+strlen(int_to_string);
  1331.                                 (orig_printf)("%a",out_a);
  1332.                                 i=i+1;               
  1333.                         }
  1334.                         //new
  1335.                         else if (vsformat[i]=='n')
  1336.                         {
  1337.                                 out_n=(int *)va_arg(vsarg,int*);
  1338.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  1339.                                 i=i+1;
  1340.                         }
  1341.                         else if (vsformat[i]=='%')
  1342.                         {
  1343.                                 count++;
  1344.                                 len=strlen(final_string);
  1345.                                 final_string[len]=vsformat[i];
  1346.                                 i=i+1;
  1347.                         }
  1348.                         else
  1349.                         {
  1350.                                 count++;
  1351.                                 i++;
  1352.                         }
  1353.                 }
  1354.                 else
  1355.                 {
  1356.                         count++;
  1357.                         len=strlen(final_string);
  1358.                         final_string[len]=vsformat[i];
  1359.                         i++;
  1360.                 }
  1361.         }
  1362.         (orig_sprintf)(str,"%s",final_string);
  1363.         return 0;
  1364. }
  1365. int vsnprintf(char *snstr, size_t size, const char *snformat, va_list arg)
  1366. {
  1367.         new_vsnprintf(snstr, size, snformat, arg);
  1368.         return 0;
  1369. }
  1370. int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...)
  1371. {
  1372.         int i=0;
  1373.         int out_int;
  1374.         int *out_n;
  1375.         int len;
  1376.         unsigned int out_hex_int;
  1377.         unsigned int out_unsigned_int;
  1378.         char out_char=NULL;
  1379.         char *out_string=NULL;
  1380.         char int_to_string[20];
  1381.         char final_string[65535];
  1382.         double out_f;
  1383.         double out_e;
  1384.         //
  1385.         double out_a;
  1386.         unsigned int out_o;
  1387.         unsigned int out_p;
  1388.         int k=0;
  1389.         //int circle=0;
  1390.         //int number;
  1391.         char number_array[6];
  1392.         //int loop;
  1393.         //
  1394.         orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
  1395.         orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
  1396.         orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
  1397.         orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
  1398.         int count=0;
  1399.         for (i=0;vsnformat[i]!='\0';)
  1400.         {
  1401.                 if (vsnformat[i]=='%')
  1402.                 {
  1403.                         //
  1404.                         i=i+1;
  1405.                         while (vsnformat[i]=='0'||vsnformat[i]=='1'||vsnformat[i]=='2'||vsnformat[i]=='3'||vsnformat[i]=='4'||vsnformat[i]=='5'||vsnformat[i]=='6'||vsnformat[i]=='7'||vsnformat[i]=='8'||vsnformat[i]=='9'||vsnformat[i]=='$'||vsnformat[i]=='*'||vsnformat[i]=='.')
  1406.                         //while (!isalpha(vsnformat[i]))
  1407.                         {       
  1408.                                 if (vsnformat[i]=='%')
  1409.                                 {
  1410.                                         break;
  1411.                                 }
  1412.                                 else
  1413.                                 {
  1414.                                         number_array[k++]=vsnformat[i];
  1415.                                         i=i+1;                                       
  1416.                                 }
  1417.                         }
  1418.                         //number=findNumber(number_array);
  1419.                         //
  1420.                         if (vsnformat[i]=='d')
  1421.                         {
  1422.                                 out_int=va_arg(vsnfarg, int);
  1423.                                 (orig_sprintf)(int_to_string,"%d",out_int);
  1424.                                 count=count+strlen(int_to_string);
  1425.                                 strcat(final_string,int_to_string);
  1426.                                 i=i+1;                        //
  1427.                         }
  1428.                         else if (vsnformat[i]=='i')
  1429.                         {
  1430.                                 out_int=va_arg(vsnfarg, int);
  1431.                                 (orig_sprintf)(int_to_string,"%i",out_int);
  1432.                                 count=count+strlen(int_to_string);
  1433.                                 strcat(final_string,int_to_string);
  1434.                                 i=i+1;                        //
  1435.                         }
  1436.                         else if (vsnformat[i]=='s')
  1437.                         {
  1438.                                 out_string=va_arg(vsnfarg, char*);
  1439.                                 count=count+strlen(out_string);
  1440.                                 strcat(final_string,int_to_string);
  1441.                                 i=i+1;                        //
  1442.                         }
  1443.                         else if (vsnformat[i]=='c')
  1444.                         {
  1445.                                 out_char=va_arg(vsnfarg, int);
  1446.                                 count++;
  1447.                                 len=strlen(final_string);
  1448.                                 final_string[len]=out_char;
  1449.                                 i=i+1;                        //
  1450.                         }
  1451.                         else if (vsnformat[i]=='x')
  1452.                         {
  1453.                                 out_hex_int=va_arg(vsnfarg, int);
  1454.                                 (orig_sprintf)(int_to_string,"%x",out_hex_int);
  1455.                                 count=count+strlen(int_to_string);
  1456.                                 strcat(final_string,int_to_string);
  1457.                                 i=i+1;                        //
  1458.                         }
  1459.                         else if (vsnformat[i]=='X')
  1460.                         {
  1461.                                 out_hex_int=va_arg(vsnfarg, int);
  1462.                                 (orig_sprintf)(int_to_string,"%X",out_hex_int);
  1463.                                 count=count+strlen(int_to_string);
  1464.                                 strcat(final_string,int_to_string);
  1465.                                 i=i+1;                        //
  1466.                         }
  1467.                         else if (vsnformat[i]=='f')
  1468.                         {
  1469.                                 out_f=va_arg(vsnfarg,double);
  1470.                                 (orig_sprintf)(int_to_string,"%f",out_f);
  1471.                                 count=count+strlen(int_to_string);
  1472.                                 strcat(final_string,int_to_string);
  1473.                                 i=i+1;                        //
  1474.                         }
  1475.                         else if (vsnformat[i]=='u')
  1476.                         {
  1477.                                 out_unsigned_int=va_arg(vsnfarg, int);
  1478.                                 (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
  1479.                                 count=count+strlen(int_to_string);
  1480.                                 strcat(final_string,int_to_string);
  1481.                                 i=i+1;                        //
  1482.                         }
  1483.                         //new
  1484.                         else if (vsnformat[i]=='h')
  1485.                         {
  1486.                                 if (vsnformat[i+1]=='n')
  1487.                                 {
  1488.                                         out_n=(int *)va_arg(vsnfarg,int*);
  1489.                                         //*out_n=count;
  1490.                                         i=i+2;
  1491.                                 }
  1492.                                 else
  1493.                                 {
  1494.                                         count++;
  1495.                                         (orig_printf)("%c",vsnformat[i]);
  1496.                                         i=i+1;
  1497.                                 }
  1498.                         }
  1499.                         else if (vsnformat[i]=='e')
  1500.                         {
  1501.                                 out_e=va_arg(vsnfarg,double);
  1502.                                 (orig_sprintf)(int_to_string,"%e",out_e);
  1503.                                 count=count+strlen(int_to_string);
  1504.                                 (orig_printf)("%e",out_e);
  1505.                                 i=i+1;       
  1506.                         }
  1507.                         else if (vsnformat[i]=='o')
  1508.                         {
  1509.                                 out_o=va_arg(vsnfarg, unsigned int);
  1510.                                 (orig_sprintf)(int_to_string,"%o",out_o);
  1511.                                 count=count+strlen(int_to_string);
  1512.                                 (orig_printf)("%o",out_o);
  1513.                                 i=i+1;       
  1514.                         }
  1515.                         else if (vsnformat[i]=='p')
  1516.                         {
  1517.                                 out_p=va_arg(vsnfarg, unsigned int);
  1518.                                 (orig_sprintf)(int_to_string,"%p",out_p);
  1519.                                 count=count+strlen(int_to_string);
  1520.                                 (orig_printf)("%p",out_p);
  1521.                                 i=i+1;
  1522.                         }
  1523.                         else if (vsnformat[i]=='a')
  1524.                         {
  1525.                                 out_a=va_arg(vsnfarg,double);
  1526.                                 (orig_sprintf)(int_to_string,"%a",out_a);
  1527.                                 count=count+strlen(int_to_string);
  1528.                                 (orig_printf)("%a",out_a);
  1529.                                 i=i+1;               
  1530.                         }
  1531.                         //new
  1532.                         else if (vsnformat[i]=='n')
  1533.                         {
  1534.                                 out_n=(int *)va_arg(vsnfarg,int*);
  1535.                                 //*out_n=count;                                        //uncomment this for test1 and test2
  1536.                                 i=i+1;
  1537.                         }
  1538.                         else if (vsnformat[i]=='%')
  1539.                         {
  1540.                                 count++;
  1541.                                 len=strlen(final_string);
  1542.                                 final_string[len]=vsnformat[i];
  1543.                                 i=i+1;
  1544.                         }
  1545.                         else
  1546.                         {
  1547.                                 count++;
  1548.                                 i++;
  1549.                         }
  1550.                 }
  1551.                 else
  1552.                 {
  1553.                         count++;
  1554.                         len=strlen(final_string);
  1555.                         final_string[len]=vsnformat[i];
  1556.                         i++;
  1557.                 }
  1558.         }
  1559.         (orig_snprintf)(snstr,size,"%s",final_string);
  1560.         //(orig_snprintf)(snstr,size,final_string);
  1561.         return 0;
  1562. }
  1563. int findNumber(char *num_array)
  1564. {
  1565.         //int length=strlen(num_array);
  1566.         int number;
  1567.         sscanf(num_array,"%d",&number);
  1568.         return number;
  1569. }
复制代码
回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:34 , Processed in 0.162825 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表