trunk/src/lib/util/chd.c
| r17720 | r17721 | |
| 1079 | 1079 | throw CHDERR_METADATA_NOT_FOUND; |
| 1080 | 1080 | |
| 1081 | 1081 | // read the metadata |
| 1082 | | file_read(metaentry.offset + METADATA_HEADER_SIZE, output.stringbuffer(metaentry.length), metaentry.length); |
| 1082 | // TODO: how to properly allocate a dynamic char buffer? |
| 1083 | char* metabuf = new char[metaentry.length+1]; |
| 1084 | memset(metabuf, 0x00, metaentry.length+1); |
| 1085 | file_read(metaentry.offset + METADATA_HEADER_SIZE, metabuf, metaentry.length); |
| 1086 | output.cpy(metabuf); |
| 1087 | delete[] metabuf; |
| 1083 | 1088 | return CHDERR_NONE; |
| 1084 | 1089 | } |
| 1085 | 1090 | |
trunk/src/lib/util/astring.h
| r17720 | r17721 | |
| 104 | 104 | // C string conversion operators and helpers |
| 105 | 105 | operator const char *() const { return m_text; } |
| 106 | 106 | const char *cstr() const { return m_text; } |
| 107 | | char *stringbuffer(int size) { ensure_room(size); return m_text; } |
| 108 | 107 | |
| 109 | 108 | // buffer management |
| 110 | 109 | astring &reset() { return cpy(""); } |
| 111 | 110 | astring &expand(int length) { ensure_room(length); return *this; } |
| 112 | 111 | |
| 113 | 112 | // length query |
| 114 | | int len() const { return strlen(m_text); } |
| 113 | int len() const { return m_len; } |
| 115 | 114 | |
| 116 | 115 | // copy helpers |
| 117 | 116 | astring &cpy(const char *src, int count); |