nxt_file.c (521:93dc4a28dd37) nxt_file.c (564:762f8c976ead)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 34 unchanged lines hidden (view full) ---

43
44
45void
46nxt_file_close(nxt_task_t *task, nxt_file_t *file)
47{
48 nxt_debug(task, "close(%FD)", file->fd);
49
50 if (close(file->fd) != 0) {
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 34 unchanged lines hidden (view full) ---

43
44
45void
46nxt_file_close(nxt_task_t *task, nxt_file_t *file)
47{
48 nxt_debug(task, "close(%FD)", file->fd);
49
50 if (close(file->fd) != 0) {
51 nxt_log(task, NXT_LOG_CRIT, "close(%FD, \"%FN\") failed %E",
52 file->fd, file->name, nxt_errno);
51 nxt_alert(task, "close(%FD, \"%FN\") failed %E",
52 file->fd, file->name, nxt_errno);
53 }
54}
55
56
57ssize_t
58nxt_file_write(nxt_file_t *file, const u_char *buf, size_t size,
59 nxt_off_t offset)
60{

--- 9 unchanged lines hidden (view full) ---

70
71 nxt_log_debug(thr->log, "pwrite(%FD, %p, %uz, %O): %z",
72 file->fd, buf, size, offset, n);
73
74 if (nxt_fast_path(n >= 0)) {
75 return n;
76 }
77
53 }
54}
55
56
57ssize_t
58nxt_file_write(nxt_file_t *file, const u_char *buf, size_t size,
59 nxt_off_t offset)
60{

--- 9 unchanged lines hidden (view full) ---

70
71 nxt_log_debug(thr->log, "pwrite(%FD, %p, %uz, %O): %z",
72 file->fd, buf, size, offset, n);
73
74 if (nxt_fast_path(n >= 0)) {
75 return n;
76 }
77
78 nxt_thread_log_error(NXT_LOG_CRIT,
79 "pwrite(%FD, \"%FN\", %p, %uz, %O) failed %E",
78 nxt_thread_log_alert("pwrite(%FD, \"%FN\", %p, %uz, %O) failed %E",
80 file->fd, file->name, buf, size,
81 offset, file->error);
82
83 return NXT_ERROR;
84}
85
86
87ssize_t

--- 11 unchanged lines hidden (view full) ---

99
100 nxt_log_debug(thr->log, "pread(%FD, %p, %uz, %O): %z",
101 file->fd, buf, size, offset, n);
102
103 if (nxt_fast_path(n >= 0)) {
104 return n;
105 }
106
79 file->fd, file->name, buf, size,
80 offset, file->error);
81
82 return NXT_ERROR;
83}
84
85
86ssize_t

--- 11 unchanged lines hidden (view full) ---

98
99 nxt_log_debug(thr->log, "pread(%FD, %p, %uz, %O): %z",
100 file->fd, buf, size, offset, n);
101
102 if (nxt_fast_path(n >= 0)) {
103 return n;
104 }
105
107 nxt_thread_log_error(NXT_LOG_CRIT,
108 "pread(%FD, \"%FN\", %p, %uz, %O) failed %E",
106 nxt_thread_log_alert("pread(%FD, \"%FN\", %p, %uz, %O) failed %E",
109 file->fd, file->name, buf, size,
110 offset, file->error);
111
112 return NXT_ERROR;
113}
114
115
116#if (NXT_HAVE_READAHEAD)

--- 11 unchanged lines hidden (view full) ---

128 nxt_thread_log_debug("fcntl(%FD, F_READAHEAD, %uz): %d",
129 file->fd, size, ret);
130
131 if (nxt_fast_path(ret != -1)) {
132 (void) nxt_file_read(file, &buf, 1, offset);
133 return;
134 }
135
107 file->fd, file->name, buf, size,
108 offset, file->error);
109
110 return NXT_ERROR;
111}
112
113
114#if (NXT_HAVE_READAHEAD)

--- 11 unchanged lines hidden (view full) ---

