summaryrefslogtreecommitdiff
path: root/lib-src/emacsclient.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-03-05 21:42:57 +0000
committerRichard M. Stallman <rms@gnu.org>1994-03-05 21:42:57 +0000
commit1518a9eb45c4edd7e7c445f358a243222dcc18e8 (patch)
tree049f0420a653c75de4e77d220689a26cdd2da08e /lib-src/emacsclient.c
parent0bc439a07665479d6e918474839c562c4e92f9e5 (diff)
downloademacs-1518a9eb45c4edd7e7c445f358a243222dcc18e8.tar.gz
(main) [HAVE_SYSVIPC]: Make msgp->mtext longer if necessary.
On HPUX, error if it's more than 512 chars.
Diffstat (limited to 'lib-src/emacsclient.c')
-rw-r--r--lib-src/emacsclient.c36
1 files 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 <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 @@ 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)
{