Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz 427427bc82 Create uncached glyphs on demand instead of checking glyph availability upfront.
This safes a HasGlyphs() call which would convert the whole string to glyph
codes and look each of the glyphs up in the cache entry, just to do the same
again during the loop where they are actually used. Instead we now simply switch
to the write lock and look up the fallback entry when hitting the first uncached
glyph. This benefits the normal case of having all glyphs cached without any
drawbacks.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40186 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-01-09 21:24:09 +00:00
Michael Lotz 5c89315772 Implement missing glyph handling, making the glyph retrieval the following:
1. If the glyph is cached, return it, as before.
2. Try to find a glyph in the fallback font, as before.
3. Check for ignorable characters as per Unicode and cache and return a zero
   width glyph (rendering as completely invisible).
4. Reset to the original font.
5. Check for whitespace as per Unicode and cache and return the normal space
   glyph.
6. If there still is no valid glyphIndex, continue with index 0 which caches
   and returns the usual "missing glyph box".

This implements the Unicode suggestions on how to handle missing glyphs and
closes #7077.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40174 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-01-09 04:10:13 +00:00
Michael Lotz 2004d8c100 LayoutGlyphs() was broken in various ways when encountering missing glyphs:
* The code used continue to restart the loop when encountering a missing glyph,
  but in that case the index wouldn't be incremented, meaning the consumers
  would received the same index for ConsumeEmptyGlphy() and ConsumeGlyph() and
  at the end there was not necessarily a call for every index, resulting in
  uninitialized array elements for GetHasGlyphs, GetEdges, GetEscapements and
  GetBoundingBoxes.
* Since the advance values were not reset in case of a missing glyph but still
  added for the next char, the coordinates the consumers would get were advanced
  by the advance values of the glyph preceeding the missing glyph(s). This made
  StringWidth return wrong widths.
* The loop end condition was skipped by the continue as well, which would have
  resulted in overruns when there were problematic chars at the end of a string.

Fixes #7075 where the uninitialized array elements caused random truncation
errors. The problematic character in this case is a tab, that has no glyph as
it is a dynamic spacer. Previously this was resolved to the "missing glyph"
(the box) which had a width.

