A lot of the libostree code is honestly too complex for its own good (this is mostly my fault). The way we do HTTP writes is still one of those. The way the fetcher writes tempfiles, then reads them back in is definitely one of those. Now that we've dropped the "partial object" bits in: https://github.com/ostreedev/ostree/pull/1176 i.e. commit https://github.com/ostreedev/ostree/commit/0488b4870e80ef575d8b0edf6f2a9e5ad54bf4df we can simplify things a lot more by having the fetcher return an `O_TMPFILE` rather than a filename. For trusted archive mirroring, we need to enable linking in the tmpfiles directly. Otherwise for at least content objects they're compressed, so we couldn't link them in. For metadata, we need to do similar logic to what we have around `mmap()` to only grab a tmpfile if the size is large enough. Closes: #1252 Approved by: jlebon
72 lines
2.8 KiB
C
72 lines
2.8 KiB
C
/*
|
|
* Copyright (C) 2016 Colin Walters <walters@verbum.org>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#ifndef __GI_SCANNER__
|
|
|
|
#include "ostree-fetcher.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
static inline gboolean
|
|
_ostree_fetcher_tmpf_from_flags (OstreeFetcherRequestFlags flags,
|
|
int dfd,
|
|
GLnxTmpfile *tmpf,
|
|
GError **error)
|
|
{
|
|
if ((flags & OSTREE_FETCHER_REQUEST_LINKABLE) > 0)
|
|
{
|
|
if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_RDWR | O_CLOEXEC, tmpf, error))
|
|
return FALSE;
|
|
}
|
|
else if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, tmpf, error))
|
|
return FALSE;
|
|
|
|
if (!glnx_fchmod (tmpf->fd, 0644, error))
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
gboolean _ostree_fetcher_mirrored_request_to_membuf (OstreeFetcher *fetcher,
|
|
GPtrArray *mirrorlist,
|
|
const char *filename,
|
|
OstreeFetcherRequestFlags flags,
|
|
GBytes **out_contents,
|
|
guint64 max_size,
|
|
GCancellable *cancellable,
|
|
GError **error);
|
|
|
|
gboolean _ostree_fetcher_request_uri_to_membuf (OstreeFetcher *fetcher,
|
|
OstreeFetcherURI *uri,
|
|
OstreeFetcherRequestFlags flags,
|
|
GBytes **out_contents,
|
|
guint64 max_size,
|
|
GCancellable *cancellable,
|
|
GError **error);
|
|
|
|
void _ostree_fetcher_journal_failure (const char *remote_name,
|
|
const char *url,
|
|
const char *msg);
|
|
|
|
|
|
G_END_DECLS
|
|
|
|
#endif
|