From 1518a9eb45c4edd7e7c445f358a243222dcc18e8 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sat, 5 Mar 1994 21:42:57 +0000 Subject: [PATCH] (main) [HAVE_SYSVIPC]: Make msgp->mtext longer if necessary. On HPUX, error if it's more than 512 chars. --- lib-src/emacsclient.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 85d0bdebeb5..cacfaa8658f 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -177,20 +177,25 @@ main (argc, argv) #include #include +char *getwd (), *getcwd (), *getenv (); + main (argc, argv) int argc; char **argv; { int s; key_t key; - struct msgbuf * msgp = - (struct msgbuf *) malloc (sizeof *msgp + BUFSIZ); + /* Size of text allocated in MSGP. */ + int size_allocated = BUFSIZ; + /* Amount of text used in MSGP. */ + int used; + struct msgbuf *msgp + = (struct msgbuf *) malloc (sizeof (struct msgbuf) + size_allocated); struct msqid_ds * msg_st; char *homedir, buf[BUFSIZ]; char gwdirb[BUFSIZ]; char *cwd; char *temp; - char *getwd (), *getcwd (), *getenv (); if (argc < 2) { @@ -241,17 +246,33 @@ main (argc, argv) } msgp->mtext[0] = 0; + used = 0; argc--; argv++; while (argc) { + int need_cwd = 0; if (*argv[0] == '+') { char *p = argv[0] + 1; while (*p >= '0' && *p <= '9') p++; if (*p != 0) - strcat (msgp->mtext, cwd); + need_cwd = 1; } else if (*argv[0] != '/') + need_cwd = 1; + + if (need_cwd) + used += strlen (cwd); + used += strlen (argv[0]) + 1; + while (used + 2 > size_allocated) + { + size_allocated *= 2; + msgp = (struct msgbuf *) realloc (msgp, + (sizeof (struct msgbuf) + + size_allocated)); + } + + if (need_cwd) strcat (msgp->mtext, cwd); strcat (msgp->mtext, argv[0]); @@ -259,6 +280,13 @@ main (argc, argv) argv++; argc--; } strcat (msgp->mtext, "\n"); +#ifdef HPUX /* HPUX has a bug. */ + if (strlen (msgp->mtext) >= 512) + { + fprintf (stderr, "emacsclient: args too long for msgsnd\n"); + exit (1); + } +#endif msgp->mtype = 1; if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 0) < 0) { -- 2.39.5