I find it highly problematic not to fall back to such a glyph, because there is
no real way to see that you're using a font that has missing glyphs. Instead
those are simply collapsed to nothing with this change (instead of being
random). This whole problem is only brought up by not guaranteeing that there
always is a glyph as was the case before where a missing glyph was replaced by
the box.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40172 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-01-08 23:17:18 +00:00
Michael Lotz c3dab48ba4 Add a way to cancel a started message.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40020 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 08:30:25 +00:00
Michael Lotz 49e57f098a Add support for the screen offset and scale to remote shape drawing. This brings
back scrollbar icons and menu markers for example after they got broken when
the offset was introduced.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40019 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 08:19:59 +00:00
Michael Lotz 566d89aec9 Forgot that in r40016, needed for utf8_functions.h.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40017 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 07:54:10 +00:00
Michael Lotz 8b600b7cb7 Implement RP_DRAW_STRING_WITH_OFFSETS. Untested though, especially the bounding
box part should be validated.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40016 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 07:53:21 +00:00
Michael Lotz c4b45a0c4d Implement RP_DRAW_BITMAP_RECTS on the client side.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40015 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 07:04:01 +00:00
Michael Lotz 7162595e84 Implement a new RP_DRAW_BITMAP_RECTS which splits up bitmaps to be sent into the
relevant parts (i.e. removes clipped or out of bounds parts) and does local
scaling in case the view rect is smaller than the bitmap rect. This avoids
sending the full blown bitmaps across when they are in the end scaled to a much
smaller representation. It's nowhere near perfect yet, but it's useable and
improves the network traffic heaviness quite a bit depending on the application.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40014 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-29 07:03:03 +00:00
Michael Lotz 8e164a0fe2 Add way to add a "minimal" bitmap without colorspace/flags for adding multiple
similar bitmaps.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40003 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 22:17:28 +00:00
Michael Lotz 645e9fe135 Cleanup which should've been part of r39972.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40002 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 22:12:13 +00:00
Michael Lotz 1c3680d302 Allow creating a BitmapDrawingEngine with a specific colorspace.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40000 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 22:08:46 +00:00
Michael Lotz 2baa527f82 CID 3221: Add missing break.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39989 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 19:08:37 +00:00
Michael Lotz 2d5c8bdea3 CID 10552: Fix double free in error case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39988 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 18:55:00 +00:00
Michael Lotz 5c3457dd22 CID 7961: Use snprintf with proper sizes to make sure nothing overflows.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39986 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 16:52:29 +00:00
Michael Lotz edcbc5b0e3 CID 5889: The bytes array was leaked.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39985 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 16:44:24 +00:00
Michael Lotz 5327be44ec Remove unused members. Also resolves CID 10230 that complained about them not
being initialized.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39984 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 16:22:29 +00:00
Michael Lotz aa8219391f Someone forgot to initialize fUpdate15 and fColor15 when adding 15bit color
support some 7 years ago...
CID 10246, 10245, 10244, 9471, 9454 and 9453 all concerning that (in the
different constructors / assignements).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 15:59:07 +00:00
Michael Lotz 8e165582f1 CID 10229: fDraggingMessage was not initialized, potentially sending out drag
messages where there shouldn't have been any.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39980 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 13:04:43 +00:00
Michael Lotz d65593aaa3 CID 1420: fTargetScreen was leaked.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39979 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 12:59:14 +00:00
Michael Lotz 673481f371 CID 2502: Check the FindMessage return which also safes a needless FindRect call
in the error case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39978 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 12:55:19 +00:00
Michael Lotz 951366c59d CID 10231: Remove unused fInputPort member and initilize fShutdownCount, even
though it's used only in the special case of running as BApplication.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39977 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 12:47:22 +00:00
Michael Lotz 56c393e396 Cleanup, no functional change intended. Style, line length, early returns,
variable names, added TODO, variable declaration on first use, simplify some
code, add missing sanity checks...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39972 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 02:05:35 +00:00
Michael Lotz 25702ce874 * Use std::nothrow and check the bitmap/cursor allocations.
* CID 2500 and 2501: Check the BMessage::FindData() returns.
* Defensive programming: Take the bitmap/cursor BitsLength() into account when
  copying the data back.
* Some style cleanup, automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39971 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 01:19:47 +00:00
Michael Lotz 83e36298a5 CID 2977: Use the array delete operator.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 01:00:27 +00:00
Michael Lotz 174a961e22 CID 5885: Resource leak in error case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39969 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-28 00:55:17 +00:00
Michael Lotz c907ee755a Undo the part of r34947 that changed the re-use check. It wasn't broken, since
the address variable is incremented in the loop above and at the end will be
equal to sNextVirtualAddress if the address space can be reused. Fixes early
boot resets due to wrongly reused virtual addresses (and them being freed while
still in use by the original user). Fixes #7026, thanks to Urias for testing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39961 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-27 02:15:05 +00:00
Michael Lotz b2acbcbfb3 CID 8122, 2210 (pointing at the same), 8121 and 2209 (pointing at the same):
Taking the size of a pointer instead of the actual extended registers struct.
Not sure this is used, but if it is it made the whole fpu/sse state in the
debugger useless.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39960 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-27 01:44:43 +00:00
Michael Lotz 6c38786311 CID 2208 and 8119 (both pointing at the same issue): The strlcpy() was using
sizeof(char *) instead of the separately supplied textSize argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39959 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-27 01:29:46 +00:00
Michael Lotz f3eff1ca00 Free the header after possibly accessing it when tracing is enabled. Also guard
the trace output against header being NULL (i.e. failed to map).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39958 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-27 00:51:05 +00:00
Michael Lotz cd7155635d CID 8115: Fix wrong size parameter to memcmp() which lead to a broken equality
operator.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39957 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-26 23:49:15 +00:00
Michael Lotz dcea2eba12 CID 2196: The sanity check did check the pointer size instead of the type size.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39956 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-26 23:22:43 +00:00
Michael Lotz 79dd7e57fa Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39955 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-26 23:16:04 +00:00
Michael Lotz 6b81e70656 * CID 2195: sizeof() was used on the buffer pointer instead of the type.
* Use strlcpy() instead of memcpy() to ensure that the dirent is properly
  terminated.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39954 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-26 23:07:18 +00:00
