static int shell_grab (const char *arg, char **sout) { int err = 0; if (arg == NULL || *arg == '\0') { return E_PARSE; } if (!libset_get_bool(SHELL_OK)) { gretl_errmsg_set(_("The shell command is not activated.")); return 1; } gretl_shell_grab(arg, sout); if (sout != NULL && *sout != NULL) { char *content = *sout; if (!g_utf8_validate(content, -1, NULL)) { content = recode_content(content, NULL, &err); *sout = content; } if (content != NULL) { /* trim trailing newline */ int n = strlen(content); if (content[n-1] == '\n') { content[n-1] = '\0'; } } } return err; }
char *retrieve_file_content (const char *fname, const char *codeset, int *err) { char *content = NULL; size_t len = 0; if (fname == NULL || *fname == '\0') { *err = E_DATA; } else if (is_web_resource(fname)) { #ifdef USE_CURL content = retrieve_public_file_as_buffer(fname, &len, err); if (!*err && !g_utf8_validate(content, len, NULL)) { content = recode_content(content, codeset, err); } #else gretl_errmsg_set(_("Internet access not supported")); *err = E_DATA; #endif } else { char fullname[FILENAME_MAX]; GError *gerr = NULL; *fullname = '\0'; strncat(fullname, fname, FILENAME_MAX - 1); gretl_addpath(fullname, 0); g_file_get_contents(fullname, &content, &len, &gerr); if (gerr != NULL) { gretl_errmsg_set(gerr->message); *err = E_FOPEN; g_error_free(gerr); } else if (!g_utf8_validate(content, len, NULL)) { content = recode_content(content, codeset, err); } } return content; }