Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libcs/cswrite.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1990-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* write n bytes to fd, using multiple write(2) if necessary
26
*/
27
28
#include "cslib.h"
29
30
ssize_t
31
cswrite(register Cs_t* state, int fd, const void* buf, register size_t n)
32
{
33
register char* p = (char*)buf;
34
register ssize_t i;
35
36
while (n > 0)
37
{
38
messagef((state->id, NiL, -9, "write(%d,%d) `%-.*s'", fd, n, n - 1, (n > 0 && *((char*)buf + n - 1) == '\n') ? (char*)buf : "..."));
39
if ((i = write(fd, p, n)) <= 0)
40
{
41
messagef((state->id, NiL, -9, "write(%d,%d) [%d]", fd, n, i));
42
if (i && p == (char*)buf)
43
return i;
44
break;
45
}
46
n -= i;
47
p += i;
48
}
49
return p - (char*)buf;
50
}
51
52
ssize_t
53
_cs_write(int fd, const void* buf, size_t n)
54
{
55
return cswrite(&cs, fd, buf, n);
56
}
57
58