--- freem/src/fmadm.c 2025/04/03 01:41:02 1.29
+++ freem/src/fmadm.c 2025/04/15 18:19:40 1.40
@@ -1,5 +1,5 @@
/*
- * $Id: fmadm.c,v 1.29 2025/04/03 01:41:02 snw Exp $
+ * $Id: fmadm.c,v 1.40 2025/04/15 18:19:40 snw Exp $
* FreeM Administration Tool
*
*
@@ -24,6 +24,39 @@
* along with FreeM. If not, see .
*
* $Log: fmadm.c,v $
+ * Revision 1.40 2025/04/15 18:19:40 snw
+ * Further attempts to fix FreeBSD
+ *
+ * Revision 1.39 2025/04/15 16:49:36 snw
+ * Make use of logprintf throughout codebase
+ *
+ * Revision 1.38 2025/04/15 02:24:43 snw
+ * Improve FreeM logging capabilities
+ *
+ * Revision 1.37 2025/04/14 19:20:20 snw
+ * Create LOCALSTATEDIR during fmadm configure if needed
+ *
+ * Revision 1.36 2025/04/13 15:12:21 snw
+ * Fix transaction checkpoints on OS/2 [CLOSES #34]
+ *
+ * Revision 1.35 2025/04/13 04:22:43 snw
+ * Fix snprintf calls
+ *
+ * Revision 1.34 2025/04/10 15:31:25 snw
+ * Attempt to fix DosCopy calls for OS/2
+ *
+ * Revision 1.33 2025/04/10 01:24:38 snw
+ * Remove C++ style comments
+ *
+ * Revision 1.32 2025/04/09 19:52:02 snw
+ * Eliminate as many warnings as possible while building with -Wall
+ *
+ * Revision 1.31 2025/04/04 19:43:18 snw
+ * Switch to using environment catalog to determine user and group for environment, and remove -u and -g flags from freem
+ *
+ * Revision 1.30 2025/04/03 20:48:14 snw
+ * Improve daemon error diagnostics and bump to 0.63.0-rc3
+ *
* Revision 1.29 2025/04/03 01:41:02 snw
* New features frozen; prepare 0.63.0-rc1
*
@@ -110,14 +143,14 @@
#include
#include
#include
+#if defined(__OS2__)
+# include
+#endif
#include "config.h"
#include "transact.h"
#include "namespace.h"
#include "fs.h"
-
-#if defined(__OS2__)
-# include
-#endif
+#include "log.h"
#ifdef HAVE_LIBREADLINE
# if defined(HAVE_READLINE_READLINE_H)
@@ -178,6 +211,7 @@ extern char env_config_file[4096];
extern char env_user[255];
extern char env_group[255];
extern char env_enabled[10];
+extern char shm_env[255];
int fm_shell(void);
void fm_checkperms(void);
@@ -345,26 +379,28 @@ int main (int argc, char **argv)
if (obj != OBJ_DAEMON) {
if (strlen (env_user) == 0) {
- snprintf (env_user, 6, "freem");
+ snprintf (env_user, sizeof (env_user) - 1, "freem");
}
if (strlen (env_group) == 0) {
- snprintf (env_group, 6, "freem");
+ snprintf (env_group, sizeof (env_group) - 1, "freem");
}
- if (!fma_explicit_environment) snprintf (fma_environment, 4096, "DEFAULT");
- if (!fma_explicit_namespace) snprintf (fma_namespace, 4096, "SYSTEM");
+ if (!fma_explicit_environment) snprintf (fma_environment, sizeof (fma_environment) - 1, "DEFAULT");
+ if (!fma_explicit_namespace) snprintf (fma_namespace, sizeof (fma_namespace) - 1, "SYSTEM");
- snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, fma_environment);
+ snprintf (config_file, sizeof (config_file) - 1, "%s/freem/%s/freem.conf", SYSCONFDIR, fma_environment);
}
- snprintf (env_config_file, 4096, "%s/freem/env.conf", SYSCONFDIR);
+ snprintf (env_config_file, sizeof (env_config_file) - 1, "%s/freem/env.conf", SYSCONFDIR);
/*
printf ("action = '%s' object = '%s' environment = '%s' namespace = '%s' config_file = '%s' base_arg = '%d' next argument = '%s'\n", action, obj_str, fma_environment, fma_namespace, config_file, base_arg, argv[base_arg]);
exit(1);
*/
+ strncpy (shm_env, fma_environment, sizeof (shm_env) - 1);
+ init_log ();
/* override for fmadm configure and daemon stuff */
if (got_action) {
@@ -597,10 +633,7 @@ int fm_shell (void)
char *cmdt = (char *) malloc (65535 * sizeof (char));
char *result = (char *) malloc (65535 * sizeof (char));
- /*
- strcpy (fma_namespace, "SYSTEM");
- set_namespace (fma_namespace, FALSE);
- */
+ obj = 0;
snprintf (fma_prompt, STRLEN - 1, "fmadm [%s]> ", fma_namespace);
@@ -705,7 +738,6 @@ int fm_shell (void)
i = 0;
while ((result = strtok (NULL, " ")) != NULL) {
- // printf ("%d = %s\n", i, result);
strcpy (args[i++], result);
}
@@ -1165,11 +1197,9 @@ long fm_get_pid (char *env)
{
char pid_file[4096];
char tmp_pid[255];
- long res;
-
FILE *fp;
- snprintf (pid_file, 4095, "%s/freem/run/%s.pid", LOCALSTATEDIR, env);
+ snprintf (pid_file, sizeof (pid_file) - 1, "%s/freem/run/%s.pid", LOCALSTATEDIR, env);
if ((fp = fopen (pid_file, "r")) != NULL) {
if (fgets (tmp_pid, 255, fp)) {
@@ -1192,7 +1222,7 @@ int fm_validate_environment (char *env)
char line[255];
char chkline[255];
- snprintf (chkline, 254, "[%s]\n", env);
+ snprintf (chkline, sizeof (chkline) - 1, "[%s]\n", env);
if ((fp = fopen (env_config_file, "r")) == NULL) {
fprintf (stderr, "fmadm: could not open %s [%s]\n", env_config_file, strerror (errno));
@@ -1210,7 +1240,7 @@ int fm_validate_environment (char *env)
return FALSE;
}
-int fm_start_environment (char *env, char *e_user, char *e_grp)
+int fm_start_environment (char *env)
{
char basecmd[255];
char cmd[4096];
@@ -1220,15 +1250,15 @@ int fm_start_environment (char *env, cha
}
#if !defined(__OS2__)
- snprintf (basecmd, 254, "%s/bin/freem", PREFIX);
+ snprintf (basecmd, sizeof (basecmd) - 1, "%s/bin/freem", PREFIX);
#else
- snprintf (basecmd, 254, "%s/bin/freemd.exe", PREFIX);
+ snprintf (basecmd, sizeof (basecmd) - 1, "%s/bin/freemd.exe", PREFIX);
#endif
#if !defined(__OS2__)
- snprintf (cmd, 4095, "%s -d -e %s -u %s -g %s", basecmd, env, e_user, e_grp);
+ snprintf (cmd, sizeof (basecmd) - 1, "%s -d -e %s", basecmd, env);
#else
- sprintf (cmd, 4095, "%s -d -k -e %s -u %s -g %s", basecmd, env, e_user, e_grp);
+ sprintf (cmd, 4095, "%s -d -k -e %s", basecmd, env);
#endif
system (cmd);
@@ -1305,7 +1335,9 @@ int fm_daemonctl (short action, short ob
char *savptr;
int result;
long epid;
+ int retval;
+ retval = 0;
switch (action) {
case ACT_START:
@@ -1340,7 +1372,7 @@ int fm_daemonctl (short action, short ob
if (line[0] == '[') {
strncpy (env, &(line[1]), 255);
env[strlen (env) - 2] = '\0';
- snprintf (tmps, 255, "%s,", env);
+ snprintf (tmps, sizeof (tmps) - 1, "%s,", env);
strncat (envlist, tmps, BIGSTR - 1);
}
}
@@ -1384,7 +1416,7 @@ int fm_daemonctl (short action, short ob
switch (action) {
case ACT_START:
- result = fm_start_environment (cur_env, e_user, e_grp);
+ result = fm_start_environment (cur_env);
if (result == TRUE) {
fprintf (stderr, "[OK]\n");
}
@@ -1400,21 +1432,24 @@ int fm_daemonctl (short action, short ob
}
else {
fprintf (stderr, "[FAIL]\n");
+ retval++;
}
break;
case ACT_RESTART:
if (fm_stop_environment (cur_env) == TRUE) {
- result = fm_start_environment (cur_env, e_user, e_grp);
+ result = fm_start_environment (cur_env);
if (result == TRUE) {
fprintf (stderr, "[OK]\n");
}
else {
fprintf (stderr, "[FAIL]\n");
+ retval++;
}
}
else {
fprintf (stderr, "[FAIL]\n");
+ retval++;
}
break;
@@ -1422,7 +1457,7 @@ int fm_daemonctl (short action, short ob
case ACT_STATUS:
epid = fm_get_pid (cur_env);
if (epid > -1) {
- fprintf (stderr, " - %s environment daemon running as pid %d\n", cur_env, epid);
+ fprintf (stderr, " - %s environment daemon running as pid %ld\n", cur_env, epid);
}
else {
fprintf (stderr, " - %s environment daemon does not appear to be running\n", cur_env);
@@ -1435,7 +1470,7 @@ int fm_daemonctl (short action, short ob
} while ((cur_env = strtok_r (NULL, ",", &savptr)) != NULL);
free (envlist);
- exit (0);
+ exit (retval);
} /* fm_daemonctl() */
@@ -1448,7 +1483,6 @@ void fm_checkperms(void)
void fm_reconfigure(void)
{
char config_backup[4096];
- char vers[4096];
int retval;
@@ -1457,7 +1491,7 @@ void fm_reconfigure(void)
exit (1);
}
- snprintf (config_backup, 4095, "%s.orig", config_file);
+ snprintf (config_backup, sizeof (config_backup) - 1, "%s.orig", config_file);
fprintf (stderr, "fmadm: reconfiguring FreeM with system defaults for %s...\n", FREEM_VERSION_CSTR);
fprintf (stderr, "fmadm: backing up %s to %s...\t", config_file, config_backup);
@@ -1465,7 +1499,7 @@ void fm_reconfigure(void)
#if !defined(__OS2__)
retval = cp (config_backup, config_file);
#else
- retval = DosCopy (config_file, config_backup);
+ retval = DosCopy (config_file, config_backup, 1);
#endif
if (retval == 0) {
@@ -1488,7 +1522,7 @@ void update_conf (char *file, char *sect
char old_value[255];
char tbuf[255];
- snprintf (tbuf, 254, "%s.%s", section, key);
+ snprintf (tbuf, sizeof (tbuf) - 1, "%s.%s", section, key);
read_profile_string (file, section, key, old_value);
if (strcmp (old_value, new_value) != 0) {
@@ -1504,6 +1538,7 @@ void fm_configure (void)
{
char rundir[4096];
char varbase[4096];
+ char vardir[4096];
char sysrtn[4096];
char sysgbl[4096];
char usrrtn[4096];
@@ -1515,7 +1550,8 @@ void fm_configure (void)
char jnlhostid[4096];
char jnlcut[4096];
char hostid[4096];
-
+ char logdir[4096];
+
char confbase[4096];
char envbase[4096];
@@ -1527,7 +1563,6 @@ void fm_configure (void)
int reconfigure = FALSE;
struct stat etcstat;
- int stat_result;
DIR *dir;
struct dirent *ent;
@@ -1538,40 +1573,37 @@ void fm_configure (void)
char *groupname = env_group;
#if !defined(__OS2__)
+ struct group *d_grp;
+ struct passwd *d_user;
+
if (geteuid () != 0) {
fprintf (stderr, "fmadm: not superuser\n");
exit (1);
}
- struct group *d_grp;
- struct passwd *d_user;
- gid_t d_gid;
- uid_t d_uid;
-
if ((d_grp = getgrnam (groupname)) == NULL) {
fprintf (stderr, "fmadm: '%s' group must exist before configuring\n", groupname);
exit (1);
}
- d_gid = d_grp->gr_gid;
-
if ((d_user = getpwnam (username)) == NULL) {
fprintf (stderr, "fmadm: '%s' user must exist before configuring\n", username);
exit (1);
}
- d_uid = d_user->pw_uid;
#endif
-
- snprintf (varbase, 4095, "%s/freem", LOCALSTATEDIR);
- snprintf (rundir, 4095, "%s/freem/run", LOCALSTATEDIR);
- snprintf (sysrtn, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
- snprintf (sysgbl, 4095, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);
- snprintf (usrrtn, 4095, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);
- snprintf (usrgbl, 4095, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);
- snprintf (jnldir, 4095, "%s/freem/%s/journals", LOCALSTATEDIR, fma_environment);
- snprintf (jnlfile, 4095, "%s/freem_journal_%s.dat", jnldir, fma_environment);
- snprintf (jnlmode, 3, "on");
- snprintf (jnlhostid, 4095, "DEFAULT");
- snprintf (jnlcut, 4095, "4294967000");
+
+ snprintf (logdir, sizeof (logdir) - 1, "/var/log/freem");
+ snprintf (vardir, sizeof (vardir) - 1, "%s", LOCALSTATEDIR);
+ snprintf (varbase, sizeof (varbase) - 1, "%s/freem", LOCALSTATEDIR);
+ snprintf (rundir, sizeof (rundir) - 1, "%s/freem/run", LOCALSTATEDIR);
+ snprintf (sysrtn, sizeof (sysrtn) - 1, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
+ snprintf (sysgbl, sizeof (sysgbl) - 1, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);
+ snprintf (usrrtn, sizeof (usrrtn) - 1, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);
+ snprintf (usrgbl, sizeof (usrgbl) - 1, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);
+ snprintf (jnldir, sizeof (jnldir) - 1, "%s/freem/%s/journals", LOCALSTATEDIR, fma_environment);
+ snprintf (jnlfile, sizeof (jnlfile) - 1, "%s/freem_journal_%s.dat", jnldir, fma_environment);
+ snprintf (jnlmode, sizeof (jnlmode) - 1, "on");
+ snprintf (jnlhostid, sizeof (jnlhostid) - 1, "DEFAULT");
+ snprintf (jnlcut, sizeof (jnlcut) - 1, "4294967000");
if (geteuid () != 0) {
fprintf (stderr, "fmadm: not superuser\n");
@@ -1585,18 +1617,18 @@ void fm_configure (void)
gethostname (hostid, 4095);
uuid_v4 (buf);
- snprintf (jnlhostid, 4095, "%s:%s", hostid, buf);
- snprintf (confbase, 4095, "%s/freem", SYSCONFDIR);
- snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, fma_environment);
- snprintf (nsbase, 4095, "%s/freem/%s", LOCALSTATEDIR, fma_environment);
+ snprintf (jnlhostid, sizeof (jnlhostid) - 1, "%s:%s", hostid, buf);
+ snprintf (confbase, sizeof (confbase) - 1, "%s/freem", SYSCONFDIR);
+ snprintf (envbase, sizeof (envbase) - 1, "%s/freem/%s", SYSCONFDIR, fma_environment);
+ snprintf (nsbase, sizeof (nsbase) - 1, "%s/freem/%s", LOCALSTATEDIR, fma_environment);
#if defined(__OS2__)
{
char srcfile[PATHLEN];
char dstfile[PATHLEN];
- snprintf (srcfile, PATHLEN, "%s/bin/freem.exe", PREFIX);
- snprintf (dstfile, PATHLEN, "%s/bin/freemd.exe", PREFIX);
+ snprintf (srcfile, PATHLEN - 1, "%s/bin/freem.exe", PREFIX);
+ snprintf (dstfile, PATHLEN - 1, "%s/bin/freemd.exe", PREFIX);
unlink (dstfile);
@@ -1627,6 +1659,12 @@ void fm_configure (void)
}
/* check for existence of needed directories */
+ if (stat (logdir, &etcstat) == -1) {
+ fprintf (stderr, "fmadm: creating %s [logdir]\n", logdir);
+ mkdir (logdir, 0775);
+ set_permissions (logdir, username, groupname, 0775);
+ }
+
if (stat (SYSCONFDIR, &etcstat) == -1) {
fprintf (stderr, "fmadm: creating %s [SYSCONFDIR]\n", SYSCONFDIR);
mkdir (SYSCONFDIR, 0775);
@@ -1639,6 +1677,12 @@ void fm_configure (void)
set_permissions (confbase, username, groupname, 0775);
}
+ if (stat (vardir, &etcstat) == -1) {
+ fprintf (stderr, "fmadm: creating %s [vardir]\n", vardir);
+ mkdir (vardir, 0775);
+ set_permissions (vardir, username, groupname, 0775);
+ }
+
if (stat (varbase, &etcstat) == -1) {
fprintf (stderr, "fmadm: creating %s [varbase]\n", varbase);
mkdir (varbase, 0775);
@@ -1670,8 +1714,8 @@ void fm_configure (void)
}
- snprintf (src_dir, 4095, "%s/freem/mlib", DATADIR);
- snprintf (dest_dir, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
+ snprintf (src_dir, sizeof (src_dir) - 1, "%s/freem/mlib", DATADIR);
+ snprintf (dest_dir, sizeof (dest_dir) - 1, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
if (reconfigure == FALSE) {
fprintf (stderr, "fmadm: populating new environment '%s'\n", fma_environment);
@@ -1680,27 +1724,27 @@ void fm_configure (void)
fprintf (stderr, "fmadm: upgrading environment '%s'\n", fma_environment);
}
- snprintf (buf, 4095, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
- snprintf (buf, 4095, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
- snprintf (buf, 4095, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/SYSTEM/routines", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
- snprintf (buf, 4095, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/USER/globals", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
- snprintf (buf, 4095, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/SYSTEM/globals", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
- snprintf (buf, 4095, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/USER/routines", LOCALSTATEDIR, fma_environment);
mkdir (buf, 0775);
set_permissions (buf, username, groupname, 0775);
@@ -1717,8 +1761,8 @@ void fm_configure (void)
if ((strcmp (ent->d_name, ".") != 0) && (strcmp (ent->d_name, "..") != 0)) {
- snprintf (infile, 4095, "%s/%s", src_dir, ent->d_name);
- snprintf (outfile, 4095, "%s/%s", dest_dir, ent->d_name);
+ snprintf (infile, sizeof (infile) - 1, "%s/%s", src_dir, ent->d_name);
+ snprintf (outfile, sizeof (outfile) - 1, "%s/%s", dest_dir, ent->d_name);
if (stat (outfile, &etcstat) == 0) {
unlink (outfile);
@@ -1748,32 +1792,42 @@ void fm_configure (void)
fprintf (stderr, "Creating %s... ", env_config_file);
- snprintf (buf, 4095, "[%s]", fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "[%s]", fma_environment);
+ fm_write (fp, buf);
+
+ snprintf (buf, sizeof (buf) - 1, "user=%s", env_user);
fm_write (fp, buf);
- snprintf (buf, 4095, "user=%s", env_user);
+ snprintf (buf, sizeof (buf) - 1, "group=%s", env_group);
fm_write (fp, buf);
- snprintf (buf, 4095, "group=%s", env_group);
+ snprintf (buf, sizeof (buf) - 1, "enabled=%s", env_enabled);
fm_write (fp, buf);
- snprintf (buf, 4095, "enabled=%s", env_enabled);
+ snprintf (buf, sizeof (buf) - 1, "env_path=%s/freem/%s", LOCALSTATEDIR, fma_environment);
+ fm_write (fp, buf);
+
+ snprintf (buf, sizeof (buf) - 1, "log_threshold_file=info");
fm_write (fp, buf);
- snprintf (buf, 4095, "env_path=%s/freem/%s", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "log_threshold_syslog=info");
+ fm_write (fp, buf);
+
+ snprintf (buf, sizeof (buf) - 1, "log_threshold_stderr=warning");
fm_write (fp, buf);
fclose (fp);
fprintf (stderr, "[OK]\n");
}
else {
- char modtmp[255];
-
fprintf (stderr, "\nUpdating %s: \n", env_config_file);
update_conf (env_config_file, fma_environment, "user", env_user);
update_conf (env_config_file, fma_environment, "group", env_group);
update_conf (env_config_file, fma_environment, "enabled", env_enabled);
+ update_conf (env_config_file, fma_environment, "log_threshold_file", "info");
+ update_conf (env_config_file, fma_environment, "log_threshold_syslog", "info");
+ update_conf (env_config_file, fma_environment, "log_threshold_stderr", "warning");
}
if (reconfigure == FALSE) {
@@ -1781,46 +1835,46 @@ void fm_configure (void)
fprintf (stderr, "Creating %s... ", config_file);
- snprintf (buf, 4095, "[SYSTEM]");
+ snprintf (buf, sizeof (buf) - 1, "[SYSTEM]");
fm_write (fp, buf);
- snprintf (buf, 4095, "root=%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "root=%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
fm_write (fp, buf);
- snprintf (buf, 4095, "routines_path=%s", sysrtn);
+ snprintf (buf, sizeof (buf) - 1, "routines_path=%s", sysrtn);
fm_write (fp, buf);
- snprintf (buf, 4095, "globals_path=%s", sysgbl);
+ snprintf (buf, sizeof (buf) - 1, "globals_path=%s", sysgbl);
fm_write (fp, buf);
- snprintf (buf, 4095, "journal_file=%s", jnlfile);
+ snprintf (buf, sizeof (buf) - 1, "journal_file=%s", jnlfile);
fm_write (fp, buf);
- snprintf (buf, 4095, "journal_mode=%s", jnlmode);
+ snprintf (buf, sizeof (buf) - 1, "journal_mode=%s", jnlmode);
fm_write (fp, buf);
- snprintf (buf, 4095, "journal_host_id=%s", jnlhostid);
+ snprintf (buf, sizeof (buf) - 1, "journal_host_id=%s", jnlhostid);
fm_write (fp, buf);
- snprintf (buf, 4095, "journal_cut_threshold=%s", jnlcut);
+ snprintf (buf, sizeof (buf) - 1, "journal_cut_threshold=%s", jnlcut);
fm_write (fp, buf);
- snprintf (buf, 4095, "zdate_format=%%x");
+ snprintf (buf, sizeof (buf) - 1, "zdate_format=%%x");
fm_write (fp, buf);
- snprintf (buf, 4095, "ztime_format=%%X");
+ snprintf (buf, sizeof (buf) - 1, "ztime_format=%%X");
fm_write (fp, buf);
- snprintf (buf, 4095, "\n[USER]");
+ snprintf (buf, sizeof (buf) - 1, "\n[USER]");
fm_write (fp, buf);
- snprintf (buf, 4095, "root=%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "root=%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
fm_write (fp, buf);
- snprintf (buf, 4095, "routines_path=%s", usrrtn);
+ snprintf (buf, sizeof (buf) - 1, "routines_path=%s", usrrtn);
fm_write (fp, buf);
- snprintf (buf, 4095, "globals_path=%s", usrgbl);
+ snprintf (buf, sizeof (buf) - 1, "globals_path=%s", usrgbl);
fm_write (fp, buf);
fclose (fp);
@@ -1836,7 +1890,7 @@ void fm_configure (void)
/* existing configuration */
fprintf (stderr, "\nUpdating environment configuration for %s:\n", fma_environment);
- snprintf (buf, 4095, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/SYSTEM", LOCALSTATEDIR, fma_environment);
update_conf (config_file, "SYSTEM", "root", buf);
update_conf (config_file, "SYSTEM", "routines_path", sysrtn);
update_conf (config_file, "SYSTEM", "globals_path", sysgbl);
@@ -1845,14 +1899,14 @@ void fm_configure (void)
update_conf (config_file, "SYSTEM", "journal_host_id", tmpsd);
update_conf (config_file, "SYSTEM", "journal_cut_threshold", jnlcut);
- snprintf (buf, 4095, "%%x");
+ snprintf (buf, sizeof (buf) - 1, "%%x");
update_conf (config_file, "SYSTEM", "zdate_format", buf);
- snprintf (buf, 4095, "%%X");
+ snprintf (buf, sizeof (buf) - 1, "%%X");
update_conf (config_file, "SYSTEM", "ztime_format", buf);
/* USER */
- snprintf (buf, 4095, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
+ snprintf (buf, sizeof (buf) - 1, "%s/freem/%s/USER", LOCALSTATEDIR, fma_environment);
update_conf (config_file, "USER", "root", buf);
update_conf (config_file, "USER", "routines_path", usrrtn);
update_conf (config_file, "USER", "globals_path", usrgbl);