00001
00002 #include <sys/sys_msg.h>
00003 #include <errno.h>
00004
00005 #include <string.h>
00006
00007 int sys_msg(void *buf) {
00008 union _sysmsg {
00009 int status;
00010 struct _ver {
00011 struct _sysmsg_hdr hdr;
00012 struct _sysmsg_version version;
00013 } ver;
00014 struct _ver_reply {
00015 struct _sysmsg_hdr_reply hdr;
00016 struct _sysmsg_version_reply version;
00017 } ver_reply;
00018 } *m;
00019
00020 m = buf;
00021
00022 switch(m->ver.hdr.subtype) {
00023
00024 case _SYSMSG_SUBTYPE_VERSION:
00025 memset(&m->ver_reply, 0, sizeof(m->ver_reply));
00026 m->ver_reply.hdr.status = 0;
00027 strcpy(&m->ver_reply.version.name[0], NAME);
00028 strncpy(&m->ver_reply.version.date[0], __DATE__, 11);
00029 m->ver_reply.version.version = VERSION;
00030 m->ver_reply.version.letter = RELEASE[0];
00031 return(sizeof(m->ver_reply));
00032
00033 case _SYSMSG_SUBTYPE_DEATH:
00034 case _SYSMSG_SUBTYPE_TRACE:
00035 default:
00036 m->status = EINVAL;
00037 return(sizeof(m->status));
00038 }
00039 }