* @param fsm file state machine data
* @param writeData should data be written?
* @param archive payload archive
+ * @param ix file index
* @return 0 on success
*/
-static int writeFile(FSM_t fsm, int writeData, rpmcpio_t archive)
+static int writeFile(FSM_t fsm, int writeData, rpmcpio_t archive, int ix)
{
FD_t rfd = NULL;
char * path = fsm->path;
fsm->dirName, fsm->baseName, NULL);
} else if (fsm->mapFlags & CPIO_MAP_PATH) {
rpmfi fi = fsmGetFi(fsm);
- fsm->path = xstrdup((fi->apath ? fi->apath[fsm->ix] :
- rpmfiBNIndex(fi, fsm->ix)));
+ fsm->path = xstrdup((fi->apath ? fi->apath[ix] :
+ rpmfiBNIndex(fi, ix)));
}
rc = rpmcpioHeaderWrite(archive, fsm->path, st);
rc = fsmMapPath(fsm);
/* Write data after last link. */
- rc = writeFile(fsm, (i == 0), archive);
+ rc = writeFile(fsm, (i == 0), archive, li->filex[i]);
if (fsm->failedFile && rc != 0 && *fsm->failedFile == NULL) {
ec = rc;
*fsm->failedFile = xstrdup(fsm->path);
/* Hardlinks are handled later */
if (!(S_ISREG(fsm->sb.st_mode) && fsm->sb.st_nlink > 1)) {
/* Copy file into archive. */
- rc = writeFile(fsm, 1, archive);
+ rc = writeFile(fsm, 1, archive, fsm->ix);
}
if (rc) {