@@ -92,17 +92,24 @@ int dev_freefilehandle() {
9292}
9393
9494/**
95- *
95+ * returns a file pointer for the given BASIC handle
9696 */
97- dev_file_t * dev_getfileptr (int handle ) {
98- handle -- ; // Warning: BASIC's handles starting from 1
99-
100- if (handle < 0 || handle >= OS_FILEHANDLES ) {
101- rt_raise (FSERR_HANDLE );
102- return NULL ;
97+ dev_file_t * dev_getfileptr (const int handle ) {
98+ dev_file_t * result ;
99+ if (!opt_file_permitted ) {
100+ rt_raise (ERR_FILE_PERM );
101+ result = NULL ;
102+ } else {
103+ // BASIC handles start from 1
104+ int hnd = handle - 1 ;
105+ if (hnd < 0 || hnd >= OS_FILEHANDLES ) {
106+ rt_raise (FSERR_HANDLE );
107+ result = NULL ;
108+ } else {
109+ result = & file_table [hnd ];
110+ }
103111 }
104-
105- return & file_table [handle ];
112+ return result ;
106113}
107114
108115/**
@@ -155,6 +162,11 @@ int dev_fopen(int sb_handle, const char *name, int flags) {
155162 dev_file_t * f ;
156163 int i ;
157164
165+ if (!opt_file_permitted ) {
166+ rt_raise (ERR_FILE_PERM );
167+ return 0 ;
168+ }
169+
158170 if ((f = dev_getfileptr (sb_handle )) == NULL ) {
159171 return 0 ;
160172 }
@@ -427,6 +439,11 @@ int dev_feof(int sb_handle) {
427439int dev_fremove (const char * file ) {
428440 int success , vfslib ;
429441
442+ if (!opt_file_permitted ) {
443+ rt_raise (ERR_FILE_PERM );
444+ return 0 ;
445+ }
446+
430447 // common for all, execute driver's function
431448 if ((vfslib = sblmgr_getvfs (file )) != -1 ) {
432449 success = sblmgr_vfsdirexec (lib_vfs_remove , vfslib , file + 5 );
@@ -445,6 +462,11 @@ int dev_fremove(const char *file) {
445462int dev_fexists (const char * file ) {
446463 int vfslib ;
447464
465+ if (!opt_file_permitted ) {
466+ rt_raise (ERR_FILE_PERM );
467+ return 0 ;
468+ }
469+
448470 // common for all, execute driver's function
449471 if ((vfslib = sblmgr_getvfs (file )) != -1 ) {
450472 return sblmgr_vfsdirexec (lib_vfs_exist , vfslib , file + 5 );
@@ -462,6 +484,11 @@ int dev_fcopy(const char *file, const char *newfile) {
462484 byte * buf ;
463485 dword i , block_size , block_num , remain , file_len ;
464486
487+ if (!opt_file_permitted ) {
488+ rt_raise (ERR_FILE_PERM );
489+ return 0 ;
490+ }
491+
465492 if (dev_fexists (file )) {
466493 if (dev_fexists (newfile )) {
467494 if (!dev_fremove (newfile )) {
@@ -539,6 +566,10 @@ int dev_fcopy(const char *file, const char *newfile) {
539566 * returns true on success
540567 */
541568int dev_frename (const char * file , const char * newname ) {
569+ if (!opt_file_permitted ) {
570+ rt_raise (ERR_FILE_PERM );
571+ return 0 ;
572+ }
542573 if (dev_fcopy (file , newname )) {
543574 return dev_fremove (file );
544575 }
@@ -550,6 +581,10 @@ int dev_frename(const char *file, const char *newname) {
550581 * BUG: no drivers supported
551582 */
552583void dev_mkdir (const char * dir ) {
584+ if (!opt_file_permitted ) {
585+ rt_raise (ERR_FILE_PERM );
586+ return ;
587+ }
553588#if (defined(_Win32 ) || defined(__MINGW32__ )) && !defined(__CYGWIN__ )
554589 if (mkdir (dir ) != 0 ) {
555590 err_file (errno );
@@ -566,6 +601,10 @@ void dev_mkdir(const char *dir) {
566601 * BUG: no drivers supported
567602 */
568603void dev_rmdir (const char * dir ) {
604+ if (!opt_file_permitted ) {
605+ rt_raise (ERR_FILE_PERM );
606+ return ;
607+ }
569608 if (rmdir (dir ) != 0 ) {
570609 err_file (errno );
571610 }
@@ -724,6 +763,11 @@ int dev_faccess(const char *file) {
724763 int vfslib ;
725764 struct stat st ;
726765
766+ if (!opt_file_permitted ) {
767+ rt_raise (ERR_FILE_PERM );
768+ return 0 ;
769+ }
770+
727771 // common for all, execute driver's function
728772 if ((vfslib = sblmgr_getvfs (file )) != -1 ) {
729773 return sblmgr_vfsdirexec (lib_vfs_access , vfslib , file + 5 );
0 commit comments