126 nxt_thread_log_debug("fcntl(%FD, F_READAHEAD, %uz): %d",
127 file->fd, size, ret);
128
129 if (nxt_fast_path(ret != -1)) {
130 (void) nxt_file_read(file, &buf, 1, offset);
131 return;
132 }
133
136 nxt_thread_log_error(NXT_LOG_CRIT,
137 "fcntl(%FD, \"%FN\", F_READAHEAD, %uz) failed %E",
134 nxt_thread_log_alert("fcntl(%FD, \"%FN\", F_READAHEAD, %uz) failed %E",
138 file->fd, file->name, size, nxt_errno);
139}
140
141#elif (NXT_HAVE_POSIX_FADVISE)
142
143/*
144 * POSIX_FADV_SEQUENTIAL
145 * Linux doubles the default readahead window size of a backing device

--- 20 unchanged lines hidden (view full) ---

166 nxt_thread_log_debug("posix_fadvise(%FD, \"%FN\", %O, %uz, %d): %d",
167 file->fd, file->name, offset, size,
168 POSIX_FADV_WILLNEED, err);
169
170 if (nxt_fast_path(err == 0)) {
171 return;
172 }
173
135 file->fd, file->name, size, nxt_errno);
136}
137
138#elif (NXT_HAVE_POSIX_FADVISE)
139
140/*
141 * POSIX_FADV_SEQUENTIAL
142 * Linux doubles the default readahead window size of a backing device

--- 20 unchanged lines hidden (view full) ---

163 nxt_thread_log_debug("posix_fadvise(%FD, \"%FN\", %O, %uz, %d): %d",
164 file->fd, file->name, offset, size,
165 POSIX_FADV_WILLNEED, err);
166
167 if (nxt_fast_path(err == 0)) {
168 return;
169 }
170
174 nxt_thread_log_error(NXT_LOG_CRIT,
175 "posix_fadvise(%FD, \"%FN\", %O, %uz, %d) failed %E",
171 nxt_thread_log_alert("posix_fadvise(%FD, \"%FN\", %O, %uz, %d) failed %E",
176 file->fd, file->name, offset, size,
177 POSIX_FADV_WILLNEED, err);
178}
179
180#elif (NXT_HAVE_RDAHEAD)
181
182/* MacOSX fcntl(F_RDAHEAD). */
183

--- 7 unchanged lines hidden (view full) ---

191
192 nxt_thread_log_debug("fcntl(%FD, F_RDAHEAD, 1): %d", file->fd, ret);
193
194 if (nxt_fast_path(ret != -1)) {
195 (void) nxt_file_read(file, &buf, 1, offset);
196 return;
197 }
198
172 file->fd, file->name, offset, size,
173 POSIX_FADV_WILLNEED, err);
174}
175
176#elif (NXT_HAVE_RDAHEAD)
177
178/* MacOSX fcntl(F_RDAHEAD). */
179

--- 7 unchanged lines hidden (view full) ---

187
188 nxt_thread_log_debug("fcntl(%FD, F_RDAHEAD, 1): %d", file->fd, ret);
189
190 if (nxt_fast_path(ret != -1)) {
191 (void) nxt_file_read(file, &buf, 1, offset);
192 return;
193 }
194
199 nxt_thread_log_error(NXT_LOG_CRIT,
200 "fcntl(%FD, \"%FN\", F_RDAHEAD, 1) failed %E",
195 nxt_thread_log_alert("fcntl(%FD, \"%FN\", F_RDAHEAD, 1) failed %E",
201 file->fd, file->name, nxt_errno);
202}
203
204#else
205
206void
207nxt_file_read_ahead(nxt_file_t *file, nxt_off_t offset, size_t size)
208{

--- 34 unchanged lines hidden (view full) ---

243 file->error = (n != 0) ? nxt_errno : 0;
244
245 nxt_thread_log_debug("fstat(%FD): %d", file->fd, n);
246
247 if (n == 0) {
248 return NXT_OK;
249 }
250
196 file->fd, file->name, nxt_errno);
197}
198
199#else
200
201void
202nxt_file_read_ahead(nxt_file_t *file, nxt_off_t offset, size_t size)
203{

--- 34 unchanged lines hidden (view full) ---

238 file->error = (n != 0) ? nxt_errno : 0;
239
240 nxt_thread_log_debug("fstat(%FD): %d", file->fd, n);
241
242 if (n == 0) {
243 return NXT_OK;
244 }
245
251 /* Use NXT_LOG_CRIT because fstat() error on open file is strange. */
246 /* Use NXT_LOG_ALERT because fstat() error on open file is strange. */
252
247
253 nxt_thread_log_error(NXT_LOG_CRIT, "fstat(%FD, \"%FN\") failed %E",
248 nxt_thread_log_alert("fstat(%FD, \"%FN\") failed %E",
254 file->fd, file->name, file->error);
255
256 return NXT_ERROR;
257 }
258}
259
260
261nxt_int_t

