Index: PC/_msi.c =================================================================== --- PC/_msi.c (revision 59699) +++ PC/_msi.c (working copy) @@ -181,11 +181,12 @@ static PyObject* fcicreate(PyObject* obj, PyObject* args) { char *cabname; + char *p; PyObject *files; CCAB ccab; HFCI hfci; ERF erf; - int i; + int i = 0; if (!PyArg_ParseTuple(args, "sO:FCICreate", &cabname, &files)) @@ -208,25 +209,24 @@ ccab.setID = 0; ccab.szDisk[0] = '\0'; - for (i=0; cabname[i]; i++) - if (cabname[i] == '\\' || cabname[i] == '/') - break; + for (p = cabname; *p; p = CharNext(p)) + if (*p == '\\' || *p == '/') + i = p - cabname + 1; - if (i > sizeof(ccab.szCabPath) || - strlen(cabname+i) > sizeof(ccab.szCab)) { + if (i+1 > sizeof(ccab.szCabPath) || + strlen(cabname+i)+1 > sizeof(ccab.szCab)) { PyErr_SetString(PyExc_ValueError, "path name too long"); return 0; } - if (cabname[i]) { + if (i > 0) { memcpy(ccab.szCabPath, cabname, i); ccab.szCabPath[i] = '\0'; - strcpy(ccab.szCab, cabname+i); - } else { - strcpy(ccab.szCabPath, "."); - strcpy(ccab.szCab, cabname); - } + } else + strcpy(ccab.szCabPath, ".\\"); + strcpy(ccab.szCab, cabname+i); + hfci = FCICreate(&erf, cb_fileplaced, cb_alloc, cb_free, cb_open, cb_read, cb_write, cb_close, cb_seek, cb_delete, cb_gettempfile, &ccab, NULL);