Rename proc_getent to rc_proc_getent and make it global

This commit is contained in:
Christian Ruppert 2011-12-31 00:33:49 +01:00
parent 6fcc55cef8
commit c3be42006b
6 changed files with 63 additions and 50 deletions

View File

@ -29,6 +29,7 @@
*/ */
#include "librc.h" #include "librc.h"
#include "einfo.h"
bool bool
rc_yesno(const char *value) rc_yesno(const char *value)
@ -127,6 +128,53 @@ rc_getline(char **line, size_t *len, FILE *fp)
} }
librc_hidden_def(rc_getline) librc_hidden_def(rc_getline)
#ifdef __linux__
char *
rc_proc_getent(const char *ent)
{
FILE *fp;
char *proc, *p, *value = NULL;
size_t i, len;
if (!exists("/proc/cmdline"))
return NULL;
if (!(fp = fopen("/proc/cmdline", "r"))) {
eerror("failed to open `/proc/cmdline': %s", strerror(errno));
return NULL;
}
proc = NULL;
i = 0;
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
eerror("rc_getline: %s", strerror(errno));
if (proc != NULL) {
len = strlen(ent);
while ((p = strsep(&proc, " "))) {
if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
p += len;
if (*p == '=')
p++;
value = xstrdup(p);
}
}
}
if (!value)
errno = ENOENT;
fclose(fp);
free(proc);
return value;
}
librc_hidden_def(rc_proc_getent)
#endif
RC_STRINGLIST * RC_STRINGLIST *
rc_config_list(const char *file) rc_config_list(const char *file)
{ {

View File

@ -87,6 +87,7 @@ librc_hidden_proto(rc_find_pids)
librc_hidden_proto(rc_getfile) librc_hidden_proto(rc_getfile)
librc_hidden_proto(rc_getline) librc_hidden_proto(rc_getline)
librc_hidden_proto(rc_newer_than) librc_hidden_proto(rc_newer_than)
librc_hidden_proto(rc_proc_getent)
librc_hidden_proto(rc_older_than) librc_hidden_proto(rc_older_than)
librc_hidden_proto(rc_runlevel_exists) librc_hidden_proto(rc_runlevel_exists)
librc_hidden_proto(rc_runlevel_get) librc_hidden_proto(rc_runlevel_get)

View File

@ -361,6 +361,13 @@ bool rc_newer_than(const char *, const char *, time_t *, char *);
* @return true if source is older than target, otherwise false */ * @return true if source is older than target, otherwise false */
bool rc_older_than(const char *, const char *, time_t *, char *); bool rc_older_than(const char *, const char *, time_t *, char *);
#ifdef __linux__
/*! Read variables/values from /proc/cmdline
* @param value
* @return pointer to the value, otherwise NULL */
char *rc_proc_getent(const char *);
#endif
/*! Update the cached dependency tree if it's older than any init script, /*! Update the cached dependency tree if it's older than any init script,
* its configuration file or an external configuration file the init script * its configuration file or an external configuration file the init script
* has specified. * has specified.

View File

@ -18,6 +18,7 @@ global:
rc_getline; rc_getline;
rc_newer_than; rc_newer_than;
rc_older_than; rc_older_than;
rc_proc_getent;
rc_runlevel_exists; rc_runlevel_exists;
rc_runlevel_get; rc_runlevel_get;
rc_runlevel_list; rc_runlevel_list;

View File

@ -167,52 +167,6 @@ cleanup(void)
#endif #endif
} }
#ifdef __linux__
static char *
proc_getent(const char *ent)
{
FILE *fp;
char *proc, *p, *value = NULL;
size_t i, len;
if (!exists("/proc/cmdline"))
return NULL;
if (!(fp = fopen("/proc/cmdline", "r"))) {
eerror("failed to open `/proc/cmdline': %s", strerror(errno));
return NULL;
}
proc = NULL;
i = 0;
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
eerror("rc_getline: %s", strerror(errno));
if (proc != NULL) {
len = strlen(ent);
while ((p = strsep(&proc, " "))) {
if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
p += len;
if (*p == '=')
p++;
value = xstrdup(p);
}
}
}
if (!value)
errno = ENOENT;
fclose(fp);
free(proc);
return value;
}
#endif
static char static char
read_key(bool block) read_key(bool block)
{ {
@ -969,9 +923,9 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) { if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) {
/* If we requested a runlevel, save it now */ /* If we requested a runlevel, save it now */
p = proc_getent("rc_runlevel"); p = rc_proc_getent("rc_runlevel");
if (p == NULL) if (p == NULL)
p = proc_getent("softlevel"); p = rc_proc_getent("softlevel");
if (p != NULL) { if (p != NULL) {
set_krunlevel(p); set_krunlevel(p);
free(p); free(p);
@ -1123,7 +1077,7 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
/* mark any services skipped as started */ /* mark any services skipped as started */
proc = p = proc_getent("noinit"); proc = p = rc_proc_getent("noinit");
if (proc) { if (proc) {
while ((token = strsep(&p, ","))) while ((token = strsep(&p, ",")))
rc_service_mark(token, RC_SERVICE_STARTED); rc_service_mark(token, RC_SERVICE_STARTED);
@ -1144,7 +1098,7 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
/* mark any services skipped as stopped */ /* mark any services skipped as stopped */
proc = p = proc_getent("noinit"); proc = p = rc_proc_getent("noinit");
if (proc) { if (proc) {
while ((token = strsep(&p, ","))) while ((token = strsep(&p, ",")))
rc_service_mark(token, RC_SERVICE_STOPPED); rc_service_mark(token, RC_SERVICE_STOPPED);

View File

@ -32,6 +32,8 @@ rc_newer_than
rc_newer_than@@RC_1.0 rc_newer_than@@RC_1.0
rc_older_than rc_older_than
rc_older_than@@RC_1.0 rc_older_than@@RC_1.0
rc_proc_getent
rc_proc_getent@@RC_1.0
rc_runlevel_exists rc_runlevel_exists
rc_runlevel_exists@@RC_1.0 rc_runlevel_exists@@RC_1.0
rc_runlevel_get rc_runlevel_get