diff options
author | Nicolas Pitre <nico@fluxnic.net> | 2021-06-16 17:47:03 -0400 |
---|---|---|
committer | Nicolas Pitre <nico@fluxnic.net> | 2021-06-16 17:47:03 -0400 |
commit | da6a80811180c175ca01f1453b72a73451e0d4f7 (patch) | |
tree | 5067ede6f890d7710cf000268218181fecaa5d82 /src | |
parent | 793bc4899f6433690b714828423c5c298bdf0f79 (diff) |
simplify the clipboard code a bit
Especially the computing cost due to repeated get_conf_value()
and strlen().
Diffstat (limited to 'src')
-rw-r--r-- | src/clipboard.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/clipboard.c b/src/clipboard.c index c121f01..889d454 100644 --- a/src/clipboard.c +++ b/src/clipboard.c @@ -66,7 +66,8 @@ extern struct session * session; */ int paste_from_clipboard() { struct roman * roman = session->cur_doc; - if (! strlen(get_conf_value("default_paste_from_clipboard_cmd"))) return -1; + char *clipboard_cmd = get_conf_value("default_paste_from_clipboard_cmd"); + if (!clipboard_cmd || !*clipboard_cmd) return -1; // create tmp file char template[] = "/tmp/sc-im-clipboardXXXXXX"; @@ -80,9 +81,14 @@ int paste_from_clipboard() { //FILE * fpori = fdopen(fd, "w"); // copy content from clipboard to temp file - char syscmd[PATHLEN + strlen(get_conf_value("default_paste_from_clipboard_cmd")) + 1]; - sprintf(syscmd, "%s", get_conf_value("default_paste_from_clipboard_cmd")); - sprintf(syscmd + strlen(syscmd), " >> %s", template); + char syscmd[PATHLEN]; + int ret = snprintf(syscmd, PATHLEN, "%s >> %s", clipboard_cmd, template); + if (ret < 0 || ret >= PATHLEN) { + sc_error("Error while pasting from clipboard"); + ret = -1; + goto out; + } + ret = 0; system(syscmd); // traverse the temp file @@ -126,12 +132,13 @@ int paste_from_clipboard() { } sc_info("Content pasted from clipboard"); +out: // close file descriptor close(fd); // remove temp file unlink(template); - return 0; + return ret; } @@ -140,7 +147,8 @@ int paste_from_clipboard() { * \return 0 on success; -1 on error */ int copy_to_clipboard(int r0, int c0, int rn, int cn) { - if (! strlen(get_conf_value("default_copy_to_clipboard_cmd"))) return -1; + char *clipboard_cmd = get_conf_value("default_copy_to_clipboard_cmd"); + if (!clipboard_cmd || !*clipboard_cmd) return -1; // create tmp file char template[] = "/tmp/sc-im-clipboardXXXXXX"; @@ -158,12 +166,16 @@ int copy_to_clipboard(int r0, int c0, int rn, int cn) { fclose(fp); // copy to clipboard - char syscmd[PATHLEN + strlen(get_conf_value("default_copy_to_clipboard_cmd")) + 1]; - sprintf(syscmd, "%s", get_conf_value("default_copy_to_clipboard_cmd")); - sprintf(syscmd + strlen(syscmd), " %s", template); - system(syscmd); - - sc_info("Content copied to clipboard"); + char syscmd[PATHLEN]; + int ret = snprintf(syscmd, PATHLEN, "%s %s", clipboard_cmd, template); + if (ret < 0 || ret >= PATHLEN) { + sc_error("Error while copying to clipboard"); + ret = -1; + } else { + system(syscmd); + sc_info("Content copied to clipboard"); + ret = 0; + } // close file descriptor close(fd); @@ -171,7 +183,7 @@ int copy_to_clipboard(int r0, int c0, int rn, int cn) { // remove temp file unlink(template); - return 0; + return ret; } @@ -190,6 +202,7 @@ int copy_to_clipboard(int r0, int c0, int rn, int cn) { int save_plain(FILE * fout, int r0, int c0, int rn, int cn) { if (fout == NULL) return -1; struct roman * roman = session->cur_doc; + int conf_clipboard_delimited_tab = get_conf_int("copy_to_clipboard_delimited_tab"); int row, col; register struct ent ** pp; wchar_t out[FBUFLEN] = L""; @@ -250,7 +263,7 @@ int save_plain(FILE * fout, int r0, int c0, int rn, int cn) { if(emptyfield){ fwprintf(fout, L"\t"); } - if (! get_conf_int("copy_to_clipboard_delimited_tab")) { + if (! conf_clipboard_delimited_tab) { pad_and_align(text, num, roman->cur_sh->fwidth[col], align, 0, out, roman->cur_sh->row_format[row]); fwprintf(fout, L"%ls", out); } else if ( (*pp)->flags & is_valid) { @@ -258,7 +271,7 @@ int save_plain(FILE * fout, int r0, int c0, int rn, int cn) { } else if ( (*pp)->label) { fwprintf(fout, L"%s\t", text); } - } else if (! get_conf_int("copy_to_clipboard_delimited_tab")) { + } else if (! conf_clipboard_delimited_tab) { fwprintf(fout, L"%*s", roman->cur_sh->fwidth[col], " "); } else { fwprintf(fout, L"\t"); |