@@ -83,79 +83,75 @@ static void ReportEndpoints(uv_handle_t* h, JSONWriter* writer) {
8383// Utility function to format libuv pipe information.
8484static void ReportPipeEndpoints (uv_handle_t * h, JSONWriter* writer) {
8585 uv_any_handle* handle = reinterpret_cast <uv_any_handle*>(h);
86- MallocedBuffer <char > buffer ( 0 ) ;
87- size_t buffer_size = 0 ;
86+ MaybeStackBuffer <char > buffer;
87+ size_t buffer_size = buffer. capacity () ;
8888 int rc = -1 ;
8989
9090 // First call to get required buffer size.
91- rc = uv_pipe_getsockname (&handle->pipe , buffer.data , &buffer_size);
91+ rc = uv_pipe_getsockname (&handle->pipe , buffer.out () , &buffer_size);
9292 if (rc == UV_ENOBUFS) {
93- buffer = MallocedBuffer<char >(buffer_size);
94- if (buffer.data != nullptr ) {
95- rc = uv_pipe_getsockname (&handle->pipe , buffer.data , &buffer_size);
96- } else {
97- buffer_size = 0 ;
98- }
93+ buffer.AllocateSufficientStorage (buffer_size);
94+ rc = uv_pipe_getsockname (&handle->pipe , buffer.out (), &buffer_size);
9995 }
100- if (rc == 0 && buffer_size != 0 && buffer.data != nullptr ) {
101- writer->json_keyvalue (" localEndpoint" , buffer.data );
96+ if (rc == 0 && buffer_size != 0 ) {
97+ buffer.SetLength (buffer_size);
98+ writer->json_keyvalue (" localEndpoint" , buffer.ToStringView ());
10299 } else {
103100 writer->json_keyvalue (" localEndpoint" , null);
104101 }
105102
106103 // First call to get required buffer size.
107- rc = uv_pipe_getpeername (&handle->pipe , buffer.data , &buffer_size);
104+ buffer_size = buffer.capacity ();
105+ rc = uv_pipe_getpeername (&handle->pipe , buffer.out (), &buffer_size);
108106 if (rc == UV_ENOBUFS) {
109- buffer = MallocedBuffer<char >(buffer_size);
110- if (buffer.data != nullptr ) {
111- rc = uv_pipe_getpeername (&handle->pipe , buffer.data , &buffer_size);
112- }
107+ buffer.AllocateSufficientStorage (buffer_size);
108+ rc = uv_pipe_getpeername (&handle->pipe , buffer.out (), &buffer_size);
113109 }
114- if (rc == 0 && buffer_size != 0 && buffer.data != nullptr ) {
115- writer->json_keyvalue (" remoteEndpoint" , buffer.data );
110+ if (rc == 0 && buffer_size != 0 ) {
111+ buffer.SetLength (buffer_size);
112+ writer->json_keyvalue (" remoteEndpoint" , buffer.ToStringView ());
116113 } else {
117114 writer->json_keyvalue (" remoteEndpoint" , null);
118115 }
119116}
120117
121118// Utility function to format libuv path information.
122119static void ReportPath (uv_handle_t * h, JSONWriter* writer) {
123- MallocedBuffer <char > buffer ( 0 ) ;
120+ MaybeStackBuffer <char > buffer;
124121 int rc = -1 ;
125- size_t size = 0 ;
122+ size_t size = buffer. capacity () ;
126123 uv_any_handle* handle = reinterpret_cast <uv_any_handle*>(h);
127- bool wrote_filename = false ;
128124 // First call to get required buffer size.
129125 switch (h->type ) {
130126 case UV_FS_EVENT:
131- rc = uv_fs_event_getpath (&(handle->fs_event ), buffer.data , &size);
127+ rc = uv_fs_event_getpath (&(handle->fs_event ), buffer.out () , &size);
132128 break ;
133129 case UV_FS_POLL:
134- rc = uv_fs_poll_getpath (&(handle->fs_poll ), buffer.data , &size);
130+ rc = uv_fs_poll_getpath (&(handle->fs_poll ), buffer.out () , &size);
135131 break ;
136132 default :
137133 break ;
138134 }
139135 if (rc == UV_ENOBUFS) {
140- buffer = MallocedBuffer< char > (size + 1 );
136+ buffer. AllocateSufficientStorage (size);
141137 switch (h->type ) {
142138 case UV_FS_EVENT:
143- rc = uv_fs_event_getpath (&(handle->fs_event ), buffer.data , &size);
139+ rc = uv_fs_event_getpath (&(handle->fs_event ), buffer.out () , &size);
144140 break ;
145141 case UV_FS_POLL:
146- rc = uv_fs_poll_getpath (&(handle->fs_poll ), buffer.data , &size);
142+ rc = uv_fs_poll_getpath (&(handle->fs_poll ), buffer.out () , &size);
147143 break ;
148144 default :
149145 break ;
150146 }
151- if (rc == 0 ) {
152- // buffer is not null terminated.
153- buffer.data [size] = ' \0 ' ;
154- writer->json_keyvalue (" filename" , buffer.data );
155- wrote_filename = true ;
156- }
157147 }
158- if (!wrote_filename) writer->json_keyvalue (" filename" , null);
148+
149+ if (rc == 0 && size > 0 ) {
150+ buffer.SetLength (size);
151+ writer->json_keyvalue (" filename" , buffer.ToStringView ());
152+ } else {
153+ writer->json_keyvalue (" filename" , null);
154+ }
159155}
160156
161157// Utility function to walk libuv handles.
0 commit comments