# HG changeset patch # User Richard M. Stallman # Date 762903777 0 # Node ID 7eefa1bd1478f2b4b1ac1c39dd936b8e1077339f # Parent 7a86fbeb5c883e5fa2113a2d04193bc76a59be3e (main) [HAVE_SYSVIPC]: Make msgp->mtext longer if necessary. On HPUX, error if it's more than 512 chars. diff -r 7a86fbeb5c88 -r 7eefa1bd1478 lib-src/emacsclient.c --- a/lib-src/emacsclient.c Sat Mar 05 21:38:34 1994 +0000 +++ b/lib-src/emacsclient.c Sat Mar 05 21:42:57 1994 +0000 @@ -177,20 +177,25 @@ #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 @@ } 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 @@ 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) {