mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/etc/etc.c (etc_systmpdir): moved from ext/tmpdir.
* ext/etc/etc.c (etc_sysconfdir): added. * lib/rubygems/config_file.rb, lib/tmpdir.rb: use etc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5512c9b287
commit
2c01a07bf4
8 changed files with 75 additions and 51 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Sat May 8 12:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/etc/etc.c (etc_systmpdir): moved from ext/tmpdir.
|
||||||
|
|
||||||
|
* ext/etc/etc.c (etc_sysconfdir): added.
|
||||||
|
|
||||||
|
* lib/rubygems/config_file.rb, lib/tmpdir.rb: use etc.
|
||||||
|
|
||||||
Sat May 8 11:07:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat May 8 11:07:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/bigdecimal/bigdecimal.c (VpAlloc): ensure buf does not get
|
* ext/bigdecimal/bigdecimal.c (VpAlloc): ensure buf does not get
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
************************************************/
|
************************************************/
|
||||||
|
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
|
#include "ruby/encoding.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
|
@ -27,6 +28,13 @@ static VALUE sPasswd;
|
||||||
static VALUE sGroup;
|
static VALUE sGroup;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <shlobj.h>
|
||||||
|
#ifndef CSIDL_COMMON_APPDATA
|
||||||
|
#define CSIDL_COMMON_APPDATA 35
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
char *getenv();
|
char *getenv();
|
||||||
#endif
|
#endif
|
||||||
|
@ -549,6 +557,43 @@ etc_getgrent(VALUE obj)
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define numberof(array) (sizeof(array) / sizeof(*array))
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
VALUE rb_w32_special_folder(int type);
|
||||||
|
UINT rb_w32_system_tmpdir(WCHAR *path, UINT len);
|
||||||
|
VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns system configuration directory.
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
etc_sysconfdir(VALUE obj)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
return rb_w32_special_folder(CSIDL_COMMON_APPDATA);
|
||||||
|
#else
|
||||||
|
return rb_filesystem_str_new_cstr(SYSCONFDIR);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns system temporary directory.
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
etc_systmpdir(void)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
WCHAR path[_MAX_PATH];
|
||||||
|
UINT len = rb_w32_system_tmpdir(path, numberof(path));
|
||||||
|
if (!len) return Qnil;
|
||||||
|
return rb_w32_conv_from_wchar(path, rb_filesystem_encoding());
|
||||||
|
#else
|
||||||
|
return rb_filesystem_str_new_cstr("/tmp");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The etc module provides access to information from the running OS.
|
* The etc module provides access to information from the running OS.
|
||||||
*
|
*
|
||||||
|
@ -575,6 +620,8 @@ Init_etc(void)
|
||||||
rb_define_module_function(mEtc, "setgrent", etc_setgrent, 0);
|
rb_define_module_function(mEtc, "setgrent", etc_setgrent, 0);
|
||||||
rb_define_module_function(mEtc, "endgrent", etc_endgrent, 0);
|
rb_define_module_function(mEtc, "endgrent", etc_endgrent, 0);
|
||||||
rb_define_module_function(mEtc, "getgrent", etc_getgrent, 0);
|
rb_define_module_function(mEtc, "getgrent", etc_getgrent, 0);
|
||||||
|
rb_define_module_function(mEtc, "sysconfdir", etc_sysconfdir, 0);
|
||||||
|
rb_define_module_function(mEtc, "systmpdir", etc_systmpdir, 0);
|
||||||
|
|
||||||
sPasswd = rb_struct_define("Passwd",
|
sPasswd = rb_struct_define("Passwd",
|
||||||
"name", "passwd", "uid", "gid",
|
"name", "passwd", "uid", "gid",
|
||||||
|
|
|
@ -4,7 +4,9 @@ have_library("sun", "getpwnam") # NIS (== YP) interface for IRIX 4
|
||||||
a = have_func("getlogin")
|
a = have_func("getlogin")
|
||||||
b = have_func("getpwent")
|
b = have_func("getpwent")
|
||||||
c = have_func("getgrent")
|
c = have_func("getgrent")
|
||||||
if a or b or c
|
sysconfdir = RbConfig.expand(RbConfig::MAKEFILE_CONFIG["sysconfdir"].dup, "prefix"=>"")
|
||||||
|
$defs.push("-DSYSCONFDIR=#{Shellwords.escape(sysconfdir.dump)}")
|
||||||
|
if a or b or c or sysconfdir
|
||||||
have_struct_member('struct passwd', 'pw_gecos', 'pwd.h')
|
have_struct_member('struct passwd', 'pw_gecos', 'pwd.h')
|
||||||
have_struct_member('struct passwd', 'pw_change', 'pwd.h')
|
have_struct_member('struct passwd', 'pw_change', 'pwd.h')
|
||||||
have_struct_member('struct passwd', 'pw_quota', 'pwd.h')
|
have_struct_member('struct passwd', 'pw_quota', 'pwd.h')
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
case
|
|
||||||
when have_func("rb_w32_system_tmpdir")
|
|
||||||
ok = true # win32
|
|
||||||
else
|
|
||||||
end
|
|
||||||
create_makefile("tmpdir") if ok
|
|
|
@ -1,32 +0,0 @@
|
||||||
#include <ruby/ruby.h>
|
|
||||||
#include <ruby/encoding.h>
|
|
||||||
|
|
||||||
#define numberof(array) (sizeof(array) / sizeof(*array))
|
|
||||||
|
|
||||||
#ifdef HAVE_RB_W32_SYSTEM_TMPDIR
|
|
||||||
UINT rb_w32_system_tmpdir(WCHAR *path, UINT len);
|
|
||||||
VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static VALUE
|
|
||||||
system_tmpdir(void)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_RB_W32_SYSTEM_TMPDIR
|
|
||||||
WCHAR path[_MAX_PATH];
|
|
||||||
UINT len = rb_w32_system_tmpdir(path, numberof(path));
|
|
||||||
if (!len) return Qnil;
|
|
||||||
return rb_w32_conv_from_wchar(path, rb_filesystem_encoding());
|
|
||||||
#else
|
|
||||||
return rb_filesystem_str_new_cstr("/tmp");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* sets Dir.@@systmpdir.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
Init_tmpdir(void)
|
|
||||||
{
|
|
||||||
rb_cvar_set(rb_cDir, rb_intern_const("@@systmpdir"),
|
|
||||||
rb_obj_freeze(system_tmpdir()));
|
|
||||||
}
|
|
|
@ -47,15 +47,8 @@ class Gem::ConfigFile
|
||||||
|
|
||||||
system_config_path =
|
system_config_path =
|
||||||
begin
|
begin
|
||||||
require 'Win32API'
|
require 'etc.so'
|
||||||
|
Etc.sysconfdir
|
||||||
CSIDL_COMMON_APPDATA = 0x0023
|
|
||||||
path = 0.chr * 260
|
|
||||||
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP', 'L',
|
|
||||||
:stdcall
|
|
||||||
SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
|
|
||||||
|
|
||||||
path.strip
|
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
'/etc'
|
'/etc'
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,13 +5,14 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
if /mswin|mingw/ =~ RUBY_PLATFORM
|
begin
|
||||||
require 'tmpdir.so'
|
require 'etc.so'
|
||||||
|
rescue LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
class Dir
|
class Dir
|
||||||
|
|
||||||
@@systmpdir ||= '/tmp'
|
@@systmpdir ||= defined?(Etc.systmpdir) ? Etc.systmpdir : '/tmp'
|
||||||
|
|
||||||
##
|
##
|
||||||
# Returns the operating system's temporary file path.
|
# Returns the operating system's temporary file path.
|
||||||
|
|
|
@ -68,6 +68,7 @@ static int has_redirection(const char *);
|
||||||
int rb_w32_wait_events(HANDLE *events, int num, DWORD timeout);
|
int rb_w32_wait_events(HANDLE *events, int num, DWORD timeout);
|
||||||
static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags);
|
static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags);
|
||||||
static int wstati64(const WCHAR *path, struct stati64 *st);
|
static int wstati64(const WCHAR *path, struct stati64 *st);
|
||||||
|
VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc);
|
||||||
|
|
||||||
#define RUBY_CRITICAL(expr) do { expr; } while (0)
|
#define RUBY_CRITICAL(expr) do { expr; } while (0)
|
||||||
|
|
||||||
|
@ -466,6 +467,16 @@ get_system_directory(WCHAR *path, UINT len)
|
||||||
|
|
||||||
#define numberof(array) (sizeof(array) / sizeof(*array))
|
#define numberof(array) (sizeof(array) / sizeof(*array))
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_w32_special_folder(int type)
|
||||||
|
{
|
||||||
|
WCHAR path[_MAX_PATH];
|
||||||
|
|
||||||
|
if (!get_special_folder(type, path)) return Qnil;
|
||||||
|
regulate_path(path);
|
||||||
|
return rb_w32_conv_from_wchar(path, rb_filesystem_encoding());
|
||||||
|
}
|
||||||
|
|
||||||
UINT
|
UINT
|
||||||
rb_w32_system_tmpdir(WCHAR *path, UINT len)
|
rb_w32_system_tmpdir(WCHAR *path, UINT len)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue