Remove memory leaks
[scilab.git] / scilab / modules / output_stream / src / c / set_xxprintf.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2007 - INRIA - Allan CORNET
4 * Copyright (C) 2009 - DIGITEO - Allan CORNET
5
6 * This file must be used under the terms of the CeCILL.
7 * This source file is licensed as described in the file COPYING, which
8 * you should have received as part of this distribution.  The terms
9 * are also available at    
10 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11 *
12 */
13 /*--------------------------------------------------------------------------*/
14 #include <stdio.h>
15 #include <string.h>
16 #include "set_xxprintf.h"
17 #include "sciprint.h"
18 #include "scilabmode.h"
19 /*--------------------------------------------------------------------------*/
20 /* local function used to flush with sprintf */
21 static int voidflush(FILE *fp);
22 /* local function used to call scivprint */
23 static int local_sciprint (int iv, char *fmt,...);
24 /*--------------------------------------------------------------------------*/
25 extern char sprintf_buffer[MAX_SPRINTF_SIZE];
26 /*--------------------------------------------------------------------------*/
27 void set_xxprintf(FILE *fp,XXPRINTF *xxprintf,FLUSH *flush,char **target)
28 {
29     /* Force Windows display to have two-digit exponent. */
30 #ifdef _MSC_VER
31     _set_output_format(_TWO_DIGIT_EXPONENT); 
32 #endif
33     /* re-initialize value of sprintf_buffer */
34     strcpy(sprintf_buffer, "");
35     if (fp == (FILE *) 0)
36     {
37         /* sprintf */
38         *target = sprintf_buffer;
39         *flush = voidflush;
40         *xxprintf = (XXPRINTF) sprintf;
41     }
42     else if ( fp == stdout )
43     {
44         /* sciprint2 */
45         *target =  (char *) 0;
46         *flush = fflush;
47         *xxprintf = (XXPRINTF) local_sciprint;
48     }
49     else
50     {
51         /* fprintf */
52         *target = (char *) fp;
53         *flush = fflush;
54         *xxprintf = (XXPRINTF) fprintf;
55     }
56 }
57 /*--------------------------------------------------------------------------*/
58 static int voidflush(FILE *fp)
59 {
60     return 0;
61 }
62 /*--------------------------------------------------------------------------*/
63 static int local_sciprint (int iv, char *fmt,...)
64 {
65     int count = 0;
66     va_list ap;
67
68     va_start(ap,fmt);
69     count = scivprint(fmt, ap);
70     va_end (ap);
71
72     return count;
73 }
74 /*--------------------------------------------------------------------------*/