c
static void cleanup_resources(char *name, struct parport *port) {
    kfree(name);
    // ... any other resource cleanup ...
}

static int register_device(int minor, struct pp_struct *pp) {
    struct parport *port = NULL;
    char *name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor);
    if (name == NULL) {
        cleanup_resources(name, port); // Cleanup on error
        return -ENOMEM; 
    }

    port = parport_find_number(minor);
    if (!port) {
        cleanup_resources(name, port); 
        return -ENODEV;
    }

    // ... rest of the code ...

    cleanup_resources(name, port); 
    return 0;
}
