archive_read_support_format_empty.c revision 368708
1279418Smarkj/*-
2279418Smarkj * Copyright (c) 2003-2007 Tim Kientzle
3279418Smarkj * All rights reserved.
4279418Smarkj *
5279418Smarkj * Redistribution and use in source and binary forms, with or without
6279418Smarkj * modification, are permitted provided that the following conditions
7279418Smarkj * are met:
8279418Smarkj * 1. Redistributions of source code must retain the above copyright
9279418Smarkj *    notice, this list of conditions and the following disclaimer.
10279418Smarkj * 2. Redistributions in binary form must reproduce the above copyright
11279418Smarkj *    notice, this list of conditions and the following disclaimer in the
12279418Smarkj *    documentation and/or other materials provided with the distribution.
13279418Smarkj *
14279418Smarkj * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
15279418Smarkj * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16279418Smarkj * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17279418Smarkj * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
18279418Smarkj * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19279418Smarkj * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20279418Smarkj * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21279418Smarkj * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22279418Smarkj * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23279418Smarkj * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24279418Smarkj */
25279418Smarkj
26279418Smarkj#include "archive_platform.h"
27279418Smarkj__FBSDID("$FreeBSD: stable/10/contrib/libarchive/libarchive/archive_read_support_format_empty.c 368708 2020-12-16 22:25:40Z mm $");
28279418Smarkj
29279418Smarkj#include "archive.h"
30279418Smarkj#include "archive_entry.h"
31279418Smarkj#include "archive_private.h"
32279418Smarkj#include "archive_read_private.h"
33279418Smarkj
34279418Smarkjstatic int	archive_read_format_empty_bid(struct archive_read *, int);
35279418Smarkjstatic int	archive_read_format_empty_read_data(struct archive_read *,
36279418Smarkj		    const void **, size_t *, int64_t *);
37279418Smarkjstatic int	archive_read_format_empty_read_header(struct archive_read *,
38279418Smarkj		    struct archive_entry *);
39279418Smarkjint
40279418Smarkjarchive_read_support_format_empty(struct archive *_a)
41279418Smarkj{
42279418Smarkj	struct archive_read *a = (struct archive_read *)_a;
43279418Smarkj	int r;
44279418Smarkj
45279418Smarkj	archive_check_magic(_a, ARCHIVE_READ_MAGIC,
46279418Smarkj	    ARCHIVE_STATE_NEW, "archive_read_support_format_empty");
47279418Smarkj
48279418Smarkj	r = __archive_read_register_format(a,
49279418Smarkj	    NULL,
50279418Smarkj	    "empty",
51279418Smarkj	    archive_read_format_empty_bid,
52279418Smarkj	    NULL,
53279418Smarkj	    archive_read_format_empty_read_header,
54279418Smarkj	    archive_read_format_empty_read_data,
55279418Smarkj	    NULL,
56279418Smarkj	    NULL,
57279418Smarkj	    NULL,
58279418Smarkj	    NULL,
59279418Smarkj	    NULL);
60279418Smarkj
61279418Smarkj	return (r);
62279418Smarkj}
63279418Smarkj
64279418Smarkj
65279418Smarkjstatic int
66279418Smarkjarchive_read_format_empty_bid(struct archive_read *a, int best_bid)
67279418Smarkj{
68279418Smarkj	if (best_bid < 1 && __archive_read_ahead(a, 1, NULL) == NULL)
69279418Smarkj		return (1);
70279418Smarkj	return (-1);
71279418Smarkj}
72279418Smarkj
73279418Smarkjstatic int
74279418Smarkjarchive_read_format_empty_read_header(struct archive_read *a,
75279418Smarkj    struct archive_entry *entry)
76279418Smarkj{
77279418Smarkj	(void)a; /* UNUSED */
78279418Smarkj	(void)entry; /* UNUSED */
79279418Smarkj
80279418Smarkj	a->archive.archive_format = ARCHIVE_FORMAT_EMPTY;
81279418Smarkj	a->archive.archive_format_name = "Empty file";
82279418Smarkj
83279418Smarkj	return (ARCHIVE_EOF);
84279418Smarkj}
85279418Smarkj
86279418Smarkjstatic int
87279418Smarkjarchive_read_format_empty_read_data(struct archive_read *a,
88279418Smarkj    const void **buff, size_t *size, int64_t *offset)
89279418Smarkj{
90	(void)a; /* UNUSED */
91	(void)buff; /* UNUSED */
92	(void)size; /* UNUSED */
93	(void)offset; /* UNUSED */
94
95	return (ARCHIVE_EOF);
96}
97