/* * This part was hacked by Harald Kipp * * Bug reports should be sent to * * harald@os2point.ping.de * harald@haport.sesam.com * Fido: 2:2448/434 * * This module contains an OS/2 specific file copier. * */ #include #include #include #include #include #include #include /************************************************************************/ /* */ /************************************************************************/ int file_copy(const char *srcname, const char *dstname, const char *mode) { int option = 0; int rmorg = 0; /* remove original if set */ int mkbak = 0; /* backup old destination if set */ char *cp = (char *)mode; int rc; while(cp && *cp) { if(*cp == 'a' || *cp == 'A') option = DCPY_APPEND; else if(*cp == 'b' || *cp == 'B') mkbak = 1; else if(*cp == 'm' || *cp == 'M') { option = DCPY_EXISTING; rmorg = 1; } else if(*cp == 'w' || *cp == 'W') option = DCPY_EXISTING; cp++; } if(mkbak) { char *bakname = malloc(strlen(dstname) + 5); strcpy(bakname, dstname); cp = strrchr(bakname, '.'); if(cp == NULL || strlen(cp) > 4) strcat(bakname, ".old"); if((rc = DosCopy((char *)dstname, bakname, DCPY_EXISTING, 0)) != 0) lprintf("System error %u during backup of %s", rc, dstname); free(bakname); } if((rc = DosCopy((char *)srcname, (char *)dstname, option, 0)) != 0) { lprintf("System error %u during copy %s to %s", rc, srcname, dstname); return(-1); } if(rmorg && (rc = DosDelete((char *)srcname, 0)) != 0) lprintf("System error %u during delete of %s", rc, srcname); return(0); }