Fix image filename encoding issues (bug#48902)
* src/image.c (image_find_image_fd): Don't return an encoded filename string. * src/nsfns.m: ([NSString stringWithLispString:]): Clarify usage comment. * src/nsimage.m ([EmacsImage allocInitFromFile:]): No need to encode the filename when converting to NSString.
This commit is contained in:
parent
a63587c546
commit
fb62846b68
3 changed files with 16 additions and 19 deletions
23
src/image.c
23
src/image.c
|
@ -3153,19 +3153,16 @@ image_find_image_fd (Lisp_Object file, int *pfd)
|
|||
/* Try to find FILE in data-directory/images, then x-bitmap-file-path. */
|
||||
fd = openp (search_path, file, Qnil, &file_found,
|
||||
pfd ? Qt : make_fixnum (R_OK), false, false);
|
||||
if (fd >= 0 || fd == -2)
|
||||
if (fd == -2)
|
||||
{
|
||||
file_found = ENCODE_FILE (file_found);
|
||||
if (fd == -2)
|
||||
{
|
||||
/* The file exists locally, but has a file name handler.
|
||||
(This happens, e.g., under Auto Image File Mode.)
|
||||
'openp' didn't open the file, so we should, because the
|
||||
caller expects that. */
|
||||
fd = emacs_open (SSDATA (file_found), O_RDONLY, 0);
|
||||
}
|
||||
/* The file exists locally, but has a file name handler.
|
||||
(This happens, e.g., under Auto Image File Mode.)
|
||||
'openp' didn't open the file, so we should, because the
|
||||
caller expects that. */
|
||||
Lisp_Object encoded_name = ENCODE_FILE (file_found);
|
||||
fd = emacs_open (SSDATA (encoded_name), O_RDONLY, 0);
|
||||
}
|
||||
else /* fd < 0, but not -2 */
|
||||
else if (fd < 0)
|
||||
return Qnil;
|
||||
if (pfd)
|
||||
*pfd = fd;
|
||||
|
@ -3173,8 +3170,8 @@ image_find_image_fd (Lisp_Object file, int *pfd)
|
|||
}
|
||||
|
||||
/* Find image file FILE. Look in data-directory/images, then
|
||||
x-bitmap-file-path. Value is the encoded full name of the file
|
||||
found, or nil if not found. */
|
||||
x-bitmap-file-path. Value is the full name of the file found, or
|
||||
nil if not found. */
|
||||
|
||||
Lisp_Object
|
||||
image_find_image_file (Lisp_Object file)
|
||||
|
|
|
@ -3024,7 +3024,8 @@ - (NSString *)panel: (id)sender userEnteredFilename: (NSString *)filename
|
|||
}
|
||||
|
||||
@implementation NSString (EmacsString)
|
||||
/* Make an NSString from a Lisp string. */
|
||||
/* Make an NSString from a Lisp string. STRING must not be in an
|
||||
encoded form (e.g. UTF-8). */
|
||||
+ (NSString *)stringWithLispString:(Lisp_Object)string
|
||||
{
|
||||
/* Shortcut for the common case. */
|
||||
|
|
|
@ -254,15 +254,15 @@ + (instancetype)allocInitFromFile: (Lisp_Object)file
|
|||
NSImageRep *imgRep;
|
||||
Lisp_Object found;
|
||||
EmacsImage *image;
|
||||
NSString *filename;
|
||||
|
||||
/* Search bitmap-file-path for the file, if appropriate. */
|
||||
found = image_find_image_file (file);
|
||||
if (!STRINGP (found))
|
||||
return nil;
|
||||
found = ENCODE_FILE (found);
|
||||
filename = [NSString stringWithLispString:found];
|
||||
|
||||
image = [[EmacsImage alloc] initByReferencingFile:
|
||||
[NSString stringWithLispString: found]];
|
||||
image = [[EmacsImage alloc] initByReferencingFile:filename];
|
||||
|
||||
image->bmRep = nil;
|
||||
#ifdef NS_IMPL_COCOA
|
||||
|
@ -277,8 +277,7 @@ + (instancetype)allocInitFromFile: (Lisp_Object)file
|
|||
}
|
||||
|
||||
[image setSize: NSMakeSize([imgRep pixelsWide], [imgRep pixelsHigh])];
|
||||
|
||||
[image setName: [NSString stringWithLispString: file]];
|
||||
[image setName:filename];
|
||||
|
||||
return image;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue