Index: appl/lib/fs_lib.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/appl/lib/fs_lib.c,v
retrieving revision 1.31.2.3
diff -u -r1.31.2.3 fs_lib.c
--- appl/lib/fs_lib.c	2001/10/02 16:13:02	1.31.2.3
+++ appl/lib/fs_lib.c	2001/10/30 13:46:51
@@ -600,22 +600,22 @@
 fs_get_sysname (char *sys, size_t sys_sz)
 {
     struct ViceIoctl a_params;
-    int32_t set = 0;
+    int32_t set = 0; /* 0 to get value */
     char *buf;
 
-    buf = malloc (sys_sz + 4);
+    buf = malloc (sys_sz + sizeof(set));
     if (buf == NULL)
 	return ENOMEM;
 
     a_params.in       = (caddr_t)&set;
     a_params.in_size  = sizeof(set);
     a_params.out      = buf;
-    a_params.out_size = sys_sz + 4;
+    a_params.out_size = sys_sz + sizeof(set);
 
     if(k_pioctl (NULL, VIOC_AFS_SYSNAME, &a_params, 1) < 0)
 	return errno;
     else {
-	strlcpy (sys, buf + 4, sys_sz);
+	strlcpy (sys, buf + sizeof(set), sys_sz);
 	return 0;
     }
 }
@@ -628,16 +628,16 @@
 fs_set_sysname (const char *sys)
 {
     struct ViceIoctl a_params;
-    int32_t set = 1;
+    int32_t set = 1; /* 1 to set value */
 
     a_params.in_size  = sizeof(set) + strlen(sys) + 1;
     a_params.in       = malloc(a_params.in_size);
     if (a_params.in == NULL)
 	return ENOMEM;
-    a_params.out      = NULL;
-    a_params.out_size = 0;
     memcpy (a_params.in, &set, sizeof(set));
     strcpy (a_params.in + sizeof(set), sys);
+    a_params.out      = NULL;
+    a_params.out_size = 0;
 
     if(k_pioctl (NULL, VIOC_AFS_SYSNAME, &a_params, 1) < 0)
 	return errno;
Index: arlad/messages.c
===================================================================
RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/arlad/messages.c,v
retrieving revision 1.231.2.12
diff -u -r1.231.2.12 messages.c
--- arlad/messages.c	2001/10/19 04:25:52	1.231.2.12
+++ arlad/messages.c	2001/10/30 13:18:06
@@ -3076,25 +3076,32 @@
 	    return xfs_send_message_wakeup (fd,
 					    h->header.sequence_num,
 					    EPERM);
+	if (parm != 1)
+	    return xfs_send_message_wakeup (fd,
+					    h->header.sequence_num,
+					    EINVAL);
 	t += sizeof(int32_t);
 	arla_warnx (ADEBMSG, "VIOC_AFS_SYSNAME: setting sysname: %s", t);
 	memcpy(arlasysname, t, h->insize);
 	arlasysname[h->insize] = '\0';
 	return xfs_send_message_wakeup(fd, h->header.sequence_num, 0);
     } else {
-	char *buf;
-	size_t sysname_len = strlen (arlasysname);
+	int buflen = 0;
+	char *buf = NULL;
+	int32_t one = 1;
 	int ret;
-
-	buf = malloc (sysname_len + 4 + 1);
+	size_t sysname_len = strlen (arlasysname);
+	
+	buflen = sysname_len + sizeof(int32_t) + 1;
+	buf = malloc (buflen);
 	if (buf == NULL)
 	    return xfs_send_message_wakeup (fd, h->header.sequence_num, ENOMEM);
-	*((u_int32_t *)buf) = sysname_len;
-	memcpy (buf + 4, arlasysname, sysname_len);
-	buf[sysname_len + 4] = '\0';
+	memcpy (buf, &one, sizeof(int32_t));
+	memcpy (buf + sizeof(int32_t), arlasysname, sysname_len);
+	buf[buflen - 1] = '\0';
 
 	ret = xfs_send_message_wakeup_data (fd, h->header.sequence_num, 0,
-					    buf, sysname_len + 5);
+					    buf, buflen);
 	free (buf);
 	return ret;
     }
