source: libcfa/src/bits/debug.cfa@ 0335620

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since 0335620 was e3fea42, checked in by Peter A. Buhr <pabuhr@…>, 6 years ago

change "const char *" to "const char []"

  • Property mode set to 100644
File size: 2.2 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// debug.c --
8//
9// Author : Thierry Delisle
10// Created On : Thu Mar 30 12:30:01 2017
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Tue Feb 4 13:03:16 2020
13// Update Count : 11
14//
15
16extern "C" {
17#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
20#include <errno.h>
21#include <stdarg.h>
22#include <unistd.h>
23}
24
25enum { buffer_size = 4096 };
26static char buffer[ buffer_size ];
27
28extern "C" {
29 void __cfaabi_bits_write( int fd, const char in_buffer[], int len ) {
30 // ensure all data is written
31 for ( int count = 0, retcode; count < len; count += retcode ) {
32 in_buffer += count;
33
34 for ( ;; ) {
35 retcode = write( fd, in_buffer, len - count );
36
37 // not a timer interrupt ?
38 if ( retcode != -1 || errno != EINTR ) break;
39 }
40
41 if ( retcode == -1 ) _exit( EXIT_FAILURE );
42 }
43 }
44
45 void __cfaabi_bits_acquire() __attribute__((__weak__)) {}
46 void __cfaabi_bits_release() __attribute__((__weak__)) {}
47
48 void __cfaabi_bits_print_safe ( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) )) {
49 va_list args;
50
51 va_start( args, fmt );
52 __cfaabi_bits_acquire();
53
54 int len = vsnprintf( buffer, buffer_size, fmt, args );
55 __cfaabi_bits_write( fd, buffer, len );
56
57 __cfaabi_bits_release();
58 va_end( args );
59 }
60
61 void __cfaabi_bits_print_nolock( int fd, const char fmt[], ... ) __attribute__(( format(printf, 2, 3) )) {
62 va_list args;
63
64 va_start( args, fmt );
65
66 int len = vsnprintf( buffer, buffer_size, fmt, args );
67 __cfaabi_bits_write( fd, buffer, len );
68
69 va_end( args );
70 }
71
72 void __cfaabi_bits_print_vararg( int fd, const char fmt[], va_list args ) {
73 int len = vsnprintf( buffer, buffer_size, fmt, args );
74 __cfaabi_bits_write( fd, buffer, len );
75 }
76
77 void __cfaabi_bits_print_buffer( int fd, char in_buffer[], int in_buffer_size, const char fmt[], ... ) __attribute__(( format(printf, 4, 5) )) {
78 va_list args;
79
80 va_start( args, fmt );
81
82 int len = vsnprintf( in_buffer, in_buffer_size, fmt, args );
83 __cfaabi_bits_write( fd, in_buffer, len );
84
85 va_end( args );
86 }
87}
Note: See TracBrowser for help on using the repository browser.