static void convert_cat(String *cap, char *s, Config *c, int maxlen) { int res; if (config_get_boolean(c, "/enfle/plugins/ui/normal/filename_code_conversion", &res)) { char **froms = config_get_list(c, "/enfle/plugins/ui/normal/filename_code_from", &res); char *to = config_get_str(c, "/enfle/plugins/ui/normal/filename_code_to"); char *from; int i = 0; if (res && to) { while ((from = froms[i++])) { char *tmp; //debug_message_fnc("%s->%s: %s\n", from, to, s); if ((res = converter_convert(s, &tmp, strlen(s), from, to)) < 0) continue; if (maxlen) string_ncat(cap, tmp, maxlen); else string_cat(cap, tmp); free(tmp); return; } } } if (maxlen > 0) string_ncat(cap, s, maxlen); else string_cat(cap, s); }
string_t *string_cat (string_t *dest, const char *src) { if (!src) { return dest; } return string_ncat (dest, src, strlen (src)); }
char *pkg_to_str (const char *target, void *pkg, printpkgfn f, const char *format) { if (!format) return NULL; const char *c; string_t *ret = string_new(); const char *ptr = format; const char *end = &(format[strlen(format)]); while ((c = strchr (ptr, '%'))) { if (&(c[1]) == end) { break; } if (c[1] == '%' ) { ret = string_ncat (ret, ptr, (c-ptr)); ret = string_cat (ret, "%%"); } else { const char *info = NULL; if (strchr (FORMAT_LOCAL_PKG, c[1])) { info = alpm_local_pkg_get_str (f(pkg, 'n'), c[1]); } else if (c[1] == 't') { info = target; } else { info = f (pkg, c[1]); } if (c != ptr) { ret = string_ncat (ret, ptr, (c-ptr)); } if (info) { ret = string_cat (ret, info); } else { ret = string_cat (ret, "-"); } } ptr = &(c[2]); } if (ptr != end) { ret = string_ncat (ret, ptr, (end - ptr)); } return string_free2 (ret); }