Michael Lotz 4462c768e6 CID 8076 and 2191 (both pointing out the same): Only the first sizeof(pointer)
bytes were initialized to 0 due to wrong use of sizeof().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-26 22:42:28 +00:00
Michael Lotz 5377c49be4 CID 4383 and 4384: Fix wrong checks of index values against kMaxWorkspaces that
could otherwise lead to out of bound access.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39933 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-24 02:20:33 +00:00
Michael Lotz 2e3c20430a CID 4091: fTabOffset is unsigned so the < 0 comparison makes no sense.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39932 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-24 02:08:54 +00:00
Michael Lotz 95e95fee39 * CID 10247: Initialize those two members. Didn't do any harm since they depend
on a set view bitmap and are set when setting one.
* We can safe that resize_frame() call in case no view bitmap is set.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39931 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-24 01:40:36 +00:00
Michael Lotz 3b1679f9c5 * CID 8120: The size supplied to the attach call was the one of the pointer, so
the data was never correctly attached.
* CID 5886 and 5887: escapements and offsets were not freed in the error case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39930 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-24 01:13:28 +00:00
Michael Lotz e910a0a3b7 CID 4186: The glyph_index is unsigned, so a >= 0 comparison is always true. The
"empty glyph index" as per freetype (which is eventually called) actually is 0,
so a != 0 comparison should be correct. Untested though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-24 00:58:57 +00:00
Michael Lotz 626e25b19e Remove the apostrophe as pointed out by Urias.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39925 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-23 22:03:08 +00:00
Michael Lotz 3a8bae7cf2 Fix a typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39924 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-23 21:45:17 +00:00
Michael Lotz 88cbc0dbc5 Remove unused member. Fixes CID 9579.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39912 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 01:09:15 +00:00
Michael Lotz d10320e0e0 It's a HIDReportItem * array not a HIDReportItem ** one. Fixes CID 8078.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39911 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 01:04:13 +00:00
Michael Lotz beaabe98d1 Fix CID 9580 although it is harmless as the _Reset() call before parsing does
initialize the member.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 01:01:28 +00:00
Michael Lotz 13486cf531 Fix dereference after free. CID 10543.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 00:49:49 +00:00
Michael Lotz b950cc6532 * Enlarge the device name buffer a bit as with a deep enough hierarchy we might
actually hit this limit.
* Use snprintf() instead of sprintf() as suggested by CID 6447 (even though the
  USB module isn't supposed to return such a malformed string).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 00:42:21 +00:00
Michael Lotz bf905cfe0c * Fix another non-problematic hidden parameter CID 5218.
* Check the length of the incoming buffer before accessing it through the union.
  It's necessary to do this dependent on the operation at hand, since the caller
  doesn't need to provide the full union size and the size may differ between
  (still compatible) protocol versions.
* Replace memcpy() by user_memcpy() where data is exchanged with userland.
* Small style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39907 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 00:36:23 +00:00
Michael Lotz 3d7bd2dc23 Cosmetical change only: don't shadow the "buffer" parameter with the local
variable. Didn't matter, as the parameter is only accessed through the
usb_raw_command variable that it is casted to early in the function. CID 5219.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-21 00:06:16 +00:00
Michael Lotz 1579900f55 Fix uninitialized fAllocator member. In the error case the destructor could
crash trying to delete the not created allocator. CID 9562.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39905 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-20 23:32:39 +00:00
Michael Lotz 0153c18eed That the members aren't initialized in the constructor as pointed out by
Coverity was intentional (as explained by the comment). That the fInterval
member was somehow totally forgotten though, wasn't. This should only affect
EHCI and OHCI as they take the interval into account. Might fix some strange
behaviour, but most likely won't, as the interval range is rather narrow and
shouldn't be too noticeable if set incorrectly. CID 9558.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-20 23:24:38 +00:00
Michael Lotz 9028c687fb That one slipped by in the last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39764 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:49:22 +00:00
Michael Lotz 95fe58a78d Clean out backwards compatibility cruft, local copy of USB header, packageing
rules and support files that don't really apply anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39763 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:44:10 +00:00
Michael Lotz b994a18508 Port of usb_serial to the generic tty module. I don't remember exactly if or how
well this was working, but since it was non-functional on Haiku anyway this
shouldn't hurt.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39762 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:32:24 +00:00
Michael Lotz 503233ca7d * Remove a line of useless or-ing the same values on the variable.
* Try setting FTDI line state (I think)...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39761 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:29:12 +00:00
Michael Lotz 91bcf08ee5 Adding a generic tty module based largely on the tty driver. This has a new API
and doesn't come with BeOS backwards compatibility. It also has the BeOS
compatibility ioctl ops removed and such. I've actually made this back in april,
so I don't really remember any more details.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39760 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:24:12 +00:00
Michael Lotz deb25b1cc2 Add a few commonly used macros for line state setting/getting.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39759 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-12-08 00:11:01 +00:00
Michael Lotz 6bb5960fd6 Temporary workaround to the MSI issue on broadcom570x. Fixing for real later,
but this one should go into alpha2 to make the card work as before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-05-08 15:38:26 +00:00
Michael Lotz b59539c7ce Ensure that the PCI module is initialized when using the x86 specific module as
it makes use of gPCI which is initialized during pci module init. Might help
with #5936.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-05-08 15:09:28 +00:00
Michael Lotz dea3dab422 Forgot to commit the removal of the old file in r36223.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36741 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-05-08 14:57:21 +00:00
Michael Lotz 1da48c4149 Simplify the SetTrigger() code. The trigger is a single byte char anyway, so no
need to convert the looked up label position to a char code. Also actually make
sure that the trigger is lower case by doing an explicit tolower() instead of
assuming that it already is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36316 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 18:56:34 +00:00
Michael Lotz bae33cdad5 Automatic whitespace cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36315 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 18:54:30 +00:00
Michael Lotz 8c4c164a91 Make the result a proper const char *.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36313 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 18:51:49 +00:00
Michael Lotz 2272ecea26 zooey+mmlr:
* Ensure that there is still buffer left when 0-terminating the buffer in
  RealText().
* Remove the fExtraCount member and instead make it into a constant as that's
  how it's used and more obvious.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 17:22:16 +00:00
Michael Lotz 5c4e7641a7 zooey+mmlr:
* Large cleanup in _FindLineBreak(), be a bit more clever by storing the found
  offsets instead of calculating them multiple times, use
  _TabExpandedStyledWidth() instead of _StyledWidth() and manual tab calculation
  which was also broken (it assumed tabs were consequtive which was possibly not
  the case).
* Modified CanEndLine() to also return true when going from non-whitespace to
  whitespace and the other way around which is more logical (so we'd break after
  the word and not after word + whitespace, even though we actually do that
  in the end by eating whitespace after words in _FindLineBreak()).
* The TextGapBuffer is not necessarily 0 terminated, so RealCharAt() needs to
  check if the index is at the end of the string and return 0 in that case.
  Before it would access the buffer "out by one" which could've lead to a crash.
* Simplified the gap moving calculations by removing some no-op calculations.
* Added debugger calls in TextGapBuffer in case of invalid use.
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36304 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 16:12:16 +00:00
Michael Lotz ec7d168081 Automatic whitespace cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36301 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 15:48:48 +00:00
Michael Lotz fdad233b47 Move the actual area deletion out of the locked section as we could otherwise
double/deadlock when we delete heap areas because of other area deletions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36284 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 11:13:16 +00:00
Michael Lotz 1888e2289d bonefish+mmlr:
The O_CLOEXEC open mode wasn't actually set in the close-on-exec bitmap causing
all files opened with O_CLOEXEC (like done in the storage kit classes) to still
be inherited. This caused for example to be unable to unmount volumes when
opening apps while Tracker touched some files (i.e. copying some large files)
since these apps would inherit the file descriptor and therefore keep the
volume busy.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36273 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 21:46:14 +00:00
Michael Lotz 74fc3e9a8b bonefish+mmlr:
* Add file descriptor and IO context tracing.
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36272 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 21:38:08 +00:00
Michael Lotz fc04fb092c bonefish+mmlr:
Don't delete the (uninitialized) debugInfo if loading failed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36254 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 12:08:51 +00:00
Michael Lotz 545259ff2e This fixes the debug build of libroot.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36253 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 12:07:09 +00:00
Michael Lotz 38fc536e05 Some more constness.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36250 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 09:44:15 +00:00
Michael Lotz 19b8f8a080 Cleanup and some added constness.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36249 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 09:32:11 +00:00
Michael Lotz cc9f959d8b Rename usbspec_p.h to usbspec_private.h and fix header guards.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36248 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 09:13:55 +00:00
Michael Lotz 853e6be8ca * Rename usb_p.h to usb_private.h.
* Some automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36247 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 09:10:48 +00:00
Michael Lotz 72457eddbc Add a yet unused physical memory version of queue_bulk_v(). For full/lowspeed
devices it's uninteresting, but for EHCI it may be implemented some day.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36246 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 08:42:20 +00:00
Michael Lotz 661d8af64c The cloned area to access the userspace buffer in the case of fragmented
transfers was created with wrong permissions leading to a read-protected area.
Since we actually support read-protection in Haiku this caused a crash for all
fragmented transfers (transfers > 384K) leading to #5538.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36245 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-14 08:32:22 +00:00
Michael Lotz ee6e756ef1 Add license headers as pointed out by Jérôme.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36240 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 21:55:52 +00:00
Michael Lotz 696914f907 If device allocation fails, retry the attach process, i.e. reset and initialize
the device again. Makes Axel's USB stick work and might also help with other
(broken) devices.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36234 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 18:26:26 +00:00
Michael Lotz 2b5b2e045a Implement MSI support using the x86 specific PCI module in the FreeBSD
compatibility layer. This should make some network and wireless hardware use
MSIs and therefore solve issues related to interrupt sharing and wrongly
advertised interrupt lines.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36225 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 15:24:18 +00:00
Michael Lotz 2548ea219a * Add the framework for adding an arch specific module to the PCI bus_manager.
* Implement such a module for x86 which currently exports only an MSI API.
* Implement the PCI part for configuring and enabling MSIs.
* Some automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36223 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 15:18:46 +00:00
Michael Lotz 33fbe25496 * Add code to allocate and free interrupt vectors for message signaled
interrupts (MSI).
* Add the remaining IDT entries and redirection functions in the interrupt code.
* Make the PIC end_of_interrupt() return a result to indicate whether the vector
  was handled by this PIC. If it isn't we now issue a apic_end_of_interrupt()
  in the assumption of apic local interrupt, MSI or IPI. This also removes
  the need for the gUsingIOAPIC global and doing manual apic_end_of_interrupt()
  calls in the SMP and timer code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36221 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 14:46:09 +00:00
Michael Lotz aeae7bf4dc Add ffs() (find first set bit, starting at least significant) to the kernel.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36220 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 14:34:06 +00:00
Michael Lotz 3d310bd5f4 * Fix build, the APIC definitions are used in the bootloader too.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36189 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-12 15:59:40 +00:00
Michael Lotz 5819c3f9ff Forgot to remove these in the previous commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36183 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-12 13:07:21 +00:00
Michael Lotz 655f3b4161 Seperate the generic (local) APIC stuff into it's own file and use it from the
other places where previously the same functionality was duplicated. Also
seperated the header which was originally arch_smp.h into apic.h and arch_smp.h
again as some of it is MP and not actually APIC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36182 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-12 12:56:13 +00:00
Michael Lotz 8f4f2bf933 Implement support for ATAPI command set devices. It's used by some USB CD drives
and easy to implement since ATAPI basically is SCSI anyway and we don't use many
problematic commands. Only tested for the 0x05 subclass, but 0x02 should work
the same.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36162 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 17:13:49 +00:00
Michael Lotz ba51713c8f Fix gcc4 build of uhci_decode.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36104 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-10 13:05:43 +00:00
Michael Lotz bb1d98b687 * The volume init wasn't checked, so a failed init would crash.
* Unlocking a removable drive was done in the wrong error label which would've
  resulted in accessing deadbeef due to the volume being freed just before its
  use or using the not initialized volume variable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36103 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-10 12:57:17 +00:00
Michael Lotz 67f1ff42ed Add missing check for non-data items which lead to picking up some mice as
keyboards due to buttons being padded by non-data arrays. The keys wouldn't
actually be used later, but a (useless) keyboard device would still be
published.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35797 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-10 01:12:12 +00:00
Michael Lotz 18074c28fa Reworked the handler adding to be based on input reports. This way multiple
handlers may be added to a single device if it provides more than one report
for a kind of device. Should fix #5549 where two mouse reports are present
and only the first one was picked up and made available as device.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35796 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-10 01:06:14 +00:00
Michael Lotz 2cf04ca728 Don't take ownership by writing the OS-owned semaphore when the BIOS-owned flag
isn't set. I'd tend to say that's a rather odd interpretation of the specified
protocol if a BIOS goes mad if the sem is written to while it doesn't actually
own the controller (it should just be a no-op in that case and directly set the
sem state). But it seems this is what others do as well (FreeBSD, Linux) so we
follow. Thanks to vegardw in #2083 for researching into this and proposing this
fix. Minor other cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-07 22:46:11 +00:00
Michael Lotz 1487898473 * The MBR boot code did execute the check for disk extensions with the wrong
magic code. This would lead to them not being detected on systems where the
  BIOS (rightfully) returns an error in this case. Since the CHS fallback can't
  work it would then fail with "Missing Operating System".
* Fixed a typo, an 80 char limit violation.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35718 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 01:28:49 +00:00
Michael Lotz aceebab740 Add a CHS conversion function. It is not used though as we can't generally make
valid CHS addresses due to not knowing the geometry of the target device
beforehand. So it's mostly just for completeness...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35717 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 01:22:11 +00:00
Michael Lotz e3c9401739 Add missing dependency that would cause the MBR not to be rebuilt on changes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35716 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 00:53:41 +00:00
Michael Lotz 610a2eed63 Made heap classes const just in case. They really already were though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35713 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-01 22:29:23 +00:00
Michael Lotz 0a54a1a530 Fix missing stdint include, missing open mode flags and libsupc++ linking.
Thanks to luroh and mmadia for testing!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35674 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 20:49:08 +00:00
Michael Lotz 596ba08220 Well, it was a 50-50 chance to hit the portable write function... Should fix
the anyboot build tool build on non-Haiku.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 20:19:44 +00:00
Michael Lotz 100e91926c Adding buildsystem support for the "anyboot" images. They can be built using
the haiku-anyboot-image pseudo target. As I'm not too much at home with Jam I'd
appreciate any input. Especially for the TODO where removing the MBR using
RmTemps seems to cause a failure to get it built again every other time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35668 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 18:54:16 +00:00
Michael Lotz bfa5a8db18 Adding an "anyboot" buildtool that takes a chainloading MBR, a ISO CD boot image
and a Haiku image and fuses everything to a hybrid MBR/ISO image. Since it
contains a valid MBR, partition table and el-torito CD boot record such an image
should be pretty universally bootable. It can be written to disks, USB sticks or
CDs/DVDs. Since it has a partition table in place it is also possible that it
helps with the non-booting USB sticks where the BIOS (wrongly) assumes a
partition table.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35667 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 18:51:16 +00:00