Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. __init int
  2. routerboot_find_tag(u8 *buf, unsigned int buflen, u16 tag_id,
  3. u8 **tag_data, u16 *tag_len)
  4. {
  5. uint32_t magic;
  6. bool align = false;
  7. int ret;
  8.  
  9. if (buflen < 4)
  10. return -EINVAL;
  11.  
  12. magic = get_u32(buf);
  13. switch (magic) {
  14. case RB_MAGIC_ERD:
  15. align = true;
  16. /* fall trough */
  17. case RB_MAGIC_HARD:
  18. /* skip magic value */
  19. buf += 4;
  20. buflen -= 4;
  21. break;
  22.  
  23. case RB_MAGIC_SOFT:
  24. if (buflen < 8)
  25. return -EINVAL;
  26.  
  27. /* skip magic and CRC value */
  28. buf += 8;
  29. buflen -= 8;
  30.  
  31. break;
  32.  
  33. default:
  34. return -EINVAL;
  35. }
  36.  
  37. ret = -ENOENT;
  38. while (buflen > 2) {
  39. u16 id;
  40. u16 len;
  41.  
  42. len = get_u16(buf);
  43. buf += 2;
  44. buflen -= 2;
  45.  
  46. if (buflen < 2)
  47. break;
  48.  
  49. id = get_u16(buf);
  50. pr_err("debug: id = %X\n", id);
  51. buf += 2;
  52. buflen -= 2;
  53.  
  54. if (id == RB_ID_TERMINATOR)
  55. break;
  56.  
  57. if (buflen < len)
  58. break;
  59.  
  60. if (id == tag_id) {
  61. if (tag_len)
  62. *tag_len = len;
  63. if (tag_data)
  64. *tag_data = buf;
  65. ret = 0;
  66. break;
  67. }
  68.  
  69. if (align)
  70. len = (len + 3) / 4;
  71.  
  72. buf += len;
  73. buflen -= len;
  74. }
  75.  
  76. return ret;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement