+ /* How to restart Emacs. */
+ props[props_idx] = &prop_ptr[props_idx];
+ props[props_idx]->name = xstrdup (SmRestartCommand);
+ props[props_idx]->type = xstrdup (SmLISTofARRAY8);
+ /* /path/to/emacs, --smid=xxx --no-splash --chdir=dir ... */
+ i = 3 + initial_argc;
+ props[props_idx]->num_vals = i;
+ vp = (SmPropValue *) xmalloc (i * sizeof(*vp));
+ props[props_idx]->vals = vp;
+ props[props_idx]->vals[vp_idx].length = strlen (emacs_program);
+ props[props_idx]->vals[vp_idx++].value = emacs_program;
+
+ smid_opt = xmalloc (strlen (SMID_OPT) + strlen (client_id) + 1);
+ strcpy (smid_opt, SMID_OPT);
+ strcat (smid_opt, client_id);
+
+ props[props_idx]->vals[vp_idx].length = strlen (smid_opt);
+ props[props_idx]->vals[vp_idx++].value = smid_opt;
+
+ props[props_idx]->vals[vp_idx].length = strlen (NOSPLASH_OPT);
+ props[props_idx]->vals[vp_idx++].value = NOSPLASH_OPT;
+
+ if (cwd)
+ {
+ chdir_opt = xmalloc (strlen (CHDIR_OPT) + strlen (cwd) + 1);
+ strcpy (chdir_opt, CHDIR_OPT);
+ strcat (chdir_opt, cwd);
+
+ props[props_idx]->vals[vp_idx].length = strlen (chdir_opt);
+ props[props_idx]->vals[vp_idx++].value = chdir_opt;
+ }
+
+ for (i = 1; i < initial_argc; ++i)
+ {
+ props[props_idx]->vals[vp_idx].length = strlen (initial_argv[i]);
+ props[props_idx]->vals[vp_idx++].value = initial_argv[i];
+ }
+
+ ++props_idx;
+