-/*
- * $Id$
- */
-
/*
* slcand.c - userspace daemon for serial line CAN interface driver SLCAN
*
* A copy of the license is included in the section entitled "GNU
* Free Documentation License".
*
- * Send feedback to <socketcan-users@lists.berlios.de>
+ * Send feedback to <linux-can@vger.kernel.org>
*
*/
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
#include <fcntl.h>
#include <syslog.h>
#include <errno.h>
#include <pwd.h>
#include <signal.h>
+#include <sys/socket.h>
#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <net/if.h>
/* default slcan line discipline since Kernel 2.6.25 */
/* Change this to the user under which to run */
#define RUN_AS_USER "root"
+/* The length of ttypath buffer */
+#define TTYPATH_LENGTH 64
+
+/* The length of pidfile name buffer */
+#define PIDFILE_LENGTH 64
+
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
}
}
-static void daemonize (const char *lockfile, char *tty, char *name)
+static void daemonize (const char *lockfile, char *tty)
{
pid_t pid, sid, parent;
int lfp = -1;
FILE * pFile;
char const *pidprefix = "/var/run/";
char const *pidsuffix = ".pid";
- char *pidfile;
- pidfile = malloc((strlen(pidprefix) +strlen(DAEMON_NAME) + strlen(tty) + strlen(pidsuffix) + 1) * sizeof(char));
- sprintf(pidfile, "%s%s-%s%s", pidprefix, DAEMON_NAME, tty, pidsuffix);
+ char pidfile[PIDFILE_LENGTH];
+
+ snprintf(pidfile, PIDFILE_LENGTH, "%s%s-%s%s", pidprefix, DAEMON_NAME, tty, pidsuffix);
/* already a daemon */
if (getppid () == 1)
}
pFile = fopen (pidfile,"w");
- if (pFile < 0)
+ if (pFile == NULL)
{
syslog (LOG_ERR, "unable to create pid file %s, code=%d (%s)",
pidfile, errno, strerror (errno));
int main (int argc, char *argv[])
{
char *tty = NULL;
- char *ttypath;
+ char ttypath[TTYPATH_LENGTH];
char const *devprefix = "/dev/";
char *name = NULL;
char buf[IFNAMSIZ+1];
if (pch == tty) {
print_usage(argv[0]);
}
- ttypath = malloc((strlen(devprefix) + strlen(tty)) * sizeof(char));
- sprintf (ttypath, "%s%s", devprefix, tty);
+
+ snprintf (ttypath, TTYPATH_LENGTH, "%s%s", devprefix, tty);
syslog (LOG_INFO, "starting on TTY device %s", ttypath);
/* Daemonize */
- daemonize ("/var/lock/" DAEMON_NAME, tty, name);
+ daemonize ("/var/lock/" DAEMON_NAME, tty);
/* Now we are a daemon -- do the work for which we were paid */
int fd;