--- 63 unchanged lines hidden (view full) ---

325 int nb;
326
327 nb = 1;
328
329 if (nxt_fast_path(ioctl(fd, FIONBIO, &nb) != -1)) {
330 return NXT_OK;
331 }
332
249 file->fd, file->name, file->error);
250
251 return NXT_ERROR;
252 }
253}
254
255
256nxt_int_t

--- 63 unchanged lines hidden (view full) ---

320 int nb;
321
322 nb = 1;
323
324 if (nxt_fast_path(ioctl(fd, FIONBIO, &nb) != -1)) {
325 return NXT_OK;
326 }
327
333 nxt_log(task, NXT_LOG_CRIT, "ioctl(%d, FIONBIO) failed %E", fd, nxt_errno);
328 nxt_alert(task, "ioctl(%d, FIONBIO) failed %E", fd, nxt_errno);
334
335 return NXT_ERROR;
336
337}
338
339
340nxt_int_t
341nxt_fd_blocking(nxt_task_t *task, nxt_fd_t fd)
342{
343 int nb;
344
345 nb = 0;
346
347 if (nxt_fast_path(ioctl(fd, FIONBIO, &nb) != -1)) {
348 return NXT_OK;
349 }
350
329
330 return NXT_ERROR;
331
332}
333
334
335nxt_int_t
336nxt_fd_blocking(nxt_task_t *task, nxt_fd_t fd)
337{
338 int nb;
339
340 nb = 0;
341
342 if (nxt_fast_path(ioctl(fd, FIONBIO, &nb) != -1)) {
343 return NXT_OK;
344 }
345
351 nxt_log(task, NXT_LOG_CRIT, "ioctl(%d, !FIONBIO) failed %E", fd, nxt_errno);
346 nxt_alert(task, "ioctl(%d, !FIONBIO) failed %E", fd, nxt_errno);
352
353 return NXT_ERROR;
354}
355
356#else /* !(NXT_HAVE_FIONBIO) */
357
358nxt_int_t
359nxt_fd_nonblocking(nxt_task_t *task, nxt_fd_t fd)
360{
361 int flags;
362
363 flags = fcntl(fd, F_GETFL);
364
365 if (nxt_slow_path(flags == -1)) {
347
348 return NXT_ERROR;
349}
350
351#else /* !(NXT_HAVE_FIONBIO) */
352
353nxt_int_t
354nxt_fd_nonblocking(nxt_task_t *task, nxt_fd_t fd)
355{
356 int flags;
357
358 flags = fcntl(fd, F_GETFL);
359
360 if (nxt_slow_path(flags == -1)) {
366 nxt_log(task, NXT_LOG_CRIT, "fcntl(%d, F_GETFL) failed %E",
367 fd, nxt_errno);
361 nxt_alert(task, "fcntl(%d, F_GETFL) failed %E", fd, nxt_errno);
368 return NXT_ERROR;
369 }
370
371 flags |= O_NONBLOCK;
372
373 if (nxt_slow_path(fcntl(fd, F_SETFL, flags) == -1)) {
362 return NXT_ERROR;
363 }
364
365 flags |= O_NONBLOCK;
366
367 if (nxt_slow_path(fcntl(fd, F_SETFL, flags) == -1)) {
374 nxt_log(task, NXT_LOG_CRIT, "fcntl(%d, F_SETFL, O_NONBLOCK) failed %E",
375 fd, nxt_errno);
368 nxt_alert(task, "fcntl(%d, F_SETFL, O_NONBLOCK) failed %E",
369 fd, nxt_errno);
376 return NXT_ERROR;
377 }
378
379 return NXT_OK;
380}
381
382
383nxt_int_t
384nxt_fd_blocking(nxt_task_t *task, nxt_fd_t fd)
385{
386 int flags;
387
388 flags = fcntl(fd, F_GETFL);
389
390 if (nxt_slow_path(flags == -1)) {
370 return NXT_ERROR;
371 }
372
373 return NXT_OK;
374}
375
376
377nxt_int_t
378nxt_fd_blocking(nxt_task_t *task, nxt_fd_t fd)
379{
380 int flags;
381
382 flags = fcntl(fd, F_GETFL);
383
384 if (nxt_slow_path(flags == -1)) {
391 nxt_log(task, NXT_LOG_CRIT, "fcntl(%d, F_GETFL) failed %E",
392 fd, nxt_errno);
385 nxt_alert(task, "fcntl(%d, F_GETFL) failed %E", fd, nxt_errno);
393 return NXT_ERROR;
394 }
395
396 flags &= O_NONBLOCK;
397
398 if (nxt_slow_path(fcntl(fd, F_SETFL, flags) == -1)) {
386 return NXT_ERROR;
387 }
388
389 flags &= O_NONBLOCK;
390
391 if (nxt_slow_path(fcntl(fd, F_SETFL, flags) == -1)) {
399 nxt_log(task, NXT_LOG_CRIT, "fcntl(%d, F_SETFL, !O_NONBLOCK) failed %E",
400 fd, nxt_errno);
392 nxt_alert(task, "fcntl(%d, F_SETFL, !O_NONBLOCK) failed %E",
393 fd, nxt_errno);
401 return NXT_ERROR;
402 }
403
404 return NXT_OK;
405}
406
407#endif /* NXT_HAVE_FIONBIO */
408

--- 44 unchanged lines hidden (view full) ---

453
454
455void
456nxt_fd_close(nxt_fd_t fd)
457{
458 nxt_thread_log_debug("close(%FD)", fd);
459
460 if (nxt_slow_path(close(fd) != 0)) {
394 return NXT_ERROR;
395 }
396
397 return NXT_OK;
398}
399
400#endif /* NXT_HAVE_FIONBIO */
401

--- 44 unchanged lines hidden (view full) ---

446
447
448void
449nxt_fd_close(nxt_fd_t fd)
450{
451 nxt_thread_log_debug("close(%FD)", fd);
452
453 if (nxt_slow_path(close(fd) != 0)) {
461 nxt_thread_log_error(NXT_LOG_CRIT, "close(%FD) failed %E",
462 fd, nxt_errno);
454 nxt_thread_log_alert("close(%FD) failed %E", fd, nxt_errno);
463 }
464}
465
466
467/*
468 * nxt_file_redirect() redirects the file to the fd descriptor.
469 * Then the fd descriptor is closed.
470 */
471
472nxt_int_t
473nxt_file_redirect(nxt_file_t *file, nxt_fd_t fd)
474{
475 nxt_thread_log_debug("dup2(%FD, %FD, \"%FN\")", fd, file->fd, file->name);
476
477 if (dup2(fd, file->fd) == -1) {
455 }
456}
457
458
459/*
460 * nxt_file_redirect() redirects the file to the fd descriptor.
461 * Then the fd descriptor is closed.
462 */
463
464nxt_int_t
465nxt_file_redirect(nxt_file_t *file, nxt_fd_t fd)
466{
467 nxt_thread_log_debug("dup2(%FD, %FD, \"%FN\")", fd, file->fd, file->name);
468
469 if (dup2(fd, file->fd) == -1) {
478 nxt_thread_log_error(NXT_LOG_CRIT, "dup2(%FD, %FD, \"%FN\") failed %E",
470 nxt_thread_log_alert("dup2(%FD, %FD, \"%FN\") failed %E",
479 fd, file->fd, file->name, nxt_errno);
480 return NXT_ERROR;
481 }
482
483 if (close(fd) != 0) {
471 fd, file->fd, file->name, nxt_errno);
472 return NXT_ERROR;
473 }
474
475 if (close(fd) != 0) {
484 nxt_thread_log_error(NXT_LOG_CRIT, "close(%FD, \"%FN\") failed %E",
476 nxt_thread_log_alert("close(%FD, \"%FN\") failed %E",
485 fd, file->name, nxt_errno);
486 return NXT_ERROR;
487 }
488
489 return NXT_OK;
490}
491
492

--- 4 unchanged lines hidden (view full) ---

497{
498 nxt_thread_log_debug("dup2(%FD, %FD, \"%FN\")",
499 file->fd, STDERR_FILENO, file->name);
500
501 if (dup2(file->fd, STDERR_FILENO) != -1) {
502 return NXT_OK;
503 }
504
477 fd, file->name, nxt_errno);
478 return NXT_ERROR;
479 }
480
481 return NXT_OK;
482}
483
484

--- 4 unchanged lines hidden (view full) ---

489{
490 nxt_thread_log_debug("dup2(%FD, %FD, \"%FN\")",
491 file->fd, STDERR_FILENO, file->name);
492
493 if (dup2(file->fd, STDERR_FILENO) != -1) {
494 return NXT_OK;
495 }
496
505 nxt_thread_log_error(NXT_LOG_CRIT, "dup2(%FD, %FD, \"%FN\") failed %E",
497 nxt_thread_log_alert("dup2(%FD, %FD, \"%FN\") failed %E",
506 file->fd, STDERR_FILENO, file->name, nxt_errno);
507
508 return NXT_ERROR;
509}
510
511
512nxt_int_t
513nxt_stderr_start(void)

--- 33 unchanged lines hidden (view full) ---

547}
548
549
550nxt_int_t
551nxt_pipe_create(nxt_task_t *task, nxt_fd_t *pp, nxt_bool_t nbread,
552 nxt_bool_t nbwrite)
553{
554 if (pipe(pp) != 0) {
498 file->fd, STDERR_FILENO, file->name, nxt_errno);
499
500 return NXT_ERROR;
501}
502
503
504nxt_int_t
505nxt_stderr_start(void)

--- 33 unchanged lines hidden (view full) ---

539}
540
541
542nxt_int_t
543nxt_pipe_create(nxt_task_t *task, nxt_fd_t *pp, nxt_bool_t nbread,
544 nxt_bool_t nbwrite)
545{
546 if (pipe(pp) != 0) {
555 nxt_log(task, NXT_LOG_CRIT, "pipe() failed %E", nxt_errno);
547 nxt_alert(task, "pipe() failed %E", nxt_errno);
556
557 return NXT_ERROR;
558 }
559
560 nxt_debug(task, "pipe(): %FD:%FD", pp[0], pp[1]);
561
562 if (nbread) {
563 if (nxt_fd_nonblocking(task, pp[0]) != NXT_OK) {

--- 12 unchanged lines hidden (view full) ---

576
577
578void
579nxt_pipe_close(nxt_task_t *task, nxt_fd_t *pp)
580{
581 nxt_debug(task, "pipe close(%FD:%FD)", pp[0], pp[1]);
582
583 if (close(pp[0]) != 0) {
548
549 return NXT_ERROR;
550 }
551
552 nxt_debug(task, "pipe(): %FD:%FD", pp[0], pp[1]);
553
554 if (nbread) {
555 if (nxt_fd_nonblocking(task, pp[0]) != NXT_OK) {

--- 12 unchanged lines hidden (view full) ---

568
569
570void
571nxt_pipe_close(nxt_task_t *task, nxt_fd_t *pp)
572{
573 nxt_debug(task, "pipe close(%FD:%FD)", pp[0], pp[1]);
574
575 if (close(pp[0]) != 0) {
584 nxt_log(task, NXT_LOG_CRIT, "pipe close(%FD) failed %E",
585 pp[0], nxt_errno);
576 nxt_alert(task, "pipe close(%FD) failed %E", pp[0], nxt_errno);
586 }
587
588 if (close(pp[1]) != 0) {
577 }
578
579 if (close(pp[1]) != 0) {
589 nxt_log(task, NXT_LOG_CRIT, "pipe close(%FD) failed %E",
590 pp[1], nxt_errno);
580 nxt_alert(task, "pipe close(%FD) failed %E", pp[1], nxt_errno);
591 }
592}
593
594
595size_t
596nxt_dir_current(char *buf, size_t len)
597{
598 if (nxt_fast_path(getcwd(buf, len) != NULL)) {
599 return nxt_strlen(buf);
600 }
601
602 nxt_thread_log_alert("getcwd(%uz) failed %E", len, nxt_errno);
603
604 return 0;
605}
581 }
582}
583
584
585size_t
586nxt_dir_current(char *buf, size_t len)
587{
588 if (nxt_fast_path(getcwd(buf, len) != NULL)) {
589 return nxt_strlen(buf);
590 }
591
592 nxt_thread_log_alert("getcwd(%uz) failed %E", len, nxt_errno);
593
594 return 0;
595}