Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/lib/iolog/iolog_flush.c
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2021 Todd C. Miller <[email protected]>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#include <config.h>
20
21
#include <stdio.h>
22
#include <string.h>
23
#include <time.h>
24
#include <errno.h>
25
26
#include <sudo_compat.h>
27
#include <sudo_debug.h>
28
#include <sudo_iolog.h>
29
30
/*
31
* I/O log wrapper for fflush/gzflush.
32
*/
33
bool
34
iolog_flush(struct iolog_file *iol, const char **errstr)
35
{
36
debug_decl(iolog_flush, SUDO_DEBUG_UTIL);
37
bool ret = true;
38
39
#ifdef HAVE_ZLIB_H
40
if (iol->compressed) {
41
int errnum;
42
if (gzflush(iol->fd.g, Z_SYNC_FLUSH) != Z_OK) {
43
if (errstr != NULL) {
44
*errstr = gzerror(iol->fd.g, &errnum);
45
if (errnum == Z_ERRNO)
46
*errstr = strerror(errno);
47
}
48
ret = false;
49
}
50
} else
51
#endif
52
{
53
if (fflush(iol->fd.f) != 0) {
54
if (errstr != NULL)
55
*errstr = strerror(errno);
56
ret = false;
57
}
58
}
59
60
debug_return_bool(ret);
61
}
62
63