mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-08-25 02:36:07 +00:00
Change the bootstrap installer download function to use the new gnome-http
* components/services/install/lib/eazel-install-object.c: * components/services/install/lib/eazel-install-protocols.c: (http_fetch_remote_file): * nautilus-installer/src/HACKING: Change the bootstrap installer download function to use the new gnome-http call to avoid buffering 8MB of package files in memory at once. * components/services/trilobite/libtrilobite/trilobite-core-network -slim.c: (trilobite_xml_get_string), (trilobite_fetch_uri), (trilobite_fetch_uri_to_file): Forgot to add this once -- needed by the bootstrap installer.
This commit is contained in:
parent
9d17a2dd51
commit
49a9a552c9
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,20 @@
|
|||
2001-01-18 Robey Pointer <robey@eazel.com>
|
||||
|
||||
* components/services/install/lib/eazel-install-object.c:
|
||||
* components/services/install/lib/eazel-install-protocols.c:
|
||||
(http_fetch_remote_file):
|
||||
* nautilus-installer/src/HACKING:
|
||||
|
||||
Change the bootstrap installer download function to use the new
|
||||
gnome-http call to avoid buffering 8MB of package files in memory
|
||||
at once.
|
||||
|
||||
* components/services/trilobite/libtrilobite/trilobite-core-network
|
||||
-slim.c: (trilobite_xml_get_string), (trilobite_fetch_uri),
|
||||
(trilobite_fetch_uri_to_file):
|
||||
|
||||
Forgot to add this once -- needed by the bootstrap installer.
|
||||
|
||||
2001-01-18 Eskil Olsen <eskil@eazel.com>
|
||||
|
||||
* components/services/install/lib/eazel-install-rpm-glue.c:
|
||||
|
|
|
@ -1600,7 +1600,20 @@ eazel_install_emit_done_default (EazelInstall *service, gboolean result)
|
|||
|
||||
|
||||
/* Welcome to define madness. These are all the get/set methods. There is nothing of
|
||||
interest beyond this point, except for a fucking big dragon*/
|
||||
* interest beyond this point, except for this dragon:
|
||||
_ _
|
||||
_ //` `\
|
||||
_,-"\% // /``\`\
|
||||
~^~ >__^ |% // / } `\`\
|
||||
) )%// / } } }`\`\
|
||||
/ (%/'/.\_/\_/\_/\`/
|
||||
( ' `-._`
|
||||
\ , ( \ _`-.__.-;%>
|
||||
/_`\ \ `\ \." `-..-'`
|
||||
``` /_/`"-=-'`/_/
|
||||
jgs ``` ```
|
||||
*/
|
||||
|
||||
|
||||
static void
|
||||
string_list_copy (GList **in,
|
||||
|
|
|
@ -98,7 +98,8 @@ http_fetch_remote_file (EazelInstall *service,
|
|||
ghttp_status status;
|
||||
char* body;
|
||||
FILE* file;
|
||||
int total_bytes=0;
|
||||
int total_bytes = 0;
|
||||
int last_flush_bytes = 0;
|
||||
gboolean first_emit;
|
||||
const char *report;
|
||||
char *target_file_premove;
|
||||
|
@ -168,6 +169,28 @@ http_fetch_remote_file (EazelInstall *service,
|
|||
curStat.bytes_read,
|
||||
curStat.bytes_total);
|
||||
}
|
||||
|
||||
/* arbitrary -- flush every 16k or so */
|
||||
if (curStat.bytes_read > last_flush_bytes + 16384) {
|
||||
ghttp_flush_response_buffer (request);
|
||||
length = ghttp_get_body_len (request);
|
||||
body = ghttp_get_body (request);
|
||||
if (body != NULL) {
|
||||
if (fwrite (body, length, 1, file) < 1) {
|
||||
/* probably out of disk space */
|
||||
g_warning (_("DISK FULL: could not write %s"), target_file);
|
||||
service->private->disk_full = TRUE;
|
||||
get_failed = 1;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
g_warning (_("Could not get request body!"));
|
||||
get_failed = 1;
|
||||
break;
|
||||
}
|
||||
last_flush_bytes = curStat.bytes_read;
|
||||
}
|
||||
|
||||
g_main_iteration (FALSE);
|
||||
}
|
||||
/* Last emit amount==total */
|
||||
|
|
|
@ -0,0 +1,175 @@
|
|||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/*
|
||||
* trilobite-core-network: functions for retrieving files from the
|
||||
* network and parsing XML documents
|
||||
* (this version is for the bootstrap installer, it's "slimmed down")
|
||||
*
|
||||
* Copyright (C) 2000 Eazel, Inc
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* Authors: J Shane Culpepper <pepper@eazel.com>
|
||||
* Robey Pointer <robey@eazel.com>
|
||||
* Eskil Heyn Olsen <eskil@eazel.com>
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <ghttp.h>
|
||||
#include <gnome.h>
|
||||
#include "trilobite-core-utils.h"
|
||||
#include "trilobite-core-network.h"
|
||||
|
||||
|
||||
/* function for lazy bastards who can't be bothered to figure out the format of the xml they're parsing:
|
||||
* it checks for a property with the name, and then if there isn't one, then it tries to find a child
|
||||
* with that name instead.
|
||||
*/
|
||||
char *
|
||||
trilobite_xml_get_string (xmlNode *node, const char *name)
|
||||
{
|
||||
char *ret;
|
||||
char *tmp;
|
||||
xmlNode *child;
|
||||
|
||||
ret = xmlGetProp (node, name);
|
||||
if (ret) {
|
||||
goto good;
|
||||
}
|
||||
child = node->xmlChildrenNode;
|
||||
while (child) {
|
||||
if (g_strcasecmp (child->name, name) == 0) {
|
||||
ret = xmlNodeGetContent (child);
|
||||
if (ret) {
|
||||
goto good;
|
||||
}
|
||||
}
|
||||
child = child->next;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
good:
|
||||
tmp = g_strdup (ret);
|
||||
xmlFree (ret);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
gboolean
|
||||
trilobite_fetch_uri (const char *uri_text, char **body, int *length)
|
||||
{
|
||||
char *uri = NULL;
|
||||
ghttp_request* request;
|
||||
ghttp_status status;
|
||||
gboolean result = TRUE;
|
||||
|
||||
g_assert (body!=NULL);
|
||||
g_assert (uri_text != NULL);
|
||||
g_assert (length != NULL);
|
||||
|
||||
uri = g_strdup (uri_text);
|
||||
request = NULL;
|
||||
(*length) = -1;
|
||||
(*body) = NULL;
|
||||
|
||||
if ((request = ghttp_request_new())==NULL) {
|
||||
g_warning (_("Could not create an http request !"));
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
/* bootstrap installer does it this way */
|
||||
if (result && (g_getenv ("http_proxy") != NULL)) {
|
||||
if (ghttp_set_proxy (request, g_getenv ("http_proxy")) != 0) {
|
||||
g_warning (_("Proxy: Invalid uri !"));
|
||||
result = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (result && (ghttp_set_uri (request, uri) != 0)) {
|
||||
g_warning (_("Invalid uri !"));
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
if (result) {
|
||||
ghttp_set_header (request, http_hdr_Connection, "close");
|
||||
ghttp_set_header (request, http_hdr_User_Agent, trilobite_get_useragent_string (FALSE, NULL));
|
||||
}
|
||||
|
||||
if (result && (ghttp_prepare (request) != 0)) {
|
||||
g_warning (_("Could not prepare http request !"));
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
if (result && ghttp_set_sync (request, ghttp_async)) {
|
||||
g_warning (_("Couldn't get async mode "));
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
while (result && (status = ghttp_process (request)) == ghttp_not_done) {
|
||||
/* ghttp_current_status curStat = ghttp_get_status (request); */
|
||||
g_main_iteration (FALSE);
|
||||
}
|
||||
|
||||
if (result && (ghttp_status_code (request) != 200)) {
|
||||
g_warning (_("HTTP error %d \"%s\" on uri %s"),
|
||||
ghttp_status_code (request),
|
||||
ghttp_reason_phrase (request),
|
||||
uri);
|
||||
result = FALSE;
|
||||
}
|
||||
if (result && (ghttp_status_code (request) != 404)) {
|
||||
(*length) = ghttp_get_body_len (request);
|
||||
(*body) = g_new0 (char, *length + 1);
|
||||
memcpy (*body, ghttp_get_body (request), *length);
|
||||
(*body)[*length] = 0;
|
||||
} else {
|
||||
result = FALSE;
|
||||
}
|
||||
|
||||
if (request) {
|
||||
ghttp_request_destroy (request);
|
||||
}
|
||||
|
||||
g_free (uri);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
gboolean
|
||||
trilobite_fetch_uri_to_file (const char *uri_text, const char *filename)
|
||||
{
|
||||
char *body = NULL;
|
||||
int length;
|
||||
gboolean result = FALSE;
|
||||
|
||||
result = trilobite_fetch_uri (uri_text, &body, &length);
|
||||
if (result) {
|
||||
FILE* file;
|
||||
file = fopen (filename, "wb");
|
||||
if (file == NULL) {
|
||||
g_warning (_("Could not open target file %s"),filename);
|
||||
result = FALSE;
|
||||
} else {
|
||||
fwrite (body, length, 1, file);
|
||||
}
|
||||
fclose (file);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
|
@ -12,5 +12,8 @@ it rebuils the lib every time.
|
|||
|
||||
The same goes to libtrilobite now.
|
||||
|
||||
As of 18 Jan 2001, you need the CVS head of gnome-http to build correctly.
|
||||
This will change when a new version of gnome-http is released.
|
||||
|
||||
UPDATE: link.sh does all this magic for you now, but still
|
||||
rebuilds the library from scratch every time.
|
||||
|
|
Loading…
Reference in a new issue