aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2024-04-02 08:08:27 +1000
committerSteve Bennett <steveb@workware.net.au>2024-04-02 08:20:47 +1000
commit4b980e667b2a07f5ea3aeb437079db9be6f89979 (patch)
treee24a5cf225aadd0c7d688b099cf08ce6f430b535
parent47682f265f6ae84e3c661b565af2b8a517b0e121 (diff)
downloadjimtcl-4b980e667b2a07f5ea3aeb437079db9be6f89979.zip
jimtcl-4b980e667b2a07f5ea3aeb437079db9be6f89979.tar.gz
jimtcl-4b980e667b2a07f5ea3aeb437079db9be6f89979.tar.bz2
lsort: don't try to sort a list of length 0 or 1
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index d87a9b5..ec855a2 100644
--- a/jim.c
+++ b/jim.c
@@ -13423,6 +13423,8 @@ static int Jim_LsortCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const arg
int retCode;
int shared;
long stride = 1;
+ Jim_Obj **elements;
+ int listlen;
struct lsort_info info;
@@ -13503,13 +13505,17 @@ badindex:
}
}
resObj = argv[argc - 1];
+ JimListGetElements(interp, resObj, &listlen, &elements);
+ if (listlen <= 1) {
+ /* Nothing to do */
+ Jim_SetResult(interp, resObj);
+ return JIM_OK;
+ }
+
if (stride > 1) {
Jim_Obj *tmpListObj;
- Jim_Obj **elements;
- int listlen;
int i;
- JimListGetElements(interp, resObj, &listlen, &elements);
if (listlen % stride) {
Jim_SetResultString(interp, "list size must be a multiple of the stride length", -1);
return JIM_ERR;