Date: Fri, 2 Sep 2005 05:07:03 GMT From: soc-tyler <soc-tyler@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82997 for review Message-ID: <200509020507.j825738t000797@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=82997 Change 82997 by soc-tyler@soc-tyler_launchd on 2005/09/02 05:06:17 WAHOO! Some sort of conf file functionality! I can load data from my rudimentary "launcher" configuration file format. rox0r. Now to add more "stuff" to launchctl and move on to init(8) code, 11th hour... race to the finish ;) Affected files ... .. //depot/projects/soc2005/launchd/includes/property.h#3 edit .. //depot/projects/soc2005/launchd/launchctl/launchctl.c#18 edit Differences ... ==== //depot/projects/soc2005/launchd/includes/property.h#3 (text+ko) ==== @@ -33,6 +33,12 @@ #include <sys/types.h> #include <libutil.h> +/* launchd(8) specific definitions */ +#define LAUNCH_PROPERTY_LABEL "Label" +#define LAUNCH_PROPERTY_PATH "Path" +#define LAUNCH_PROPERTY_FLAGS "Flags" +#define LAUNCH_PROPERTY_LENGTH 128 + int property_count(properties list); #endif ==== //depot/projects/soc2005/launchd/launchctl/launchctl.c#18 (text+ko) ==== @@ -100,6 +100,7 @@ // FreeBSD related functions (for forwards compat? :P #ifndef _BUILD_DARWIN static launch_data_t read_conf_file(const char *, bool, bool); +static launch_data_t Conf2launch_data(void *); #endif static int load_and_unload_cmd(int argc, char *const argv[]); @@ -149,7 +150,6 @@ { "umask", umask_cmd, "Change launchd's umask" }, { "help", help_cmd, "This help output" }, {"exit", exit_cmd, "Exit launchctl" }, - {"quit", exit_cmd, "Exit launchctl"}, }; static bool istty = false; @@ -336,7 +336,7 @@ #ifdef _LAUNCHD_ static launch_data_t read_conf_file(const char *file, bool editondisk, bool load) { /* fill this with an array of launch_data_t structs */ - launch_data_t retval = NULL; + launch_data_t r; properties conf_props; // libutil.h and -lutil are required for this.. int fd; @@ -346,30 +346,65 @@ return NULL; /* calling function must check for a NULL pointer */ conf_props = properties_read(fd); /* read in config data */ - - retval = launch_data_alloc(LAUNCH_DATA_PROPERTY); - //launch_data_set_opaque(retval, (const void *)(conf_props), sizeof(properties)); - - /* I figure we'll just add the properties(3) linked list to the - * opaque launch_data_t datatype (opaque ~= void *) - * - * this will probably come back to haunt me - */ + + r = Conf2launch_data(conf_props); close(fd); - return retval; + + return r; } /* This function should mimic CF2launch_data in how it creates * a launch_data_t data structure from the contents of a .plist file */ -/* -static launch_data_t Conf2launch_data(void *) { - launch_data_t r; +static launch_data_t Conf2launch_data(void *prop) { + bool fflag = true; + char *label, *path, *flags; + + launch_data_t job = launch_data_alloc(LAUNCH_DATA_DICTIONARY); + + label = malloc(sizeof(char) * LAUNCH_PROPERTY_LENGTH); + path = malloc(sizeof(char) * LAUNCH_PROPERTY_LENGTH); + flags = malloc(sizeof(char) * LAUNCH_PROPERTY_LENGTH); + + // retrieve appropriate data and assign to correct vars + if ((label = property_find((properties)(prop), LAUNCH_PROPERTY_LABEL)) + == NULL) { + fprintf(stderr, "Could not locate a 'Label' for this launcher\n"); + goto out_bad; + } + + if ((path = property_find((properties)(prop), LAUNCH_PROPERTY_PATH)) + == NULL) { + fprintf(stderr, "Could not locate a 'Path' for this launcher\n"); + goto out_bad; + } + + if ((flags = property_find((properties)(prop), LAUNCH_PROPERTY_FLAGS)) + == NULL) { + fprintf(stderr, "**debug** no flags set for this job\n"); + fflag = false; + free(flags); + } + + + /* begin to insert pertinent data into the job data structure */ + launch_data_dict_insert(job, launch_data_new_string(label), LAUNCH_JOBKEY_LABEL); + launch_data_dict_insert(job, launch_data_new_string(path), LAUNCH_JOBKEY_PROGRAM); + if (flags != NULL) + launch_data_dict_insert(job, launch_data_new_string(flags), LAUNCH_JOBKEY_PROGRAMARGUMENTS); + + + return job; - return r; +out_bad: + free(label); + free(path); + if (flags != NULL) + free(flags); + + exit(EXIT_FAILURE); } -*/ #endif #endif @@ -1439,7 +1474,9 @@ { "maxproc", RLIMIT_NPROC }, { "maxfiles", RLIMIT_NOFILE } }; - size_t limlookupcnt = sizeof limlookup / sizeof limlookup[0]; + + size_t limlookupcnt = (sizeof(limlookup) / sizeof(limlookup[0])); + bool name2num(const char *n) { for (i = 0; i < limlookupcnt; i++) { if (!strcmp(limlookup[i].name, n)) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200509020507.j825738t000797>
