Fix GCC 9 string trunction warning

- Increase size of resulting path buffer, unlikely a real problem
- Check return value from snprintf() to detect errors and truncation
- Add logit() function wrapper to initctl, maps to _e()/_d()/_pe()

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2020-01-07 01:03:57 +01:00
parent 744719219e
commit 8d271ac5b8
5 changed files with 22 additions and 6 deletions
+2 -2
View File
@@ -50,11 +50,11 @@ const char *condstr(enum cond_state s)
const char *cond_path(const char *name)
{
char tmp[MAX_ARG_LEN];
static char file[MAX_ARG_LEN];
static char path[256];
snprintf(tmp, sizeof(tmp), COND_PATH "/%s", name);
return pid_runpath(tmp, file, sizeof(file));
return pid_runpath(tmp, path, sizeof(path));
}
unsigned int cond_get_gen(const char *file)
+13
View File
@@ -688,6 +688,19 @@ int main(int argc, char *argv[])
return usage(1);
}
void logit(int prio, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
if (prio <= LOG_ERR)
verrx(1, fmt, ap);
else
vwarnx(fmt, ap);
va_end(ap);
}
/**
* Local Variables:
* indent-tabs-mode: t
+1 -1
View File
@@ -96,7 +96,7 @@ char *pid_get_name(pid_t pid, char *name, size_t len)
char *pid_file(svc_t *svc)
{
char fn[MAX_ARG_LEN];
static char path[MAX_ARG_LEN];
static char path[256];
if (svc->pidfile[0]) {
if (svc->pidfile[0] == '!')
+5 -2
View File
@@ -46,8 +46,9 @@ int pid_file_parse (svc_t *svc, char *arg);
*/
static inline char *pid_runpath(const char *file, char *path, size_t len)
{
static int unknown = 1;
static char *prefix = "/var/run";
static int unknown = 1;
int rc;
if (unknown) {
if (fisdir("/run"))
@@ -60,7 +61,9 @@ static inline char *pid_runpath(const char *file, char *path, size_t len)
else if (!strncmp(file, "/run/", 5))
file += 5;
snprintf(path, len, "%s/%s", prefix, file);
rc = snprintf(path, len, "%s/%s", prefix, file);
if (rc < 0 || (size_t)rc >= len)
_e("File path '%s' truncated, should end with '%s'", path, file);
return path;
}
+1 -1
View File
@@ -95,7 +95,7 @@ typedef struct svc {
/* Service details */
pid_t pid;
char pidfile[MAX_ARG_LEN];
char pidfile[256];
long start_time; /* Start time, as seconds since boot, from sysinfo() */
const svc_state_t state; /* Paused, Reloading, Restart, Running, ... */
svc_type_t type; /* Service, run, task, inetd, ... */