Example #1
0
/*
 * 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 */
}
Example #2
0
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; 
}