⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msdllib.h

📁 linux下流媒体下载程序代码
💻 H
字号:
/*********************************************************************** *    msdllib.h:  utility functions *********************************************************************** * Copyright (C) 2007 metro <me_t_ro@yahoo.com> * * This file is part of msdl, media stream downloader * * utility functions. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. * ***********************************************************************/#ifndef __MSDLLIB_H__#define __MSDLLIB_H__#include <inttypes.h>/* * functions to handle bitorder *  * bswap_* : swap upper and lower bits * put*_*  : put number to p in specified bitorder * get*_*  : get number from p in specified bitorder */static inline uint16_t bswap_16(uint16_t x){    return (x>>8) | (x<<8);}static inline uint32_t bswap_32(uint32_t x){    x= ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);    return (x>>16) | (x<<16);}static inline uint64_t bswap_64(uint64_t x){    x= ((x<< 8)&0xFF00FF00FF00FF00ULL) | ((x>> 8)&0x00FF00FF00FF00FFULL);    x= ((x<<16)&0xFFFF0000FFFF0000ULL) | ((x>>16)&0x0000FFFF0000FFFFULL);    return (x>>32) | (x<<32);}static inline void put32_be(void *p,uint32_t x){    *((uint8_t *)p    ) = x >> 24 & 0xff;    *((uint8_t *)p + 1) = x >> 16 & 0xff;    *((uint8_t *)p + 2) = x >>  8 & 0xff;    *((uint8_t *)p + 3) = x       & 0xff;}static inline void put32_le(void *p,uint32_t x){    *((uint8_t *)p    ) = x       & 0xff;    *((uint8_t *)p + 1) = x >>  8 & 0xff;    *((uint8_t *)p + 2) = x >> 16 & 0xff;    *((uint8_t *)p + 3) = x >> 24 & 0xff;}static inline void put16_be(void *p,uint16_t x){    *((uint8_t *)p    ) = x >>8   & 0xff;    *((uint8_t *)p + 1) = x       & 0xff;}static inline void put16_le(void *p,uint16_t x){    *((uint8_t *)p    ) = x       & 0xff;    *((uint8_t *)p + 1) = x >>8   & 0xff;}static inline void put8(void *p,uint8_t x){    *(uint8_t *)p       = x       & 0xff;}static inline uint32_t get32_be(void *p){    return *(uint8_t *)p << 24 | *((uint8_t *)p + 1) << 16 |	*((uint8_t *)p + 2) << 8 | *((uint8_t *)p + 3);}static inline uint32_t get32_le(void *p){    return *(uint8_t *)p | *((uint8_t *)p + 1) << 8 |	*((uint8_t *)p + 2) << 16 | *((uint8_t *)p + 3) << 24;}static inline uint64_t get64_be(void *p){    return (uint64_t)get32_be((uint8_t *)p) << 32 | (uint64_t)get32_be((uint8_t *)p + 4);}static inline uint64_t get64_le(void *p){    return (uint64_t)get32_le((uint8_t *)p + 4) << 32 | (uint64_t)get32_le((uint8_t *)p);}static inline uint16_t get16_be(void *p){    return *(uint8_t *)p << 8 | *((uint8_t *)p + 1);}static inline uint16_t get16_le(void *p){    return *(uint8_t *)p | *((uint8_t *)p + 1) << 8;}static inline uint8_t get8(void *p){    return *(uint8_t *)p;}/* get n bytes little endian */static inline uint64_t getnb_le(void *p,int n){    uint64_t val = 0;    for(; n > 0 ; n--) {	val <<= 8;	val += *((uint8_t *)p + n - 1);    }    return val;}/* get n bytes big endian */static inline uint64_t getnb_be(void *p,int n){    uint64_t val = 0;    int i = 0;    for(; i < n; i++) {	val <<= 8;	val += *((uint8_t *)p + i);    }    return val;}/* * Big/Little Endian to Machine Endian */#ifdef WORDS_BIGENDIAN#define be2me_16(x) (x)#define be2me_32(x) (x)#define be2me_64(x) (x)#define le2me_16(x) bswap_16(x)#define le2me_32(x) bswap_32(x)#define le2me_64(x) bswap_64(x)#else /* LITTLE ENDIAN */#define be2me_16(x) bswap_16(x)#define be2me_32(x) bswap_32(x)#define be2me_64(x) bswap_64(x)#define le2me_16(x) (x)#define le2me_32(x) (x)#define le2me_64(x) (x)#endif/* list head */struct list_h {    void *p;    struct list_h *next;    struct list_h *prev;};/* insert NULL after freeing memory */#define free(p) do {free((p));(p) = NULL;} while(0)char *xstrcasechr(const char *s1,int c);char *xstrstr(const char *s1,const char *s2);char *xstrcasestr(const char *s1,const char *s2);void *xmalloc(const size_t size);void *xrealloc(void *p,const size_t size);/* list  */struct list_h *list_h_append(struct list_h **list,void *p);struct list_h *search_list_h(struct list_h *list,void *p,			     int (*comp)(void *,void *));int list_h_num(struct list_h *list);struct list_h *new_list_h(void *p);void free_list_h(struct list_h *list,void (*free_er)(void *));int get_filesize(const char *path,uint64_t *size);void dbgdump(const void *str,int size);#endif /* __MSDLLIB_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -