1*58e6ee5fSAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1 */
2*58e6ee5fSAndroid Build Coastguard Worker /*
3*58e6ee5fSAndroid Build Coastguard Worker * Copyright (C) 2010 Red Hat Inc, Steven Rostedt <[email protected]>
4*58e6ee5fSAndroid Build Coastguard Worker *
5*58e6ee5fSAndroid Build Coastguard Worker */
6*58e6ee5fSAndroid Build Coastguard Worker #ifndef _TRACE_WRITE_LOCAL_H
7*58e6ee5fSAndroid Build Coastguard Worker #define _TRACE_WRITE_LOCAL_H
8*58e6ee5fSAndroid Build Coastguard Worker
9*58e6ee5fSAndroid Build Coastguard Worker /* Local for trace-input.c, trace-output.c and trace-msg.c */
10*58e6ee5fSAndroid Build Coastguard Worker
__do_write(int fd,const void * data,size_t size)11*58e6ee5fSAndroid Build Coastguard Worker static inline ssize_t __do_write(int fd, const void *data, size_t size)
12*58e6ee5fSAndroid Build Coastguard Worker {
13*58e6ee5fSAndroid Build Coastguard Worker ssize_t tot = 0;
14*58e6ee5fSAndroid Build Coastguard Worker ssize_t w;
15*58e6ee5fSAndroid Build Coastguard Worker
16*58e6ee5fSAndroid Build Coastguard Worker do {
17*58e6ee5fSAndroid Build Coastguard Worker w = write(fd, data + tot, size - tot);
18*58e6ee5fSAndroid Build Coastguard Worker tot += w;
19*58e6ee5fSAndroid Build Coastguard Worker
20*58e6ee5fSAndroid Build Coastguard Worker if (!w)
21*58e6ee5fSAndroid Build Coastguard Worker break;
22*58e6ee5fSAndroid Build Coastguard Worker if (w < 0)
23*58e6ee5fSAndroid Build Coastguard Worker return w;
24*58e6ee5fSAndroid Build Coastguard Worker } while (tot != size);
25*58e6ee5fSAndroid Build Coastguard Worker
26*58e6ee5fSAndroid Build Coastguard Worker return tot;
27*58e6ee5fSAndroid Build Coastguard Worker }
28*58e6ee5fSAndroid Build Coastguard Worker
29*58e6ee5fSAndroid Build Coastguard Worker static inline ssize_t
__do_write_check(int fd,const void * data,size_t size)30*58e6ee5fSAndroid Build Coastguard Worker __do_write_check(int fd, const void *data, size_t size)
31*58e6ee5fSAndroid Build Coastguard Worker {
32*58e6ee5fSAndroid Build Coastguard Worker ssize_t ret;
33*58e6ee5fSAndroid Build Coastguard Worker
34*58e6ee5fSAndroid Build Coastguard Worker ret = __do_write(fd, data, size);
35*58e6ee5fSAndroid Build Coastguard Worker if (ret < 0)
36*58e6ee5fSAndroid Build Coastguard Worker return ret;
37*58e6ee5fSAndroid Build Coastguard Worker if (ret != size)
38*58e6ee5fSAndroid Build Coastguard Worker return -1;
39*58e6ee5fSAndroid Build Coastguard Worker
40*58e6ee5fSAndroid Build Coastguard Worker return 0;
41*58e6ee5fSAndroid Build Coastguard Worker }
42*58e6ee5fSAndroid Build Coastguard Worker
43*58e6ee5fSAndroid Build Coastguard Worker #endif /* _TRACE_WRITE_LOCAL_H */
44