static nserror nsico_clone(const struct content *old, struct content **newc) { nsico_content *ico; nserror error; ico = calloc(1, sizeof(nsico_content)); if (ico == NULL) return NSERROR_NOMEM; error = content__clone(old, &ico->base); if (error != NSERROR_OK) { content_destroy(&ico->base); return error; } /* Simply replay creation and conversion */ error = nsico_create_ico_data(ico); if (error != NSERROR_OK) { content_destroy(&ico->base); return error; } if (old->status == CONTENT_STATUS_READY || old->status == CONTENT_STATUS_DONE) { if (nsico_convert(&ico->base) == false) { content_destroy(&ico->base); return NSERROR_CLONE_FAILED; } } *newc = (struct content *) ico; return NSERROR_OK; }
bool nsico_clone(const struct content *old, struct content *new_content) { /* Simply replay creation and conversion */ if (nsico_create(new_content, NULL) == false) return false; if (old->status == CONTENT_STATUS_READY || old->status == CONTENT_STATUS_DONE) { if (nsico_convert(new_content) == false) return false; } return true; }