[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[624] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-12-29 10:39:14
|
Revision: 624 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=624&view=rev Author: nickols_k Date: 2012-12-29 10:39:06 +0000 (Sat, 29 Dec 2012) Log Message: ----------- remove dependencies from ::getenv() Note about illegal-patch: binary of project still contains getenv in list of imported names. Therefore project still has illegal patch with viral nature. Modified Paths: -------------- mplayerxp/libao3/ao_nas.cpp mplayerxp/libmpcodecs/vd_xanim.cpp mplayerxp/libmpdemux/demux_mpxp64.cpp mplayerxp/libmpstream2/cddb.cpp mplayerxp/libmpstream2/cookies.cpp mplayerxp/libmpstream2/url.cpp mplayerxp/libvo2/vo_fbdev.cpp mplayerxp/libvo2/vo_opengl.cpp mplayerxp/libvo2/vo_sdl.cpp mplayerxp/libvo2/vo_x11.cpp mplayerxp/libvo2/vo_xv.cpp mplayerxp/libvo2/x11_system.cpp mplayerxp/libvo2/x11_system.h mplayerxp/mplayerxp.cpp mplayerxp/mpxp_msg.cpp mplayerxp/nls/nls.h mplayerxp/nls/recode.cpp mplayerxp/osdep/get_path.cpp mplayerxp/osdep/getch2.cpp mplayerxp/osdep/getch2.h Modified: mplayerxp/libao3/ao_nas.cpp =================================================================== --- mplayerxp/libao3/ao_nas.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libao3/ao_nas.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -435,7 +435,7 @@ unsigned char auformat = nas_aformat_to_auformat(&f); unsigned bytes_per_sample = _channels * AuSizeofFormat(auformat); unsigned buffer_size; - char *server; + std::string server; _format = f; _samplerate = r; @@ -462,15 +462,22 @@ return MPXP_False; } - if (!(server = ::getenv("AUDIOSERVER")) && - !(server = ::getenv("DISPLAY"))) { + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("AUDIOSERVER"); + if(it!=envm.end()) server = (*it).second; + if(server.empty()) { + it = envm.find("DISPLAY"); + if(it!=envm.end()) server = (*it).second; + } + if (server.empty()) { mpxp_err<<"ao_nas: init(): AUDIOSERVER environment variable not set -> nosound"<<std::endl; return MPXP_False; } mpxp_v<<"ao_nas: init(): Using audioserver "<<server<<std::endl; - aud = AuOpenServer(server, 0, NULL, 0, NULL, NULL); + aud = AuOpenServer(server.c_str(), 0, NULL, 0, NULL, NULL); if (!aud) { mpxp_err<<"ao_nas: init(): Can't open nas audio server -> nosound"<<std::endl; return MPXP_False; Modified: mplayerxp/libmpcodecs/vd_xanim.cpp =================================================================== --- mplayerxp/libmpcodecs/vd_xanim.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libmpcodecs/vd_xanim.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -365,7 +365,7 @@ } } -const char *xacodec_def_path = "/usr/lib/xanim/mods"; +static std::string xacodec_def_path = "/usr/lib/xanim/mods"; static int xacodec_init_video(xa_private_t& priv, int out_format) { @@ -387,10 +387,12 @@ for (i=0; i < XA_CLOSE_FUNCS; i++) priv.xacodec_driver->close_func[i] = NULL; - if (getenv("XANIM_MOD_DIR")) - xacodec_def_path = ::getenv("XANIM_MOD_DIR"); + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("XANIM_MOD_DIR"); + if(it!=envm.end()) xacodec_def_path = (*it).second; - snprintf(dll, 1024, "%s/%s", xacodec_def_path, sh_video->codec->dll_name); + snprintf(dll, 1024, "%s/%s", xacodec_def_path.c_str(), sh_video->codec->dll_name); if (xacodec_init(dll, priv.xacodec_driver) == 0) return 0; Modified: mplayerxp/libmpdemux/demux_mpxp64.cpp =================================================================== --- mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libmpdemux/demux_mpxp64.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -410,7 +410,7 @@ { str=new char [len]; s->read(str,len); - sub_data.cp=nls_get_screen_cp(); + sub_data.cp=nls_get_screen_cp(mpxp_get_environment()); demuxer->info().add(infot,nls_recode2screen_cp(codepage,str,len)); delete str; } Modified: mplayerxp/libmpstream2/cddb.cpp =================================================================== --- mplayerxp/libmpstream2/cddb.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libmpstream2/cddb.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -46,6 +46,7 @@ #include "cdd.h" #include "tcp.h" #include "version.h" +#include "osdep/get_path.h" #include "network.h" #include "stream_msg.h" @@ -467,7 +468,7 @@ static void __FASTCALL__ cddb_create_hello(cddb_data_t *cddb_data) { char host_name[51]; - const char *user_name; + std::string user_name; if( cddb_data->anonymous ) { // Default is anonymous /* Note from Eduardo P\xE9rez Ureta <ep...@it...> : @@ -481,7 +482,10 @@ if( gethostname(host_name, 50)<0 ) { strcpy(host_name, "localhost"); } - user_name = getenv("LOGNAME"); + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("LOGNAME"); + if(it!=envm.end()) user_name = (*it).second; } cddb_data->cddb_hello=std::string("&hello=")+user_name+"+"+host_name+"+"+"MPlayerXP"+"+"+VERSION; } @@ -526,11 +530,7 @@ cddb_data.disc_id = cddb_discid(cddb_data.tracks); cddb_data.anonymous = 1; // Don't send user info by default - const std::map<std::string,std::string>& envm=mpxp_get_environment(); - std::map<std::string,std::string>::const_iterator it; - it = envm.find("HOME"); - home_dir = (*it).second; - if( !home_dir.empty() ) cddb_data.cache_dir=home_dir+cddb_cache_dir; + cddb_data.cache_dir=get_path(mpxp_get_environment(),cddb_cache_dir); // Check for a cached file if( cddb_read_cache(&cddb_data)<0 ) { // No Cache found Modified: mplayerxp/libmpstream2/cookies.cpp =================================================================== --- mplayerxp/libmpstream2/cookies.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libmpstream2/cookies.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -95,55 +95,55 @@ } /* Loads a file into RAM */ -static char *load_file(const char *filename, off_t * length) +static char *load_file(const std::string& filename, off_t * length) { int fd; char *buffer; mpxp_v<<"Loading cookie file: "<<filename<<std::endl; - fd = open(filename, O_RDONLY); + fd = ::open(filename.c_str(), O_RDONLY); if (fd < 0) { mpxp_v<<"Could not open"<<std::endl; return NULL; } - *length = lseek(fd, 0, SEEK_END); + *length = ::lseek(fd, 0, SEEK_END); if (*length < 0) { mpxp_v<<"Could not find EOF"<<std::endl; - close(fd); + ::close(fd); return NULL; } if (unsigned(*length) > std::numeric_limits<size_t>::max() - 1) { mpxp_v<<"File too big, could not mp_malloc"<<std::endl; - close(fd); + ::close(fd); return NULL; } - lseek(fd, SEEK_SET, 0); + ::lseek(fd, SEEK_SET, 0); if (!(buffer = new char [*length + 1])) { mpxp_v<<"Could not mp_malloc"<<std::endl; - close(fd); + ::close(fd); return NULL; } - if (read(fd, buffer, *length) != *length) { + if (::read(fd, buffer, *length) != *length) { delete buffer; mpxp_v<<"Read is behaving funny"<<std::endl; - close(fd); + ::close(fd); return NULL; } - close(fd); + ::close(fd); buffer[*length] = 0; return buffer; } /* Loads a cookies.txt file into a linked list. */ -static struct cookie_list_type *load_cookies_from(const char *filename, +static struct cookie_list_type *load_cookies_from(const std::string& filename, struct cookie_list_type *list) { @@ -179,42 +179,33 @@ DIR *dir; struct dirent *ent; struct cookie_list_type *list = NULL; - char *buf; + std::string homedir,buf; - char *homedir; - if (net_conf.cookies_file) return load_cookies_from(net_conf.cookies_file, list); - homedir = getenv("HOME"); - if (!homedir) - return list; + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("HOME"); + if(it==envm.end()) throw "No 'HOME' environment found"; + homedir = (*it).second; + buf=homedir+"/.mozilla/default"; + dir = ::opendir(buf.c_str()); - buf = new char [strlen(homedir) + sizeof("/.mozilla/default") + 1]; - sprintf(buf, "%s/.mozilla/default", homedir); - dir = opendir(buf); - delete buf; - if (dir) { - while ((ent = readdir(dir)) != NULL) { + while ((ent = ::readdir(dir)) != NULL) { if ((ent->d_name)[0] != '.') { - buf = new char [strlen(getenv("HOME")) + - sizeof("/.mozilla/default/") + - strlen(ent->d_name) + sizeof("cookies.txt") + 1]; - sprintf(buf, "%s/.mozilla/default/%s/cookies.txt", - getenv("HOME"), ent->d_name); - list = load_cookies_from(buf, list); - delete buf; + std::string buf2; + buf2=buf+"/"+std::string(ent->d_name)+"/cookies.txt"; + list = load_cookies_from(buf2, list); } } - closedir(dir); + ::closedir(dir); } - buf = new char [strlen(homedir) + sizeof("/.netscape/cookies.txt") + 1]; - sprintf(buf, "%s/.netscape/cookies.txt", homedir); + buf=homedir+"/.netscape/cookies.txt"; list = load_cookies_from(buf, list); - delete buf; return list; } Modified: mplayerxp/libmpstream2/url.cpp =================================================================== --- mplayerxp/libmpstream2/url.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libmpstream2/url.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -170,10 +170,14 @@ } // Check if the http_proxy environment variable is set. if( protocol2lower()=="http") { - const char *proxy; - proxy = getenv("http_proxy"); - if( proxy!=NULL ) { + std::string proxy; + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("http_proxy"); + if(it!=envm.end()) proxy = (*it).second; + if( !proxy.empty() ) { std::string new_url=proxy; + mpxp_v<<"Using "<<proxy<<" as http_proxy"<<std::endl; URL proxy_url(new_url); #ifdef HAVE_AF_INET6 if (net_conf.ipv4_only_proxy && (::gethostbyname(_host.c_str())==NULL)) { Modified: mplayerxp/libvo2/vo_fbdev.cpp =================================================================== --- mplayerxp/libvo2/vo_fbdev.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/vo_fbdev.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -183,6 +183,7 @@ #endif int fb_preinit_done; MPXP_Rc fb_works; + std::string dev_name; }; std::string FBDev_VO_Interface::parse_sub_device(const std::string& sd) @@ -207,8 +208,14 @@ if (fb_preinit_done) return fb_works; - if (!priv_conf.dev_name && !(priv_conf.dev_name = getenv("FRAMEBUFFER"))) - priv_conf.dev_name = (char *)"/dev/fb0"; + dev_name=""; + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("FRAMEBUFFER"); + if(it!=envm.end()) dev_name = (*it).second; + + if(dev_name.empty()) dev_name = "/dev/fb0"; + priv_conf.dev_name = const_cast<char*>(dev_name.c_str()); mpxp_dbg2<<FBDEV<< "using "<<priv_conf.dev_name<<std::endl; if ((dev_fd = ::open(priv_conf.dev_name, O_RDWR)) == -1) { Modified: mplayerxp/libvo2/vo_opengl.cpp =================================================================== --- mplayerxp/libvo2/vo_opengl.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/vo_opengl.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -96,7 +96,7 @@ OpenGL_VO_Interface::OpenGL_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), - glx(new(zeromem) GLX_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) + glx(new(zeromem) GLX_System(vo_conf.mDisplayName?vo_conf.mDisplayName:"",vo_conf.xinerama_screen)) { num_buffers=1; glx->saver_off(); Modified: mplayerxp/libvo2/vo_sdl.cpp =================================================================== --- mplayerxp/libvo2/vo_sdl.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/vo_sdl.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -266,7 +266,7 @@ :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)) #ifdef HAVE_X11 - ,x11(new(zeromem) X11_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) + ,x11(new(zeromem) X11_System(vo_conf.mDisplayName?vo_conf.mDisplayName:"",vo_conf.xinerama_screen)) #endif { std::string vidix_name; Modified: mplayerxp/libvo2/vo_x11.cpp =================================================================== --- mplayerxp/libvo2/vo_x11.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/vo_x11.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -130,7 +130,7 @@ X11_VO_Interface::X11_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), - x11(new(zeromem) X11_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) + x11(new(zeromem) X11_System(vo_conf.mDisplayName?vo_conf.mDisplayName:"",vo_conf.xinerama_screen)) { std::string vidix_name; num_buffers=1; Modified: mplayerxp/libvo2/vo_xv.cpp =================================================================== --- mplayerxp/libvo2/vo_xv.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/vo_xv.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -86,7 +86,7 @@ Xv_VO_Interface::Xv_VO_Interface(const std::string& arg) :VO_Interface(arg), aspect(new(zeromem) Aspect(mp_conf.monitor_pixel_aspect)), - xv(new(zeromem) Xv_System(vo_conf.mDisplayName,vo_conf.xinerama_screen)) + xv(new(zeromem) Xv_System(vo_conf.mDisplayName?vo_conf.mDisplayName:"",vo_conf.xinerama_screen)) { num_buffers=1; if(!arg.empty()) { Modified: mplayerxp/libvo2/x11_system.cpp =================================================================== --- mplayerxp/libvo2/x11_system.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/x11_system.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -44,7 +44,7 @@ return 0; } -X11_System::X11_System(const char* DisplayName,int xinerama_screen) +X11_System::X11_System(const std::string& DisplayName,int xinerama_screen) :screenwidth(0), screenheight(0) { @@ -53,7 +53,7 @@ // char * DisplayName = ":0.0"; ::XImage * mXImage = NULL; ::XWindowAttributes attribs; - const char* dispName; + std::string dispName; MotifHints = None; @@ -62,14 +62,19 @@ #endif ::XSetErrorHandler(x11_errorhandler); - if (!DisplayName) - if (!(DisplayName=getenv("DISPLAY"))) - DisplayName=":0.0"; - dispName = ::XDisplayName(DisplayName); + dispName=DisplayName; + if (dispName.empty()) { + const std::map<std::string,std::string>& envm=mpxp_get_environment(); + std::map<std::string,std::string>::const_iterator it; + it = envm.find("DISPLAY"); + if(it!=envm.end()) dispName = (*it).second; + if(dispName.empty()) dispName =":0.0"; + } + dispName = ::XDisplayName(dispName.c_str()); mpxp_v<<"X11 opening display: "<<dispName<<std::endl; - if(!(mDisplay=::XOpenDisplay(dispName))) { + if(!(mDisplay=::XOpenDisplay(dispName.c_str()))) { mpxp_err<<"X11_System: couldn't open the X11 display: "<<dispName<<std::endl; exit_player("X11_System error"); } @@ -141,9 +146,10 @@ else if(mask==0xFFFF) _depth=16; } /* slightly improved local display detection AST */ - if ( strncmp(dispName, "unix:", 5) == 0) dispName += 4; - else if ( strncmp(dispName, "localhost:", 10) == 0) dispName += 9; - if (*dispName==':') mLocalDisplay=1; + char ch=dispName[0]; + if ( dispName.substr(0,5)=="unix:") ch=dispName[4]; + else if ( dispName.substr(0,10)=="localhost:") ch=dispName[9]; + if (ch==':') mLocalDisplay=1; else mLocalDisplay=0; XA_NET_WM_STATE=::XInternAtom(mDisplay,"_NET_WM_STATE",0 ); XA_NET_WM_STATE_FULLSCREEN=::XInternAtom(mDisplay,"_NET_WM_STATE_FULLSCREEN",0 ); @@ -153,7 +159,7 @@ X11_System::~X11_System() { ::XSetErrorHandler(NULL); /* and -wid is set */ - ::XDestroyWindow(mDisplay, window); + if(window) ::XDestroyWindow(mDisplay, window); ::XCloseDisplay(mDisplay); } @@ -950,7 +956,7 @@ #ifdef HAVE_XV #include "img_format.h" -Xv_System::Xv_System(const char* DisplayName,int xinerama_screen) +Xv_System::Xv_System(const std::string& DisplayName,int xinerama_screen) :X11_System(DisplayName,xinerama_screen) {} Xv_System::~Xv_System() {} @@ -1166,7 +1172,7 @@ #endif #ifdef HAVE_OPENGL -GLX_System::GLX_System(const char* DisplayName,int xinerama_screen) +GLX_System::GLX_System(const std::string& DisplayName,int xinerama_screen) :X11_System(DisplayName,xinerama_screen) { static int visual_attribs[] = { Modified: mplayerxp/libvo2/x11_system.h =================================================================== --- mplayerxp/libvo2/x11_system.h 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/libvo2/x11_system.h 2012-12-29 10:39:06 UTC (rev 624) @@ -1,6 +1,8 @@ #ifndef X11_COMMON_H #define X11_COMMON_H +#include <string> + #include <X11/Xlib.h> #include <X11/Xutil.h> #ifdef HAVE_SHM @@ -31,7 +33,7 @@ class X11_System { public: - X11_System(const char* DisplayName,int ximerama_screen); + X11_System(const std::string& DisplayName,int ximerama_screen); virtual ~X11_System(); unsigned screen_width() const; @@ -121,7 +123,7 @@ #include <sys/shm.h> class Xv_System : public X11_System { public: - Xv_System(const char* DisplayName,int ximerama_screen); + Xv_System(const std::string& DisplayName,int ximerama_screen); virtual ~Xv_System(); unsigned query_port(uint32_t fourcc); @@ -150,7 +152,7 @@ #include <GL/glut.h> class GLX_System : public X11_System { public: - GLX_System(const char* DisplayName,int ximerama_screen); + GLX_System(const std::string& DisplayName,int ximerama_screen); virtual ~GLX_System(); virtual void create_window(const XSizeHints& hint,XVisualInfo* visual,unsigned flags,unsigned depth,const std::string& title); Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/mplayerxp.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -907,7 +907,7 @@ /* Add NLS support here */ Stream* stream=static_cast<Stream*>(_demuxer->stream); char *lang; - if(!mp_conf.audio_lang) mp_conf.audio_lang=nls_get_screen_cp(); + if(!mp_conf.audio_lang) mp_conf.audio_lang=nls_get_screen_cp(envm); MP_UNIT("dvd lang->id"); if(mp_conf.audio_lang) { lang=new char [std::max(strlen(mp_conf.audio_lang)+1,size_t(4))]; Modified: mplayerxp/mpxp_msg.cpp =================================================================== --- mplayerxp/mpxp_msg.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/mpxp_msg.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -237,7 +237,7 @@ va_start(va, format); ssize=vsprintf(sbuf,format.c_str(), va); va_end(va); - if(strcmp(nls_get_screen_cp(),"UTF-8")!=0) { + if(strcmp(nls_get_screen_cp(mpxp_get_environment()),"UTF-8")!=0) { char *obuf; obuf=nls_recode2screen_cp("UTF-8",sbuf,ssize); rc=fputs(obuf,stderr); Modified: mplayerxp/nls/nls.h =================================================================== --- mplayerxp/nls/nls.h 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/nls/nls.h 2012-12-29 10:39:06 UTC (rev 624) @@ -1,28 +1,32 @@ #ifndef __NLS_NLS_H #define __NLS_NLS_H 1 +#include "mpxp_config.h" +#include <map> -/** Returns pointer to screen's codepage - * @return pointer into environment. -**/ -extern char *nls_get_screen_cp(void); +namespace mpxp { + /** Returns pointer to screen's codepage + * @return pointer into environment. + **/ + extern char *nls_get_screen_cp(const std::map<std::string,std::string>& envm); -/** Recodes from given codepage into screen's codepage - * @param src_cp decribes source codepage - * @param param points buffer to be converted - * @param len length of buffer to be converted - * @return allocated buffer with result or performs mp_strdup() function - * if convertion was failed. -**/ -extern char *nls_recode2screen_cp(const char *src_cp,const char *param,unsigned len); + /** Recodes from given codepage into screen's codepage + * @param src_cp decribes source codepage + * @param param points buffer to be converted + * @param len length of buffer to be converted + * @return allocated buffer with result or performs mp_strdup() function + * if convertion was failed. + **/ + extern char *nls_recode2screen_cp(const char *src_cp,const char *param,unsigned len); -/** Recodes to given codepage from screen's codepage - * @param to_cp decribes given codepage - * @param param points buffer to be converted - * @param size points buffer where size of resulting buffer will be stored - * @return allocated buffer with result or performs mp_strdup() function - * if convertion was failed. -**/ -extern char *nls_recode_from_screen_cp(const char *to_cp,const char *param,size_t *size); + /** Recodes to given codepage from screen's codepage + * @param to_cp decribes given codepage + * @param param points buffer to be converted + * @param size points buffer where size of resulting buffer will be stored + * @return allocated buffer with result or performs mp_strdup() function + * if convertion was failed. + **/ + extern char *nls_recode_from_screen_cp(const char *to_cp,const char *param,size_t *size); -extern unsigned utf8_get_char(const char **str); + extern unsigned utf8_get_char(const char **str); +} // namespace mpxp #endif Modified: mplayerxp/nls/recode.cpp =================================================================== --- mplayerxp/nls/recode.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/nls/recode.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -16,6 +16,7 @@ #include "nls.h" #include "nls_msg.h" +namespace mpxp { /* *We have to proceed with the POSIX methods of looking to `LANG'. On some systems this can be done by the `setlocale' function itself. @@ -28,20 +29,21 @@ LINGUAS=ru Output of locale program contains `LANG' variable only! */ -static const char * langs[] = { "LANG", "LANGUAGE", "LINGUAS" }; +static const char* langs[] = { "LANG", "LANGUAGE", "LINGUAS" }; -char *nls_get_screen_cp(void) +char *nls_get_screen_cp(const std::map<std::string,std::string>& envm) { unsigned i; - char *nls; + std::string nls; static char to_cp[256]; strcpy(to_cp,"UTF-8"); - for(i=0;i<sizeof(langs)/sizeof(char *);i++) - { - if((nls=getenv(langs[i]))!=NULL) - { - nls=strchr(nls,'.'); - if(nls) strcpy(to_cp,nls+1); + for(i=0;i<sizeof(langs)/sizeof(char *);i++) { + std::map<std::string,std::string>::const_iterator it; + it = envm.find(langs[i]); + if(it!=envm.end()) { + nls = (*it).second; + nls=nls.substr(nls.find('.')+1); + if(!nls.empty()) strcpy(to_cp,nls.c_str()); break; } } @@ -58,7 +60,7 @@ const char *ibuff,*ib; char *ob,*to_cp; size_t inb,outb; - to_cp=nls_get_screen_cp(); + to_cp=nls_get_screen_cp(mpxp_get_environment()); errno=0; ic=iconv_open(to_cp,src_cp); if(errno) @@ -133,7 +135,7 @@ const char *ibuff,*ib; char *ob,*src_cp; size_t inb; - src_cp=nls_get_screen_cp(); + src_cp=nls_get_screen_cp(mpxp_get_environment()); errno=0; ic=iconv_open(to_cp,src_cp); if(errno) @@ -175,3 +177,4 @@ #endif return obuff; } +} // namespace mpxp Modified: mplayerxp/osdep/get_path.cpp =================================================================== --- mplayerxp/osdep/get_path.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/osdep/get_path.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -6,9 +6,10 @@ namespace mpxp { std::string get_path(const std::map<std::string,std::string>& envm,const std::string& filename) { + std::string homedir; std::map<std::string,std::string>::const_iterator it; it = envm.find("HOME"); - const std::string homedir = (*it).second; + if(it!=envm.end()) homedir = (*it).second; std::string rs; std::string config_dir = std::string("/.")+PROGNAME; Modified: mplayerxp/osdep/getch2.cpp =================================================================== --- mplayerxp/osdep/getch2.cpp 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/osdep/getch2.cpp 2012-12-29 10:39:06 UTC (rev 624) @@ -69,51 +69,57 @@ static char *term_p=term_buffer2; static void termcap_add(char *id,int code){ -char *p=tgetstr(id,&term_p); - if(!p) return; - if(getch2_key_db>=MAX_KEYS) return; - getch2_keys[getch2_key_db].len=strlen(p); - strncpy(getch2_keys[getch2_key_db].chars,p,8); - getch2_keys[getch2_key_db].code=code; - ++getch2_key_db; + char *p=::tgetstr(id,&term_p); + if(!p) return; + if(getch2_key_db>=MAX_KEYS) return; + getch2_keys[getch2_key_db].len=strlen(p); + strncpy(getch2_keys[getch2_key_db].chars,p,8); + getch2_keys[getch2_key_db].code=code; + ++getch2_key_db; } static int success=0; -int load_termcap(const char *termtype){ - if(!termtype) termtype=getenv("TERM"); - success=tgetent(term_buffer, termtype); - if(success<0){ mpxp_err<<"Could not access the 'termcap' data base"<<std::endl; return 0; } - if(success==0){ mpxp_err<<"Terminal type `"<<termtype<<"' is not defined"<<std::endl; return 0;} +int load_termcap(const std::string& _termtype,const std::map<std::string,std::string>& envm){ + std::string termtype=_termtype; + if(termtype.empty()) { + std::map<std::string,std::string>::const_iterator it; + it = envm.find("TERM"); + if(it!=envm.end()) termtype = (*it).second; + } - screen_width=tgetnum("co"); - screen_height=tgetnum("li"); - if(screen_width<1 || screen_width>255) screen_width=80; - if(screen_height<1 || screen_height>255) screen_height=24; + success=::tgetent(term_buffer, termtype); + if(success<0){ mpxp_err<<"Could not access the 'termcap' data base"<<std::endl; return 0; } + if(success==0){ mpxp_err<<"Terminal type `"<<termtype<<"' is not defined"<<std::endl; return 0;} - termcap_add("kP",KEY_PGUP); - termcap_add("kN",KEY_PGDWN); - termcap_add("kh",KEY_HOME); - termcap_add("kH",KEY_END); - termcap_add("kI",KEY_INS); - termcap_add("kD",KEY_DEL); - termcap_add("kb",KEY_BS); - termcap_add("kl",KEY_LEFT); - termcap_add("kd",KEY_DOWN); - termcap_add("ku",KEY_UP); - termcap_add("kr",KEY_RIGHT); - termcap_add("k0",KEY_F+0); - termcap_add("k1",KEY_F+1); - termcap_add("k2",KEY_F+2); - termcap_add("k3",KEY_F+3); - termcap_add("k4",KEY_F+4); - termcap_add("k5",KEY_F+5); - termcap_add("k6",KEY_F+6); - termcap_add("k7",KEY_F+7); - termcap_add("k8",KEY_F+8); - termcap_add("k9",KEY_F+9); - termcap_add("k;",KEY_F+10); - return getch2_key_db; + screen_width=::tgetnum("co"); + screen_height=::tgetnum("li"); + if(screen_width<1 || screen_width>255) screen_width=80; + if(screen_height<1 || screen_height>255) screen_height=24; + + termcap_add("kP",KEY_PGUP); + termcap_add("kN",KEY_PGDWN); + termcap_add("kh",KEY_HOME); + termcap_add("kH",KEY_END); + termcap_add("kI",KEY_INS); + termcap_add("kD",KEY_DEL); + termcap_add("kb",KEY_BS); + termcap_add("kl",KEY_LEFT); + termcap_add("kd",KEY_DOWN); + termcap_add("ku",KEY_UP); + termcap_add("kr",KEY_RIGHT); + termcap_add("k0",KEY_F+0); + termcap_add("k1",KEY_F+1); + termcap_add("k2",KEY_F+2); + termcap_add("k3",KEY_F+3); + termcap_add("k4",KEY_F+4); + termcap_add("k5",KEY_F+5); + termcap_add("k6",KEY_F+6); + termcap_add("k7",KEY_F+7); + termcap_add("k8",KEY_F+8); + termcap_add("k9",KEY_F+9); + termcap_add("k;",KEY_F+10); + return getch2_key_db; } #endif Modified: mplayerxp/osdep/getch2.h =================================================================== --- mplayerxp/osdep/getch2.h 2012-12-28 17:27:59 UTC (rev 623) +++ mplayerxp/osdep/getch2.h 2012-12-29 10:39:06 UTC (rev 624) @@ -4,7 +4,7 @@ /* GyS-TermIO v2.0 (for GySmail v3) (C) 1999 A'rpi/ESP-team */ /* a very small replacement of ncurses library */ /* Load key definitions from the TERMCAP database. 'termtype' can be NULL */ - int load_termcap(const char *termtype); + int load_termcap(const std::string& termtype,const std::map<std::string,std::string>& envm); /* Enable and disable STDIN line-buffering */ void getch2_enable(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |