/rusxmms/librcc

To get this branch, use:
bzr branch http://suren.me/webbzr/rusxmms/librcc

« back to all changes in this revision

Viewing changes to src/rccstring.c

  • Committer: Suren A. Chilingaryan
  • Date: 2005-07-18 15:22:28 UTC
  • Revision ID: Arch-1:ds@dside.dyndns.org--darksoft-2004%librcc--main--0.1--patch-17
API Improvements
    - Removed 'rlen' return parameters there not necessary for multibyte encodings
    - Two versions of recode functions: rccRecode -> rccRecode, rccSizedRecode
    - Class Types: CONST, SKIP_SAVELOAD
    - New recode functions: rccToCharset, rccFromCharset
    - More new recode functions: rccRecodeToCharset, rccRecodeFromCharset, rccRecodeCharsets
    - New function: rccGetCompiledConfiguration
    - All warnings are fixed
    - Perform "File Name" search only if there are non ISO8859-1 chars in the name.
    - Do not copy invalid characters, - skip them.
    - Fixed error in rccRecode with 'Recoding Cache' switched On.
    - Strip leading and trailing spaces in rccDB4 get/set

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#include <stdio.h>
 
2
#include <stdlib.h>
2
3
#include <string.h>
3
4
 
 
5
#include "../config.h"
 
6
 
4
7
#include "internal.h"
5
8
#include "rccstring.h"
6
9
 
7
 
rcc_string rccCreateString(rcc_language_id language_id, const char *buf, size_t len, size_t *rlen) {
 
10
rcc_string rccCreateString(rcc_language_id language_id, const char *buf, size_t len) {
8
11
    char *res;
9
12
    rcc_string_header *header;
10
 
    
11
 
    len = STRNLEN(buf, len);
 
13
 
 
14
    if (!buf) return NULL;
 
15
    if (!len) len = strlen(buf);
12
16
        
13
17
    res = (char*)malloc(len+sizeof(rcc_string_header)+1);
14
18
    if (!res) return NULL;
15
19
 
16
 
    strncpy(res + sizeof(rcc_string_header), buf, len);
 
20
    memcpy(res + sizeof(rcc_string_header), buf, len);
17
21
    res[sizeof(rcc_string_header) + len] = 0;
18
22
 
19
23
    memset(res, 0xFF, sizeof(rcc_string_header));
21
25
    header->magic = RCC_STRING_MAGIC;
22
26
    header->language_id = language_id;
23
27
 
24
 
    if (rlen) *rlen = len + sizeof(rcc_string_header);
25
28
    return (rcc_string)res;
26
29
}
27
30
 
78
81
 
79
82
    if (!str) return 0;
80
83
    
81
 
    newlen = STRNLEN(str, len);
 
84
    newlen = len?len:strlen(str);
82
85
    if (newlen>sizeof(rcc_string_header)) {
83
86
        if ((len==newlen)&&(!str[newlen-2])) return 0;
84
87
        newlen-=sizeof(rcc_string_header);
88
91
}
89
92
 
90
93
 
91
 
rcc_language_id rccStringGetLanguage(const rcc_string str) {
 
94
rcc_language_id rccStringGetLanguage(rcc_const_string str) {
92
95
    if (!str) return (rcc_language_id)-1;
93
96
    return ((rcc_string_header*)str)->language_id;
94
97
}
95
98
 
96
 
const char *rccStringGetString(const rcc_string str) {
 
99
const char *rccStringGetString(rcc_const_string str) {
97
100
    return (const char *)str + sizeof(rcc_string_header);
98
101
}
99
102
 
100
 
char *rccStringExtractString(const rcc_string str) {
 
103
char *rccStringExtractString(rcc_const_string str) {
101
104
    size_t len;
102
105
    char *res;
103
106
    
107
110
    res = (char*)malloc(len+1);
108
111
    if (!res) return NULL;
109
112
 
110
 
    strncpy(res, rccStringGetString(str), len);
 
113
    memcpy(res, rccStringGetString(str), len);
111
114
    res[len] = 0;
112
115
    
113
116
    return res;    
119
122
    return str;
120
123
}
121
124
 
122
 
const char *rccSizedGetString(const char *str, size_t len, size_t *rlen) {
 
125
const char *rccSizedGetString(const char *str, size_t len) {
123
126
    size_t newlen;
124
127
    
125
128
    newlen = rccStringSizedCheck(str, len);
126
129
    if (newlen) {
127
 
        if (rlen) *rlen = newlen;
128
130
        return rccStringGetString((const rcc_string)str);
129
131
    }
130
132
    
148
150
    return strncasecmp(rccGetString(str1), rccGetString(str2), n);
149
151
}
150
152
 
 
153
#ifndef HAVE_STRNLEN
 
154
int rccStrnlen(const char *str, size_t size) {
 
155
    unsigned int i;
 
156
    for (i=0;((i<size)&&(str[i]));i++);
 
157
    return i;
 
158
}
 
159
#endif /* HAVE_STRNLEN */
 
160
 
 
161
 
 
162
int rccIsASCII(const char *str) {
 
163
    unsigned int i;
 
164
    
 
165
    for (i=0;str[i];i++)
 
166
        if ((unsigned char)str[i]>0x7F) return 0;
 
167
    return 1;
 
168
}