Print this page
6070 libdisasm: attach/detach arch ops should be optional
Reviewed by: Robert Mustacchi <rm@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libdisasm/common/libdisasm.c
          +++ new/usr/src/lib/libdisasm/common/libdisasm.c
↓ open down ↓ 135 lines elided ↑ open up ↑
 136  136  
 137  137  void
 138  138  dis_flags_clear(dis_handle_t *dhp, int f)
 139  139  {
 140  140          dhp->dh_flags &= ~f;
 141  141  }
 142  142  
 143  143  void
 144  144  dis_handle_destroy(dis_handle_t *dhp)
 145  145  {
 146      -        dhp->dh_arch->da_handle_detach(dhp);
      146 +        if (dhp->dh_arch->da_handle_detach != NULL)
      147 +                dhp->dh_arch->da_handle_detach(dhp);
      148 +
 147  149          dis_free(dhp, sizeof (dis_handle_t));
 148  150  }
 149  151  
 150  152  dis_handle_t *
 151  153  dis_handle_create(int flags, void *data, dis_lookup_f lookup_func,
 152  154      dis_read_f read_func)
 153  155  {
 154  156          dis_handle_t *dhp;
 155  157          dis_arch_t *arch = NULL;
 156  158          int i;
↓ open down ↓ 17 lines elided ↑ open up ↑
 174  176          dhp->dh_arch = arch;
 175  177          dhp->dh_lookup = lookup_func;
 176  178          dhp->dh_read = read_func;
 177  179          dhp->dh_flags = flags;
 178  180          dhp->dh_data = data;
 179  181  
 180  182          /*
 181  183           * Allow the architecture-specific code to allocate
 182  184           * its private data.
 183  185           */
 184      -        if (arch->da_handle_attach(dhp) != 0) {
      186 +        if (arch->da_handle_attach != NULL &&
      187 +            arch->da_handle_attach(dhp) != 0) {
 185  188                  dis_free(dhp, sizeof (dis_handle_t));
 186  189                  /* dis errno already set */
 187  190                  return (NULL);
 188  191          }
 189  192  
 190  193          return (dhp);
 191  194  }
 192  195  
 193  196  int
 194  197  dis_disassemble(dis_handle_t *dhp, uint64_t addr, char *buf, size_t buflen)
↓ open down ↓ 120 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX