1 /*---------------------------------------------------------------------------*
2 Project: NitroSDK - 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 $Log: misc.c,v $
14 Revision 1.5 2006/01/18 02:11:19 kitase_hirotake
15 do-indent
16
17 Revision 1.4 2005/02/28 05:26:03 yosizaki
18 do-indent.
19
20 Revision 1.3 2004/06/30 09:27:21 yasu
21 fix calling method for Free()
22
23 Revision 1.2 2004/06/29 04:08:33 yasu
24 add VBuffer
25
26 Revision 1.1 2004/03/26 05:07:33 yasu
27 support variables like as -DNAME=VALUE
28
29 $NoKeywords: $
30 *---------------------------------------------------------------------------*/
31 #include <stdio.h>
32 #include <malloc.h> // calloc()
33 #include <stdlib.h> // free(), exit()
34 #include <string.h> // strlen(), strcpy()
35 #include <stdarg.h> // va_start(),va_end()
36 #include "misc.h"
37
38 BOOL DebugMode = FALSE;
39
40 /*---------------------------------------------------------------------------*
41 * Memory Allocation Utilities
42 *
43 * void* Alloc( size_t size )
44 *---------------------------------------------------------------------------*/
45
Alloc(size_t size)46 void *Alloc(size_t size)
47 {
48 void *t = calloc(1, size);
49
50 if (t == NULL)
51 {
52 error("Can't allocate memory.");
53 exit(10);
54 }
55 return t;
56 }
57
58
Free(void * p)59 void Free(void *p)
60 {
61 void **ptr = (void **)p;
62
63 if (*ptr)
64 {
65 free(*ptr);
66 (*ptr) = NULL;
67 }
68 }
69
70
71 /*---------------------------------------------------------------------------*
72 * VBuffer
73 *
74 * void PutVBuffer( VBuffer* vbuf, char c )
75 *---------------------------------------------------------------------------*/
76
PutVBuffer(VBuffer * vbuf,char c)77 void PutVBuffer(VBuffer * vbuf, char c)
78 {
79 int size;
80 char *tmp_buffer;
81
82 if (vbuf->buffer == 0)
83 {
84 vbuf->size = VBUFFER_INITIAL_SIZE;
85 vbuf->buffer = Alloc(vbuf->size); // buffer is CALLOCed
86 }
87 size = strlen(vbuf->buffer);
88
89 if (size >= vbuf->size - 1)
90 {
91 // Need buffer expansion
92 vbuf->size *= 2;
93 tmp_buffer = Alloc(vbuf->size); // buffer is CALLOCed
94 strcpy(tmp_buffer, vbuf->buffer);
95 Free(&vbuf->buffer);
96 vbuf->buffer = tmp_buffer;
97 }
98 vbuf->buffer[size] = c;
99 return;
100 }
101
GetVBuffer(VBuffer * vbuf)102 char *GetVBuffer(VBuffer * vbuf)
103 {
104 return vbuf->buffer;
105 }
106
InitVBuffer(VBuffer * vbuf)107 void InitVBuffer(VBuffer * vbuf)
108 {
109 vbuf->buffer = 0;
110 vbuf->size = 0;
111 }
112
FreeVBuffer(VBuffer * vbuf)113 void FreeVBuffer(VBuffer * vbuf)
114 {
115 Free(&vbuf->buffer);
116 }
117
118 /*---------------------------------------------------------------------------*
119 * Debug print
120 * void debug_printf( char* fmt, ... )
121 *---------------------------------------------------------------------------*/
122
debug_printf(const char * fmt,...)123 void debug_printf(const char *fmt, ...)
124 {
125 va_list va;
126
127 if (DebugMode)
128 {
129 va_start(va, fmt);
130 vfprintf(stderr, fmt, va);
131 va_end(va);
132 }
133 }
134