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;
}
Example #2
0
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;
}