8 char *strchrnul(const char *str
, int c
)
10 char *p
= strchr(str
, c
);
12 p
= (char *) str
+ strlen(str
);
16 char *strdcat(char **dest
, const char *src
)
20 la
= *dest
? strlen(*dest
) : 0;
22 p
= realloc(*dest
, la
+ lb
+ 1);
26 memcpy(*dest
+ la
, src
, lb
+ 1);
30 char *strdncat(char **dest
, const char *src
, size_t n
)
34 la
= *dest
? strlen(*dest
) : 0;
38 p
= realloc(*dest
, la
+ lb
+ 1);
42 memcpy(*dest
+ la
, src
, lb
);
43 (*dest
)[la
+ lb
] = '\0';
47 char *strdcpy(char **dest
, const char *src
)
52 p
= realloc(*dest
, l
+ 1);
56 memcpy(*dest
, src
, l
+ 1);
60 char *strdncpy(char **dest
, const char *src
, size_t n
)
67 p
= realloc(*dest
, l
+ 1);
71 memcpy(*dest
, src
, l
);
76 char *strdcatc(char **dest
, int ch
)
80 l
= *dest
? strlen(*dest
) : 0;
81 p
= realloc(*dest
, l
+ 2);
86 (*dest
)[l
+ 1] = '\0';
90 char *strldcat(char **dest
, int *dest_len
, const char *src
)
95 p
= realloc(*dest
, *dest_len
+ lb
+ 1);
99 memcpy(*dest
+ *dest_len
, src
, lb
+ 1);
104 char *strldncat(char **dest
, int *dest_len
, const char *src
, size_t n
)
111 p
= realloc(*dest
, *dest_len
+ lb
+ 1);
115 memcpy(*dest
+ *dest_len
, src
, lb
);
116 (*dest
)[*dest_len
+ lb
] = '\0';
121 char *strldcpy(char **dest
, int *dest_len
, const char *src
, int src_len
)
124 p
= realloc(*dest
, src_len
+ 1);
128 memcpy(*dest
, src
, src_len
+ 1);
133 char *strldncpy(char **dest
, int *dest_len
, const char *src
, size_t n
)
140 p
= realloc(*dest
, l
+ 1);
144 memcpy(*dest
, src
, l
);
150 char *strldcatc(char **dest
, int *dest_len
, int ch
)
153 p
= realloc(*dest
, *dest_len
+ 2);
157 (*dest
)[*dest_len
] = ch
;
158 (*dest
)[*dest_len
+ 1] = '\0';
163 char *sdprintf(const char *fmt
, ...)
168 p
= vsdprintf(fmt
, ap
);
173 char *vsdprintf(const char *fmt
, va_list ap
)
177 n
= vsnprintf(buf
, 2, fmt
, ap
);
181 vsprintf(p
, fmt
, ap
);
185 void strtolower(char *str
)
188 *str
= tolower(*str
);
193 void strtoupper(char *str
)
196 *str
= toupper(*str
);
201 char *pathname(const char *str
)
203 char *p
= strrchr(str
, '/');
207 return strndup(str
, p
- str
);
210 char *filesuffix(const char *str
)
212 const char *p
= str
+ strlen(str
) - 1;
215 // Suffix, or hidden file?
216 if (p
== str
|| p
[-1] == '/'){
220 return strdup(p
+ 1);