Mercurial > emacs
changeset 6213:7eefa1bd1478
(main) [HAVE_SYSVIPC]: Make msgp->mtext longer if necessary.
On HPUX, error if it's more than 512 chars.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 05 Mar 1994 21:42:57 +0000 |
parents | 7a86fbeb5c88 |
children | 512963eb02fe |
files | lib-src/emacsclient.c |
diffstat | 1 files changed, 32 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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 <sys/msg.h> #include <stdio.h> +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) {