/* * Find device. * Locate a specified device by ordinal. * Device must be a robotic library, removable media device, or * remote sam pseudo-device. */ int findDev( char *eq) /* Ordinal of device */ { int n; char *endptr; dev_ent_t *dev; if (isdigit(*eq)) { n = strtol(eq, &endptr, 0); if (*endptr != '\0') { Error(catgets(catfd, SET, 2350, "%s is not a valid equipment ordinal.\n"), eq); /* NOTREACHED */ } if (n < 0 || n > Max_Devices) { Error(catgets(catfd, SET, 882, "Device number out of range (0 < %d < %d)"), n, Max_Devices); } if (Dev_Tbl->d_ent[n] == NULL) Error(catgets(catfd, SET, 854, "Device %d not defined."), n); dev = (dev_ent_t *)SHM_ADDR(master_shm, Dev_Tbl->d_ent[n]); if (IS_OPTICAL(dev) || IS_TAPE(dev) || IS_ROBOT(dev) || IS_RSS(dev) || IS_RSC(dev) || IS_RSD(dev)) { return (n); } Error(catgets(catfd, SET, 7008, "Invalid equipment %s for this command."), eq); } Error(catgets(catfd, SET, 856, "Device %s not defined."), eq); /* NOTREACHED */ }
int _zdtm_prepare_message(zdtm_lib_env *cur_env, zdtm_msg *p_msg) { void *p_body; uint16_t *p_cont_size; // First we will calculate the body size -- all messages have // the message type. p_msg->body_size = MSG_TYPE_SIZE; if(IS_RRL(p_msg)) { p_msg->body_size += zdtm_rrl_length(&p_msg->body.cont.rrl); }else if(IS_RMG(p_msg)) { p_msg->body_size += zdtm_rmg_length(&p_msg->body.cont.rmg); }else if(IS_RMS(p_msg)) { p_msg->body_size += zdtm_rms_length(&p_msg->body.cont.rms); }else if(IS_RTS(p_msg)) { p_msg->body_size += zdtm_rts_length(&p_msg->body.cont.rts); }else if(IS_RDI(p_msg)) { p_msg->body_size += zdtm_rdi_length(&p_msg->body.cont.rdi); }else if(IS_RSY(p_msg)) { p_msg->body_size += zdtm_rsy_length(&p_msg->body.cont.rsy); }else if(IS_RSS(p_msg)) { p_msg->body_size += zdtm_rss_length(&p_msg->body.cont.rss); }else if(IS_RDR(p_msg)) { p_msg->body_size += zdtm_rdr_length(&p_msg->body.cont.rdr); }else if(IS_RDW(p_msg)) { p_msg->body_size += zdtm_rdw_length(&p_msg->body.cont.rdw); }else if(IS_RDD(p_msg)){ p_msg->body_size += zdtm_rdd_length(&p_msg->body.cont.rdd); }else if(IS_RDS(p_msg)){ p_msg->body_size += zdtm_rds_length(&p_msg->body.cont.rds); }else if(IS_RQT(p_msg)){ p_msg->body_size += zdtm_rqt_length(&p_msg->body.cont.rqt); }else if(IS_RLR(p_msg)){ p_msg->body_size += zdtm_rlr_length(&p_msg->body.cont.rlr); }else if(IS_RGE(p_msg)){ p_msg->body_size += zdtm_rge_length(&p_msg->body.cont.rge); }else if(IS_RAY(p_msg) || IS_RIG(p_msg) || IS_RTG(p_msg)) { // No additional content }else { // Unknown message type return RET_UNK_TYPE; } // The cont_size is the body - the type size p_msg->cont_size = p_msg->body_size - MSG_TYPE_SIZE; // Set up the header memcpy(p_msg->header, DMSG_HDR, MSG_HDR_SIZE); // Write the content size; p_cont_size = (uint16_t *)(p_msg->header + MSG_HDR_CONT_OFFSET); #ifdef WORDS_BIGENDIAN *p_cont_size = zdtm_liltobigs(p_msg->cont_size); #else *p_cont_size = p_msg->cont_size; #endif // Initialize the raw content. if(p_msg->body.p_raw_content != NULL) return RET_NNULL_RAW; // Allocate the raw message. p_body = p_msg->body.p_raw_content = malloc(p_msg->cont_size); if (p_body == NULL) { return -1; } // Fill in the rest for non-trivial messages if(IS_RRL(p_msg)) { p_body = zdtm_rrl_write(p_body, &p_msg->body.cont.rrl); }else if(IS_RMG(p_msg)){ p_body = zdtm_rmg_write(p_body, &p_msg->body.cont.rmg); }else if(IS_RMS(p_msg)){ p_body = zdtm_rms_write(p_body, &p_msg->body.cont.rms); /* if(p_body == NULL) return RET_BAD_SIZE; */ }else if(IS_RTS(p_msg)){ p_body = zdtm_rts_write(p_body, &p_msg->body.cont.rts); }else if(IS_RDI(p_msg)){ p_body = zdtm_rdi_write(p_body, &p_msg->body.cont.rdi); }else if(IS_RSY(p_msg)){ p_body = zdtm_rsy_write(p_body, &p_msg->body.cont.rsy); }else if(IS_RSS(p_msg)){ p_body = zdtm_rss_write(p_body, &p_msg->body.cont.rss); }else if(IS_RDR(p_msg)){ p_body = zdtm_rdr_write(p_body, &p_msg->body.cont.rdr); }else if(IS_RDW(p_msg)){ p_body = zdtm_rdw_write(p_body, &p_msg->body.cont.rdw); if(p_body == NULL) return RET_UNK_TYPE; }else if(IS_RDD(p_msg)){ p_body = zdtm_rdd_write(p_body, &p_msg->body.cont.rdd); }else if(IS_RDS(p_msg)){ p_body = zdtm_rds_write(p_body, &p_msg->body.cont.rds); }else if(IS_RQT(p_msg)){ p_body = zdtm_rqt_write(p_body, &p_msg->body.cont.rqt); }else if(IS_RLR(p_msg)){ p_body = zdtm_rlr_write(p_body, &p_msg->body.cont.rlr); }else if(IS_RGE(p_msg)){ p_body = zdtm_rge_write(p_body, &p_msg->body.cont.rge); } // Compute the checksum -- sill in host byte order p_msg->check_sum = _zdtm_checksum(p_msg); return 0; }