Here's some code that should help. I found that you have to look at each return code to see if it's really an error. This routine does do syntax checking, it's just a little more complicated than before :^)
#define INCL_DOSFILEMGR #define INCL_DOSERRORS #include <os2.h> #include <stdio.h> int main( int argc, char **argv ) { int rc; FILESTATUS3 piBuffer; if ( argc !=2 ) { printf( "Must pass filename on command line!\n"); return( -1 ); } else { printf( "Checking on %s, ", argv[ 1 ] ); rc = DosQueryPathInfo( (PSZ)argv[1], FIL_STANDARD, &piBuffer, sizeof(FILESTATUS3)); if ( rc == 0 ) printf( "syntax valid and file exists\n" ); else if ( rc == ERROR_FILE_NOT_FOUND ) printf( "syntax valid and file doesn't exist.\n"); else if ( rc == ERROR_PATH_NOT_FOUND ) printf( "syntax valid, somthing in path was not found\n"); else { printf( "bad, rc=%d, ",rc ); switch( rc ) { case ERROR_INVALID_DRIVE: printf( "drive name does not exist\n"); break; case ERROR_INVALID_NAME: printf( "invalid syntax for drive name\n"); break; case ERROR_FILENAME_EXCED_RANGE: printf( "dir name and/or filename too long\n"); break; case ERROR_SHARING_VIOLATION: printf( "sharing violation\n"); break; case ERROR_BUFFER_OVERFLOW: printf( "buffer overflow\n"); break; case ERROR_INVALID_LEVEL: printf( "invalid level requested\n"); break; case ERROR_INVALID_EA_NAME: printf( "invalid EA name\n"); break; case ERROR_EA_LIST_INCONSISTENT: printf( "EA list inconsistent\n"); break; default: printf("Undocumented return value.\n"); } return( -1 ); } return( 0 ); } }
Credit: Mike Brown