int sms_connect()
{
+ extern int errno;
+
if (!sms_inited) sms_init();
/*
* should do a hesiod call to find the sms machine name & service
* number/name.
*/
-
- _sms_conn = start_server_connection(SMS_GDB_SERV, "XXX");
/* XXX gdb doesn't give real return codes. Can we trust errno?*/
+ errno = 0;
+ _sms_conn = start_server_connection(SMS_GDB_SERV, "");
if (_sms_conn == NULL) {
- perror("gdb_connect"); /*XXX*/
- return SMS_CANT_CONNECT;
+ return errno;
}
return 0;
}
int sms_noop()
{
int status;
- struct sms_params *parms;
- struct sms_params *reply;
+ struct sms_params *parms = NULL;
+ struct sms_params *reply = NULL;
parms = (struct sms_params *) malloc(sizeof(*parms));
free(parms);
return status;
}
+
+int sms_shutdown(why)
+ char *why;
+{
+ int status;
+ sms_params *parms=NULL;
+ sms_params *reply=NULL;
+
+ parms = (sms_params *) malloc(sizeof(*parms));
+
+ parms->sms_procno = SMS_SHUTDOWN;
+ parms->sms_argc = 1;
+ parms->sms_argv = (char **)malloc(sizeof(char *) * 2);
+ parms->sms_argv[0] = why;
+ parms->sms_argv[1] = NULL;
+
+ if ((status = sms_do_call(parms, &reply)) || (status = reply->sms_status))
+ goto punt;
+
+
+punt:
+ sms_destroy_reply(reply);
+ok:
+ if(parms) {
+ if(parms->sms_argv)
+ free(parms->sms_argv);
+ free(parms);
+ }
+ return status;
+}