diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c index 0cde66d8836303bb038a43ea60116685b97b37d9..2b31ba71342fb092566022ed581524a27b6856cb 100644 --- a/src/sbbs3/js_global.c +++ b/src/sbbs3/js_global.c @@ -2376,6 +2376,38 @@ js_getfcase(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) return(JS_TRUE); } +static JSBool +js_dosfname(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + char* str; + char path[MAX_PATH+1]; + JSString* js_str; + + if(JSVAL_IS_VOID(argv[0])) + return(JS_TRUE); + +#if defined(_WIN32) + + if((str=js_ValueToStringBytes(cx, argv[0], NULL))==NULL) + return(JS_FALSE); + + if(GetShortPathName(str,path,sizeof(path))) { + js_str = JS_NewStringCopyZ(cx, path); + if(js_str==NULL) + return(JS_FALSE); + + *rval = STRING_TO_JSVAL(js_str); + } + +#else /* No non-Windows equivalent */ + + *rval = argv[0]; + +#endif + + return(JS_TRUE); +} + static JSBool js_cfgfname(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -3160,7 +3192,7 @@ static jsSyncMethodSpec js_global_functions[] = { ,311 }, {"file_getcase", js_getfcase, 1, JSTYPE_STRING, JSDOCSTR("path/filename") - ,JSDOCSTR("returns correct case of filename (long version of filename on Win32) " + ,JSDOCSTR("returns correct case of filename (long version of filename on Windows) " "or <i>undefined</i> if the file doesn't exist") ,311 }, @@ -3170,6 +3202,12 @@ static jsSyncMethodSpec js_global_functions[] = { "or <tt>path/file.<i>host</i>.ext</tt>) if such a variation of the filename exists") ,312 }, + {"file_getdosname", js_dosfname, 1, JSTYPE_STRING, JSDOCSTR("path/filename") + ,JSDOCSTR("returns DOS-compatible (Micros~1 shortened) version of specified <i>path/filename</i>" + "(on Windows only)<br>" + "returns unmodified <i>path/filename</i> on other platforms") + ,315 + }, {"file_exists", js_fexist, 1, JSTYPE_BOOLEAN, JSDOCSTR("path/filename") ,JSDOCSTR("verify a file's existence") ,310