1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-07 15:20:18 +00:00
QB64-PE/internal/c/User Mods/luke_mods.cpp
SMcNeill ef083bb4af Fixed ASCII tool colors to match QB64 IDE, and added in EXIT dupport with the red X on top.
Pushed changes introduced by LUKE (Johny B on the QB64 forums) as follows :

Fixed setup_lnx.sh, added _CWD$, fixed handling of errno.
Converted setup_lnx.sh to Linux line endings (was preventing the script from running).
We now include <errno.h>, so the errno variable actually works - before it was just a regular variable that wasn't being set on error.
Added a _CWD$ function that returns the current working directory.  Should work on all 3 systems, but testing is needed on Win/Mac.
Can cause the following runtime errors: 7 (Out of memory), 51 (Internal error).
2014-07-09 06:40:12 -04:00

53 lines
1.1 KiB
C++

//Get Current Working Directory
qbs *func__cwd(){
qbs *final, *tqbs;
int length;
char *buf, *ret;
#if defined QB64_WINDOWS
length = GetCurrentDirectoryA(0, NULL);
buf = (char *)malloc(length);
if (!buf) {
error(7); //"Out of memory"
return tqbs;
}
if (GetCurrentDirectoryA(length, buf) != --length) { //Sanity check
free(buf); //It's good practice
tqbs = qbs_new(0, 1);
error(51); //"Internal error"
return tqbs;
}
#elif defined QB64_LINUX
length = 512;
while(1) {
buf = (char *)malloc(length);
if (!buf) {
tqbs = qbs_new(0, 1);
error(7);
return tqbs;
}
ret = getcwd(buf, length);
if (ret) break;
if (errno != ERANGE) {
tqbs = qbs_new(0, 1);
error(51);
return tqbs;
}
free(buf);
length += 512;
}
length = strlen(ret);
ret = (char *)realloc(ret, length); //Chops off the null byte
if (!ret) {
tqbs = qbs_new(0, 1);
error(7);
return tqbs;
}
buf = ret;
#endif
final = qbs_new(length, 1);
memcpy(final->chr, buf, length);
free(buf);
return final;
}