Develop and Download Open Source Software

Browse CVS Repository

Contents of /enbanfukusyaya/EnbanFukusyaYa/DriveAccess/ebstring.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Fri Nov 5 17:24:03 2010 UTC (13 years, 5 months ago) by bananajinn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +200 -200 lines
File MIME type: text/x-csrc
*** empty log message ***

1 /**
2 * @file ebstring.c
3 * @brief 文字列操作
4 * @author BananaJinn
5 * @version $Id: ebstring.c,v 1.3 2010/11/02 15:23:51 bananajinn Exp $
6 * 円盤複写屋 - EnbanFukusyaYa
7 * Copyright (C) 2005-2006 Kagetani Hideto
8 */
9
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13 #include <stdarg.h>
14 #include "ebstring.h"
15
16 /**
17 * @brief 文字列を複製する
18 * @param[in] string 文字列
19 * @return 複製した文字列を返す。
20 */
21 char *EbStringNew(const char *string)
22 {
23 return strdup(string);
24 }
25
26 /**
27 * @brief 書式付きで文字列を作成する
28 * @param[in] format 書式
29 * @param[in] ... 書式に対するパラメータ
30 * @return 作成した文字列を返す。
31 */
32 char *EbStringNewWithFormat(const char *format, ...)
33 {
34 va_list args;
35 int bufsize=80;
36 char *ret_string=NULL, *new_ptr;
37 int ret;
38
39 while(1){
40 new_ptr = realloc(ret_string, bufsize);
41 if(new_ptr == NULL){
42 if(ret_string != NULL){
43 free(ret_string);
44 }
45 return NULL;
46 }
47 ret_string = new_ptr;
48 va_start(args, format);
49 #if defined(WIN32)
50 ret = _vsnprintf(ret_string, bufsize, format, args);
51 #else
52 ret = vsnprintf(ret_string, bufsize, format, args);
53 #endif
54 va_end(args);
55 if((ret > -1) && (ret < bufsize)){
56 break;
57 }
58 if(ret > -1){
59 bufsize = ret+1;
60 }
61 else{
62 bufsize *= 2;
63 }
64 }
65 return ret_string;
66 }
67
68 /**
69 * @brief 文字列を結合する
70 * @param[in] ebstring 結合される側の文字列
71 * @param[in] append_string 結合する文字列
72 * @return 結合された文字列を返す。
73 */
74 char *EbStringAppend(char *ebstring, const char *append_string)
75 {
76 char *ret;
77 int len;
78
79 if(ebstring == NULL){
80 return EbStringNew(append_string);
81 }
82 len = strlen(ebstring);
83 ret = (char *)realloc(ebstring, len+strlen(append_string)+1);
84 if(ret == NULL){
85 return ebstring;
86 }
87
88 strcpy(ret+len, append_string);
89 return ret;
90 }
91
92 /**
93 * @brief 書式付きで文字列を結合する
94 * @param[in] ebstring 結合される側の文字列
95 * @param[in] format 書式
96 * @param[in] ... 書式に対するパラメータ
97 * @return 結合された文字列を返す。
98 */
99 char *EbStringAppendWithFormat(char *ebstring, const char *format, ...)
100 {
101 va_list args;
102 int offset=0;
103 int bufsize=80;
104 char *ret_string=ebstring, *new_ptr;
105 int ret;
106
107 if(ebstring != NULL){
108 offset=strlen(ebstring);
109 bufsize=strlen(ebstring)+80;
110 }
111 while(1){
112 new_ptr = realloc(ret_string, bufsize);
113 if(new_ptr == NULL){
114 if(ret_string != NULL){
115 free(ret_string);
116 }
117 return NULL;
118 }
119 ret_string = new_ptr;
120 va_start(args, format);
121 #if defined(WIN32)
122 ret = _vsnprintf(ret_string+offset, bufsize-offset, format, args);
123 #else
124 ret = vsnprintf(ret_string+offset, bufsize-offset, format, args);
125 #endif
126 va_end(args);
127 if((ret > -1) && (ret < bufsize)){
128 break;
129 }
130 if(ret > -1){
131 bufsize = ret+1;
132 }
133 else{
134 bufsize *= 2;
135 }
136 }
137 return ret_string;
138 }
139
140 /**
141 * @brief パス区切りを付けて文字列を結合する
142 * @param[in] ebstring 結合される側の文字列
143 * @param[in] path 結合する文字列
144 * @return 結合された文字列を返す。
145 */
146 char *EbStringAppendPath(char *ebstring, const char *path)
147 {
148 int len;
149
150 if(ebstring == NULL){
151 return EbStringNew(path);
152 }
153 len = strlen(ebstring);
154 if(len > 0){
155 if(ebstring[len-1] == PATH_SEPARATOR){
156 ebstring[len-1] = '\0';
157 }
158 }
159 return EbStringAppendWithFormat(ebstring, "%c%s", PATH_SEPARATOR, path);
160 }
161
162 /**
163 * @brief 文字列のメモリを解放する
164 * @param[in] ebstring 解放する文字列
165 * @return NULLを返す。
166 */
167 char *EbStringFree(char *ebstring)
168 {
169 free(ebstring);
170 return NULL;
171 }
172
173 /**
174 * @brief 文字列の先頭から切り出す
175 * @param[in] string 切り出される文字列
176 * @param[in] len 切り出すバイト数
177 * @param[in] trim 末尾をトリミングする文字('\0'で省略)
178 * @return 切り出した文字列を返す。
179 */
180 char *EbStringGetString(const char *string, int len, char trim)
181 {
182 char *ret_string = (char *)malloc(len+1);
183 int i;
184
185 strncpy(ret_string, string, len);
186 ret_string[len] = '\0';
187
188 if(trim != '\0'){
189 for(i=len-1; i>=0; i--){
190 if(ret_string[i] != trim){
191 break;
192 }
193 ret_string[i] = '\0';
194 }
195 }
196
197 return ret_string;
198 }
199
200

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26