diff options
author | drh <drh@noemail.net> | 2018-01-10 17:19:16 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2018-01-10 17:19:16 +0000 |
commit | 410cad975f82a286ca3a0256ea865947be0a31cb (patch) | |
tree | 47cb60e2c9fc1cfddc4fd1f954dfb41feb7e4d7f /ext/misc/fileio.c | |
parent | 634c70fa1586565fe08a8f208691061cd36602dc (diff) | |
download | sqlite-410cad975f82a286ca3a0256ea865947be0a31cb.tar.gz sqlite-410cad975f82a286ca3a0256ea865947be0a31cb.zip |
In the fileio.c extension, change the filetype(MODE) function into lsmode(MODE).
Use the new lsmode(MODE) function in shell.c.
FossilOrigin-Name: 52d12ba9f33c1f2620776e189c81f3bf991759344ecdd167ea2a6107f0972b9d
Diffstat (limited to 'ext/misc/fileio.c')
-rw-r--r-- | ext/misc/fileio.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/ext/misc/fileio.c b/ext/misc/fileio.c index 8f6de7a80..f126a2e43 100644 --- a/ext/misc/fileio.c +++ b/ext/misc/fileio.c @@ -358,27 +358,37 @@ static void writefileFunc( } /* -** SQL function: filetype(MODE) +** SQL function: lsmode(MODE) ** -** Based on the integer mode, return one of "file", "directory", or "symlink". +** Given a numberic st_mode from stat(), convert it into a human-readable +** text string in the style of "ls -l". */ -static void fileTypeFunc( +static void lsModeFunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ - const char *zMode; + int i; int iMode = sqlite3_value_int(argv[0]); + char z[16]; if( S_ISLNK(iMode) ){ - zMode = "symlink"; + z[0] = 'l'; }else if( S_ISREG(iMode) ){ - zMode = "file"; + z[0] = '-'; }else if( S_ISDIR(iMode) ){ - zMode = "directory"; + z[0] = 'd'; }else{ - zMode = "unknown"; + z[0] = '?'; + } + for(i=0; i<3; i++){ + int m = (iMode >> ((2-i)*3)); + char *a = &z[1 + i*3]; + a[0] = (m & 0x4) ? 'r' : '-'; + a[1] = (m & 0x2) ? 'w' : '-'; + a[2] = (m & 0x1) ? 'x' : '-'; } - sqlite3_result_text(context, zMode, -1, SQLITE_STATIC); + z[10] = '\0'; + sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT); } #ifndef SQLITE_OMIT_VIRTUALTABLE @@ -793,8 +803,8 @@ int sqlite3_fileio_init( writefileFunc, 0, 0); } if( rc==SQLITE_OK ){ - rc = sqlite3_create_function(db, "fileType", 1, SQLITE_UTF8, 0, - fileTypeFunc, 0, 0); + rc = sqlite3_create_function(db, "lsmode", 1, SQLITE_UTF8, 0, + lsModeFunc, 0, 0); } if( rc==SQLITE_OK ){ rc = fsdirRegister(db); |