1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #define EXDEV 590
- #define _sys_rename() _sc_140()
- extern unsigned short _sys_rename(const char _far *oldfn, char *newfn);
- static void _n_(const char* fn, char* bfn)
- {
- if (*fn != '.' && *fn != '/')
- strcpy(bfn, "./");
- else
- *bfn = '\0';
- strcat(bfn, fn);
- }
- int _rename(const char* old, const char* new)
- {
- char* p;
- char* q;
- char* r;
- char olddrv, newdrv;
- char dir[FILENAME_MAX];
- short status;
- char bold[FILENAME_MAX], bnew[FILENAME_MAX];
- p = strrchr(old, ':');
- q = strrchr(new, ':');
-
- if (p != NULL || q != NULL) {
-
- getcwd(dir, FILENAME_MAX);
- r = strrchr(dir, ':');
- if (p == NULL)
- p = r;
- olddrv = p ? p[1] : 'S';
- if (q == NULL)
- q = r;
- newdrv = q ? q[1] : 'S';
-
- if ((old & ~0x20) != (new & ~0x20)) {
- _errarg = NULL;
- return errno = _errnum = EXDEV;
- }
- }
-
- _n_(old, bold);
- _n_(new, bnew);
- status = _sys_rename(bold, bnew);
-
- if (status) {
- errno = _errnum = status;
- _errarg = (status == 44 || status == 45) ? new : old;
- }
- return status;
- }
|