0

いくつかの既存のコードでそれを見つけました。いくつか問題があるように見えますが、コードは正常に動作します。このコードにトリックが含まれている場合は助けてもらえますか?

構造体のサイズを計算するときに 2 つの unsigned を無視するのはなぜですか?

        tmsg_sz = sizeof(plfm_xml_header_t) + sizeof(oid_t) + sizeof(char*)
            + sizeof(unsigned) + sizeof(snmp_varbind_t)*5 ;
        tmsg = (snmp_trap_t*) malloc(tmsg_sz);
        if (!tmsg) {
            PRINTF("malloc failed \n");
            free(trap_msg);
            return -1;
        }
        memset (tmsg, 0, tmsg_sz);
        tmsg->hdr.type = PLFM_SNMPTRAP_MSG;
        copy_oid_oidt(clog_msg_gen_notif_oid, OID_LENGTH(clog_msg_gen_notif_oid), &tmsg->oid);
        tmsg->trap_type = SNMP_TRAP_ENTERPRISESPECIFIC;
        tmsg->trap_specific = 1;
        tmsg->trapmsg = strdup("Trap Message");
        tmsg->numofvar = 5;
        build_snmp_varbind(&(tmsg->vars[0]), facility, STR_DATA_TYPE, sizeof(facility)+1, clog_hist_facility_oid, 14);

        build_snmp_varbind(&(tmsg->vars[1]), &sev, U32_DATA_TYPE, sizeof(sev),clog_hist_severity_oid, 14);

        build_snmp_varbind(&(tmsg->vars[2]), name, STR_DATA_TYPE, sizeof(name)+1, clog_hist_msgname_oid, 14);

        build_snmp_varbind(&(tmsg->vars[3]), trap_msg, STR_DATA_TYPE, strlen(trap_msg)+1,clog_hist_msgtext_oid, 14);

        // get system uptime
        long uptime = get_uptime();
        build_snmp_varbind(&(tmsg->vars[4]), (long*)&uptime, TMR_DATA_TYPE, sizeof(uptime),clog_hist_timestamp_oid, 14);  



  typedef struct snmp_trap_s {
      plfm_xml_header_t hdr;
      oid_t             oid;        /* trap oid */
      unsigned          trap_type;
      unsigned          trap_specific;
      char              *trapmsg;   /* text message for this trap */
      unsigned          numofvar;
      snmp_varbind_t    vars[0];
  } __attribute__((__packed__)) snmp_trap_t;
4

1 に答える 1