diff --git a/app/dialog/cocoa/dlg.m b/app/dialog/cocoa/dlg.m index e90098e74..35851978d 100644 --- a/app/dialog/cocoa/dlg.m +++ b/app/dialog/cocoa/dlg.m @@ -169,37 +169,47 @@ DlgResult fileDlg(FileDlgParams* params) { } NSArray* urls = [panel URLs]; - if(self->params->allowMultiple && [urls count] >= 1) { + if([urls count] == 0) { + return DLG_CANCEL; + } + + if(self->params->allowMultiple) { // For multiple files, we need to return all paths separated by null bytes char* bufPtr = self->params->buf; int remainingBuf = self->params->nbuf; - // Calculate total required buffer size first - int totalSize = 0; - for(NSURL* url in urls) { - char tempBuf[PATH_MAX]; - if(![url getFileSystemRepresentation:tempBuf maxLength:PATH_MAX]) { - return DLG_URLFAIL; - } - totalSize += strlen(tempBuf) + 1; // +1 for null terminator - } - totalSize += 1; // Final null terminator + // Calculate total required buffer size first + int totalSize = 0; + for(NSURL* url in urls) { + char tempBuf[PATH_MAX]; + if(![url getFileSystemRepresentation:tempBuf maxLength:PATH_MAX]) { + return DLG_URLFAIL; + } + totalSize += strlen(tempBuf) + 1; // +1 for null terminator + } + totalSize += 1; // Final null terminator - if(totalSize > self->params->nbuf) { - // Not enough buffer space - return DLG_URLFAIL; - } + if(totalSize > self->params->nbuf) { + // Not enough buffer space + return DLG_URLFAIL; + } - // Now actually copy the paths (we know we have space) - bufPtr = self->params->buf; - for(NSURL* url in urls) { - char tempBuf[PATH_MAX]; - [url getFileSystemRepresentation:tempBuf maxLength:PATH_MAX]; - int pathLen = strlen(tempBuf); - strcpy(bufPtr, tempBuf); - bufPtr += pathLen + 1; - } - *bufPtr = '\0'; // Final null terminator + // Now actually copy the paths (we know we have space) + bufPtr = self->params->buf; + for(NSURL* url in urls) { + char tempBuf[PATH_MAX]; + [url getFileSystemRepresentation:tempBuf maxLength:PATH_MAX]; + int pathLen = strlen(tempBuf); + strcpy(bufPtr, tempBuf); + bufPtr += pathLen + 1; + } + *bufPtr = '\0'; // Final null terminator + } else { + // Single file/directory selection - write path to buffer + NSURL* url = [urls firstObject]; + if(![url getFileSystemRepresentation:self->params->buf maxLength:self->params->nbuf]) { + return DLG_URLFAIL; + } } return DLG_OK; diff --git a/app/server/server.go b/app/server/server.go index 64b96b1fd..2e0c2d1ed 100644 --- a/app/server/server.go +++ b/app/server/server.go @@ -224,9 +224,7 @@ func (s *Server) cmd(ctx context.Context) (*exec.Cmd, error) { if _, err := os.Stat(settings.Models); err == nil { env["OLLAMA_MODELS"] = settings.Models } else { - slog.Warn("models path not accessible, clearing models setting", "path", settings.Models, "err", err) - settings.Models = "" - s.store.SetSettings(settings) + slog.Warn("models path not accessible, using default", "path", settings.Models, "err", err) } } if settings.ContextLength > 0 {