aboutsummaryrefslogtreecommitdiff
path: root/util.h (unfollow)
Commit message (Collapse)AuthorFilesLines
2024-08-12Remove the broken cryptographyRunxi Yu13-339/+5
2024-08-12Fork initRunxi Yu5-4394/+4
2018-07-19Allow bigger filenamesLinus Torvalds1-1/+1
Not that I know why. 80-character filename limits are kind of cute. Joerg suggested _POSIX_PATH_MAX, which is almost certainly the right value. But that's bigger than HUGE: #define HUGE 1000 /* Huge number */ which obviously means we shouldn't go quite *that* extreme. Remember, we come from the days when it was hard to do allocations larger than 64kB. We have limits, dammit. "256 bytes is enough for anybody" Reported-by: Joerg Scheurich <mufti11@web.de> Signed-off-by: Linus Torvalds <torvalds@linux-coundation.org>
2018-07-19Use _GNU_SOURCE instead of _BSD_SOURCE and _SYSV_SOURCELinus Torvalds1-1/+1
uemacs uses a lot of legacy stuff, which causes warnings with newer toolchains. This makes it build reasonably warning-free. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-07-19Do some valgrind cleanupLinus Torvalds7-12/+37
Joerg Scheurich reported that there's a buffer overflow in readin() for long path component names. He's not wrong. When fixing that, and then checking there's nothing else obviously wrong with valgrind, I also noticed it complains about overlapping strcpy(). So add a hacky version of strscpy(), which (a) handles overlapping, and (b) has the proper strscpy() semantics. Just say no to strncpy and strlcpy, both of which are terminally broken interfaces. And stop stripping the binary. The time when the size of the uemacs binary was a big deal is long past, and it made valgrind harder. Reported-by: Joerg Scheurich <mufti11@web.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-03-17Turn NBSP into regular SP on inputLinus Torvalds1-0/+3
Particularly pasting from a web browser, I get a lot of 'space' + 'non-breaking space' noise, and keeping the &nbsp as an actual unicode character ends up being a major pain. Note: this is only done on input. If the file contains the unicode character U+00A0, we'll keep it that way. But you can't enter it from the keyboard (or cut-and-paste, which ends up looking like keyboard input). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-10-02Try updated rule for "is new paragraph"Linus Torvalds1-10/+14
This makes non-alphabetic characters at the beginning be a mark of a paragraph. That's probably bogus, but let's try how it works. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-10-02Make some minor code legibility changesLinus Torvalds1-23/+24
I'm going to play around with the whole "paragraph ends here" logic, but the way it used to be written made that hard. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-12-08Don't use 'char' for number of linesLinus Torvalds2-3/+3
Heh. My new UHD monitor makes it easy to have more than 127 lines of text. I guess the 'char' could be an unsigned char, but quite frankly, trying to save a couple of bytes per open editor window seems a bit excessive these days. So just make it 'int'. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-02-22Stop using 'short' for line and allocation sizesLinus Torvalds2-8/+8
Yes, yes, it probably made sense 30 years ago as a way to save a tiny amount of memory, but especially when interspersed in structures that have pointers (aligned to 64 bits these days), it's not even saving memory today. And it makes us fail in nasty ways when looking at files with long lines. So just make them 'int'. And if you have a line that is longer than 2GB, you only have yourself to blame. I no longer care. In case anybody care, the "test-case" for this was a lovely UDDF file with a binary divecomputer dump encoded as an XML element. Resulting in a lovely 41kB single line. Not what poor micro-emacs was designed for, I'm afraid. I really should just learn another editor, rather than continue to polish this turd. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-02-22Avoid memory access errors if llength() overflowsLinus Torvalds1-1/+1
llength() is currently a 'short' which can overflow and result in signed numbers if line lengths are larger than 32k. We'll fix the overflow separately, but before we do that, just use a signed int to hold the value so that we don't overrun memory allocations when we converted that negative number to a large positive unsigned integer. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-09-24Fix the unicode character limit (0 .. 0x10ffff)Linus Torvalds2-1/+3
For some reason I had limited things to 0xffff, it really should be 0x10ffff. We don't actually support a full 32-bit unicode model anyway, since we use the high bits for the control/meta/^X/special bits, but there was no reason to limit things to 16 bits when we had 28 bits available. And the real limit for real Unicode characters is 0x10ffff. Add a silly example character past the 16-bit range to the UTF8 demo file: 'SMILING FACE WITH HALO' (U+1F607) from the 'emoticons' block. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-08-16uemacs: Remove unused 'lflag' variables from file.cPekka Enberg1-4/+0
GCC spotted the following unused variable: CC file.o file.c: In function ‘readin’: file.c:225:6: warning: variable ‘lflag’ set but not used [-Wunused-but-set-variable] file.c: In function ‘ifile’: file.c:553:6: warning: variable ‘lflag’ set but not used [-Wunused-but-set-variable] Signed-off-by: Pekka Enberg <penberg@kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-15Fix 'getccol()' and 'getgoal()' functions for multibyte UTF-8 charactersLinus Torvalds2-8/+22
These functions convert the byte offset into the column number (getccol()) and vice versa (getgoal()). Getting this right means that moving up and down the text gets us the right columns, rather than moving randomly left and right when you move up and down. We also won't end up in the middle of a utf-8 character, because we're not just moving into some random byte offset, we're moving into a proper column. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-11Fix vtputc() and simplify show_line by using it againLinus Torvalds1-24/+10
This re-introduces vtputc() as the way to show characters, which reinstates the control character handing, and simplifies show_line() in the process. vtputc now takes an "int" that is either a unicode character or a signed char (so negative values in the range [-1, -128] are considered to be the same as [128, 255]). This allows us to use it regardless of what the source of data is. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-11Start doing character removal properlyLinus Torvalds6-16/+48
This makes actual basic editing work. Including things like justify-paragraph etc, so lines get justified by number of UTF8 characters rather than bytes. There are probably tons of broken stuff left, but this actually seems to get the basics working right. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-11Start actually inserting full utf8 sequencesLinus Torvalds2-2/+21
This makes it possible to cut-and-paste the UTF8 testfile into a new buffer, and the end result looks correct. NOTE! We still do various things wrong while editing. For example, while the cursor movements were fixed, simple things like deleting a character still work on single bytes, rather than utf8 characters. So while this is getting much closer to actually editing UTF-8 data, it's not there yet. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-11Make 'show_line()' do proper TAB handlingLinus Torvalds1-4/+17
The TAB handling got broken by commit cee00b0efb86 ("Show UTF-8 input as UTF-8 output") when it stopped doing things one byte at a time. I'm sure the other special character cases are broken too. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Expand keycode to 'int' from 'short'Linus Torvalds1-5/+5
This uses the four high bits for the meta and control key sequences. This means that we will be limiting our Unicode space to 28 bits, but that's more than we really need. It *would* be nicer if we just used the sign bit to mark "we have meta character information") but that would require bigger changes. And we really don't need to worry about 30-bit unicode. Small steps, remember. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10character input: make sure we have enough bytes for a full utf8 characterLinus Torvalds1-2/+19
.. but we do have that 0.1s delay, so if somebody feeds us non-utf8 sequences, we won't delay forever. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10utf8: make sure to honor the array length properlyLinus Torvalds1-2/+2
Right now the input side can give partial utf8 input, and that showed that we didn't properly handle that case. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Make kbd macro save area use 'int' instead of shortLinus Torvalds2-6/+6
I'm starting to expand the input value from 'short' (with flags in the upper eight bytes) to 'int' (with negative values having flags). Small baby steps. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Use utf8 helper functions for keyboard inputLinus Torvalds1-49/+17
ttgetc() used some homebrew utf8 to unicode translation, limited to just the normal latin1 characters. Use the utf8 helper functions to get it right for the more complex cases. NOTE! We don't actually handle characters > 0xff right anyway. And we still end up doing Latin1 in the buffers on input. One small step at a time. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Make cursor movement (largely) understand UTF-8 character boundariesLinus Torvalds3-11/+31
Ok, so it may do odd things if it's not truly utf-8, and when moving up and down lines that have utf-8 the cursor moves oddly (because the byte offset within the line stays constant, rather than the character offset), but with this you can actually open the UTF8 example file and move around it, and at least some of the movement makes sense. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Split up the utf8 helper functions into a file of their ownLinus Torvalds5-67/+119
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Remove the old utf8_mode thing.Linus Torvalds2-18/+0
Let's just plan on being fully utf8 some day. We're not there yet, and maybe we'll never be, but having the halfway mode is not useful either. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Show UTF-8 input as UTF-8 outputLinus Torvalds1-3/+59
.. by doing the stupid "convert to unicode value and back" model. This actually populates the 'struct video' array with the unicode values, so UTF8 input actually shows correctly. In particular, the nice test-file (UTF-8-demo.txt) shows up not as garbage, but as the UTF-8 it is. HOWEVER! Since the *editing* doesn't know about UTF-8, and considers it just a stream of bytes, the end result is not actually a usable utf-8 editor. So don't get too excited yet: this is just a partial step to "actually edit utf8 data" NOTE NOTE NOTE! If the character buffer contains Latin1, we will transform that Latin1 to unicode, and then output it as UTF8. And we will edit it correctly as the character-by-character data. Also, we still do the "UTF8 to Latin1" translation on *input*, so with this commit we can actually continue to *edit* Latin1 text. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Make the 'struct video' contain an array of unicode characters rather than bytesLinus Torvalds2-37/+40
This is disgusting. And quite frankly, it's debatable whether this will ever work. The "line" structure is still just an array of characters, so that has to work with utf-8. But the 'struct video' thing is what represents the actual screen rectangle, and is fixed-size by the size of the screen. So making it contain actual 32-bit unicode characters *may* make sense. Right now we translate things the same way we always used to, though, so utf-8 in 'struct line' will not be translated to the proper unicode array, but to the bytes of the utf-8 representation. So this really doesn't improve anything per se yet, just expands the memory use of the video array. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-10Show lines with a single helper function, not one byte at a timeLinus Torvalds2-12/+17
Let's see how hard it is to show UTF-8 characters properly. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-05-26Make uemacs build on FreeBSD.Naohiro Aota2-1/+4
See <https://bugs.gentoo.org/show_bug.cgi?id=387135>. Signed-off-by: Ulrich Müller <ulm@gentoo.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-25spawn.c: do the "keyboard open/close" around shell invocationsLinus Torvalds1-0/+6
I'm not 100% sure we really should even be doing this whole "keyboard" open/close for termcap, but even if the right thing to do ends up being to just do everything in the TTopen/TTclose (and make TTkopen/TTkclose no-ops), it does seem to be the right thing to do. Reported-by: Bijan Soleymani <bijan@psq.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-25file.c: remove crazy keyboard open/close callsLinus Torvalds1-8/+0
It seems to have something to do with some old DOS mode, and not having keyboard translation on ("Insert floppy A:" questions while opening files? Whatever). But this is while doing normal file opens, and it is just insane to open/close a tty across a file open. The possible tty init/exit sequence would mess up some of the file read/write messages. Reported-by: Bijan Soleymani <bijan@psq.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-25Force a screen re-draw after tcap 'ti' on terminal openLinus Torvalds1-0/+7
The 'tcapkopen()' function re-initializes the terminal with the 'ti' sequence, which for most sane termcap entries is just empty. But for 'xterm', that seems to actually be a real control sequence (clear and reset?), and we'd better tell display.c that the screen is now garbage and needs to be re-drawn. Also, make tcapkclose() match the 'ti' (terminal init) with a 'te' (terminal exit). Maybe we should just stop playing games with ti/te, but this at least improves the situation a bit. Reported-by: Bijan Soleymani <bijan@psq.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-22uemacs: Add -g options to the output usage.Thiago Farina1-2/+3
While I'm here, improve the word of the above two options. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-22Respect LDFLAGS when linking.Ulrich Müller1-1/+1
Signed-off-by: Ulrich Müller <ulm@gentoo.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-08-22Show xA0 (nbsp) as a non-printable characterLinus Torvalds1-1/+1
I want to see the difference between space and nbsp, and I consider nbsp to be a control character, so show it as such. Even if it is technically "printable". Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-12-16uemacs: display.c: Use the newly introduced xmalloc function.Thiago Farina1-19/+5
Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-12-16uemacs: Add xmalloc as a wrapper function for malloc.Thiago Farina3-4/+12
xmalloc checks the returned pointer and dies if it failed to allocate the memory. Use this new function in window.c. More places will be converted to use xmalloc latter. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-12-14uemacs: Make some magic variables private to search.c module.Thiago Farina3-25/+14
Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-12-14uemacs: input.c: Fix mkstemp warning.Thiago Farina6-9/+61
Fix the following warning: input.c: In function ‘getstring’: input.c:590: warning: ignoring return value of ‘mkstemp’, declared with attribute warn_unused_result This add usage.c module for die function. This also add wrapper.c module for the xmkstemp that is wrapper function around the original mkstemp function. Both module codes was largelly based on git, linux and sparse codes. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-30uemacs: convert typedef struct RMC to struct magic_replacement.Thiago Farina4-11/+12
Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-28uemacs: Move MAXNLINE constant from estruct.h to file.cThiago Farina2-4/+5
This constant is used only there, so there is no reason for it to be in estruct.h Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-28uemacs: Move some constants from estruct.h to posix.cThiago Farina2-14/+15
These two constants are only needed/used by the posix.c file, so just define them there. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-28uemacs: buffer.c: Fix uninitialized struct warning.Thiago Farina1-2/+2
This fix the following warning: buffer.c: In function ‘nextbuffer’: buffer.c:45: warning: ‘bp’ may be used uninitialized in this function Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-28uemacs: convert typedef struct MC to struct magic.Thiago Farina5-21/+21
Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-24uemacs: Move uv variable into the eval.c source file.Thiago Farina2-5/+5
It's used only there. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-18uemacs: add line.h in names.c to fix compiling errorLi Jie1-0/+1
I got following errors while compiling uemacs: names.c:132: error: ‘insspace’ undeclared here (not in a function) names.c:217: error: ‘yank’ undeclared here (not in a function) make: *** [names.o] Error 1 It looks like names.c needs line.h for function declarations. Signed-off-by: Li Jie <eltshanli@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-15uemacs: Move NBLOCK constant into line.cThiago Farina2-4/+5
This constant is only used in line.c. So just keep it there. Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-15uemacs: Move structure line and its functions to its own header file.Thiago Farina19-130/+160
Signed-off-by: Thiago Farina <tfransosi@gmail.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-11-14uemacs: Kill dead codePekka Enberg2-26/+0
This patch kills #ifdef'd code from display.c and file.c. Signed-off-by: Pekka Enberg <penberg@kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>