LCOV - code coverage report
Current view: top level - lib/process - pidfile.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 8 12 66.7 %
Date: 2021-11-24 03:28:48 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* Copyright (c) 2003-2004, Roger Dingledine
       2             :  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
       3             :  * Copyright (c) 2007-2021, The Tor Project, Inc. */
       4             : /* See LICENSE for licensing information */
       5             : 
       6             : /**
       7             :  * \file pidfile.c
       8             :  * \brief Record this process's PID to disk.
       9             :  **/
      10             : 
      11             : #include "orconfig.h"
      12             : #include "lib/process/pidfile.h"
      13             : 
      14             : #include "lib/log/log.h"
      15             : 
      16             : #ifdef HAVE_SYS_TYPES_H
      17             : #include <sys/types.h>
      18             : #endif
      19             : #ifdef HAVE_UNISTD_H
      20             : #include <unistd.h>
      21             : #endif
      22             : 
      23             : #include <errno.h>
      24             : #include <stdio.h>
      25             : #include <string.h>
      26             : 
      27             : /** Write the current process ID, followed by NL, into <b>filename</b>.
      28             :  * Return 0 on success, -1 on failure.
      29             :  */
      30             : int
      31           1 : write_pidfile(const char *filename)
      32             : {
      33           1 :   FILE *pidfile;
      34             : 
      35           1 :   if ((pidfile = fopen(filename, "w")) == NULL) {
      36           0 :     log_warn(LD_FS, "Unable to open \"%s\" for writing: %s", filename,
      37             :              strerror(errno));
      38           0 :     return -1;
      39             :   } else {
      40             : #ifdef _WIN32
      41             :     int pid = (int)_getpid();
      42             : #else
      43           1 :     int pid = (int)getpid();
      44             : #endif
      45           1 :     int rv = 0;
      46           1 :     if (fprintf(pidfile, "%d\n", pid) < 0)
      47           0 :       rv = -1;
      48           1 :     if (fclose(pidfile) < 0)
      49           0 :       rv = -1;
      50           1 :     return rv;
      51             :   }
      52             : }

Generated by: LCOV version 1.14