1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - tools - makelcf
3 File: misc.c
4
5 Copyright 2003-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: 2008-09-18#$
14 $Rev: 8573 $
15 $Author: okubata_ryoma $
16 *---------------------------------------------------------------------------*/
17 #include <stdio.h>
18 #include <malloc.h> // calloc()
19 #include <stdlib.h> // free(), exit()
20 #include <string.h> // strlen(), strcpy()
21 #include <stdarg.h> // va_start(),va_end()
22 #include "misc.h"
23
24 BOOL DebugMode = FALSE;
25
26 /*---------------------------------------------------------------------------*
27 * Memory Allocation Utilities
28 *
29 * void* Alloc( size_t size )
30 *---------------------------------------------------------------------------*/
31
Alloc(size_t size)32 void *Alloc(size_t size)
33 {
34 void *t = calloc(1, size);
35
36 if (t == NULL)
37 {
38 error("Can't allocate memory.");
39 exit(10);
40 }
41 return t;
42 }
43
44
Free(void * p)45 void Free(void *p)
46 {
47 void **ptr = (void **)p;
48
49 if (*ptr)
50 {
51 free(*ptr);
52 (*ptr) = NULL;
53 }
54 }
55
56
57 /*---------------------------------------------------------------------------*
58 * VBuffer
59 *
60 * void PutVBuffer( VBuffer* vbuf, char c )
61 *---------------------------------------------------------------------------*/
62
PutVBuffer(VBuffer * vbuf,char c)63 void PutVBuffer(VBuffer * vbuf, char c)
64 {
65 int size;
66 char *tmp_buffer;
67
68 if (vbuf->buffer == 0)
69 {
70 vbuf->size = VBUFFER_INITIAL_SIZE;
71 vbuf->buffer = Alloc(vbuf->size); // buffer is CALLOCed
72 }
73 size = strlen(vbuf->buffer);
74
75 if (size >= vbuf->size - 1)
76 {
77 // Need buffer expansion
78 vbuf->size *= 2;
79 tmp_buffer = Alloc(vbuf->size); // buffer is CALLOCed
80 strcpy(tmp_buffer, vbuf->buffer);
81 Free(&vbuf->buffer);
82 vbuf->buffer = tmp_buffer;
83 }
84 vbuf->buffer[size] = c;
85 return;
86 }
87
GetVBuffer(VBuffer * vbuf)88 char *GetVBuffer(VBuffer * vbuf)
89 {
90 return vbuf->buffer;
91 }
92
InitVBuffer(VBuffer * vbuf)93 void InitVBuffer(VBuffer * vbuf)
94 {
95 vbuf->buffer = 0;
96 vbuf->size = 0;
97 }
98
FreeVBuffer(VBuffer * vbuf)99 void FreeVBuffer(VBuffer * vbuf)
100 {
101 Free(&vbuf->buffer);
102 }
103
104 /*---------------------------------------------------------------------------*
105 * Debug print
106 * void debug_printf( char* fmt, ... )
107 *---------------------------------------------------------------------------*/
108
debug_printf(const char * fmt,...)109 void debug_printf(const char *fmt, ...)
110 {
111 va_list va;
112
113 if (DebugMode)
114 {
115 va_start(va, fmt);
116 vfprintf(stderr, fmt, va);
117 va_end(va);
118 }
119 }
120