mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 12:28:52 +00:00
various gtk cleanups.
This commit is contained in:
147
gtk/conf.c
147
gtk/conf.c
@@ -22,14 +22,14 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -38,32 +38,30 @@
|
||||
#include <glib/gstdio.h>
|
||||
|
||||
#include <libtransmission/transmission.h>
|
||||
#include <libtransmission/bencode.h>
|
||||
|
||||
#include "conf.h"
|
||||
#include "util.h"
|
||||
|
||||
#define CONF_SUBDIR "gtk"
|
||||
#define FILE_SOCKET "socket"
|
||||
|
||||
static char *gl_confdir = NULL;
|
||||
static char *gl_lockpath = NULL;
|
||||
|
||||
static char * gl_confdir = NULL;
|
||||
static char * gl_lockpath = NULL;
|
||||
|
||||
/* errstr may be NULL, this might be called before GTK is initialized */
|
||||
gboolean
|
||||
cf_init(const char *dir, char **errstr) {
|
||||
if(NULL != errstr)
|
||||
*errstr = NULL;
|
||||
gl_confdir = g_build_filename(dir, CONF_SUBDIR, NULL);
|
||||
cf_init(const char *dir, char **errstr)
|
||||
{
|
||||
if( errstr != NULL )
|
||||
*errstr = NULL;
|
||||
|
||||
if(mkdir_p(gl_confdir, 0755 ))
|
||||
return TRUE;
|
||||
gl_confdir = g_build_filename( dir, "gtk", NULL );
|
||||
|
||||
if(NULL != errstr)
|
||||
*errstr = g_strdup_printf(_("Failed to create the directory %s:\n%s"),
|
||||
gl_confdir, strerror(errno));
|
||||
return FALSE;
|
||||
if( mkdir_p(gl_confdir, 0755 ) )
|
||||
return TRUE;
|
||||
|
||||
if( errstr != NULL )
|
||||
*errstr = g_strdup_printf( _("Failed to create the directory %s:\n%s"),
|
||||
gl_confdir, g_strerror(errno) );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -74,50 +72,53 @@ cf_init(const char *dir, char **errstr) {
|
||||
|
||||
/* errstr may be NULL, this might be called before GTK is initialized */
|
||||
static int
|
||||
lockfile(const char *file, char **errstr) {
|
||||
int fd, savederr;
|
||||
struct flock lk;
|
||||
lockfile(const char *file, char **errstr)
|
||||
{
|
||||
int fd;
|
||||
struct flock lk;
|
||||
|
||||
if(NULL != errstr)
|
||||
*errstr = NULL;
|
||||
if( errstr )
|
||||
*errstr = NULL;
|
||||
|
||||
if(0 > (fd = open(file, O_RDWR | O_CREAT, 0666))) {
|
||||
savederr = errno;
|
||||
if(NULL != errstr)
|
||||
*errstr = g_strdup_printf(_("Failed to open the file %s for writing:\n%s"),
|
||||
file, strerror(errno));
|
||||
errno = savederr;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&lk, 0, sizeof(lk));
|
||||
lk.l_start = 0;
|
||||
lk.l_len = 0;
|
||||
lk.l_type = F_WRLCK;
|
||||
lk.l_whence = SEEK_SET;
|
||||
if(-1 == fcntl(fd, F_SETLK, &lk)) {
|
||||
savederr = errno;
|
||||
if(NULL != errstr) {
|
||||
if(EAGAIN == errno)
|
||||
*errstr = g_strdup_printf(_("Another copy of %s is already running."),
|
||||
g_get_application_name());
|
||||
else
|
||||
*errstr = g_strdup_printf(_("Failed to lock the file %s:\n%s"),
|
||||
file, strerror(errno));
|
||||
fd = open( file, O_RDWR | O_CREAT, 0666 );
|
||||
if( fd < 0 )
|
||||
{
|
||||
const int savederr = errno;
|
||||
if( errstr )
|
||||
*errstr = g_strdup_printf(
|
||||
_("Failed to open the file %s for writing:\n%s"),
|
||||
file, g_strerror( errno ) );
|
||||
errno = savederr;
|
||||
return -1;
|
||||
}
|
||||
close(fd);
|
||||
errno = savederr;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
memset( &lk, 0, sizeof( lk ) );
|
||||
lk.l_start = 0;
|
||||
lk.l_len = 0;
|
||||
lk.l_type = F_WRLCK;
|
||||
lk.l_whence = SEEK_SET;
|
||||
if( -1 == fcntl( fd, F_SETLK, &lk ) )
|
||||
{
|
||||
const int savederr = errno;
|
||||
if( errstr )
|
||||
*errstr = ( errno == EAGAIN )
|
||||
? g_strdup_printf( _( "Another copy of %s is already running." ),
|
||||
g_get_application_name( ) )
|
||||
: g_strdup_printf( _( "Failed to lock the file %s:\n%s" ),
|
||||
file, g_strerror( errno ) );
|
||||
close( fd );
|
||||
errno = savederr;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
static char*
|
||||
getLockFilename( void )
|
||||
{
|
||||
return g_build_filename( tr_getPrefsDirectory(),
|
||||
CONF_SUBDIR, "lock", NULL );
|
||||
assert( gl_confdir != NULL );
|
||||
return g_build_filename( gl_confdir, "lock", NULL );
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -142,7 +143,8 @@ cf_lock( char ** errstr )
|
||||
char*
|
||||
cf_sockname( void )
|
||||
{
|
||||
return g_build_filename( gl_confdir, FILE_SOCKET, NULL );
|
||||
assert( gl_confdir != NULL );
|
||||
return g_build_filename( gl_confdir, "socket", NULL );
|
||||
}
|
||||
|
||||
/***
|
||||
@@ -156,8 +158,8 @@ cf_sockname( void )
|
||||
static char*
|
||||
getPrefsFilename( void )
|
||||
{
|
||||
return g_build_filename( tr_getPrefsDirectory(),
|
||||
CONF_SUBDIR, "prefs.ini", NULL );
|
||||
assert( gl_confdir != NULL );
|
||||
return g_build_filename( gl_confdir, "prefs.ini", NULL );
|
||||
}
|
||||
|
||||
static GKeyFile*
|
||||
@@ -177,52 +179,43 @@ getPrefsKeyFile( void )
|
||||
}
|
||||
|
||||
int
|
||||
pref_int_get( const char * key )
|
||||
{
|
||||
pref_int_get( const char * key ) {
|
||||
return g_key_file_get_integer( getPrefsKeyFile( ), GROUP, key, NULL );
|
||||
}
|
||||
void
|
||||
pref_int_set( const char * key, int value )
|
||||
{
|
||||
pref_int_set( const char * key, int value ) {
|
||||
g_key_file_set_integer( getPrefsKeyFile( ), GROUP, key, value );
|
||||
}
|
||||
void
|
||||
pref_int_set_default( const char * key, int value )
|
||||
{
|
||||
pref_int_set_default( const char * key, int value ) {
|
||||
if( !g_key_file_has_key( getPrefsKeyFile( ), GROUP, key, NULL ) )
|
||||
pref_int_set( key, value );
|
||||
}
|
||||
|
||||
gboolean
|
||||
pref_flag_get ( const char * key )
|
||||
{
|
||||
pref_flag_get ( const char * key ) {
|
||||
return g_key_file_get_boolean( getPrefsKeyFile( ), GROUP, key, NULL );
|
||||
}
|
||||
void
|
||||
pref_flag_set( const char * key, gboolean value )
|
||||
{
|
||||
pref_flag_set( const char * key, gboolean value ) {
|
||||
g_key_file_set_boolean( getPrefsKeyFile( ), GROUP, key, value );
|
||||
}
|
||||
void
|
||||
pref_flag_set_default( const char * key, gboolean value )
|
||||
{
|
||||
pref_flag_set_default( const char * key, gboolean value ) {
|
||||
if( !g_key_file_has_key( getPrefsKeyFile( ), GROUP, key, NULL ) )
|
||||
pref_flag_set( key, value );
|
||||
}
|
||||
|
||||
char*
|
||||
pref_string_get( const char * key )
|
||||
{
|
||||
pref_string_get( const char * key ) {
|
||||
return g_key_file_get_string( getPrefsKeyFile( ), GROUP, key, NULL );
|
||||
}
|
||||
void
|
||||
pref_string_set( const char * key, const char * value )
|
||||
{
|
||||
pref_string_set( const char * key, const char * value ) {
|
||||
g_key_file_set_string( getPrefsKeyFile( ), GROUP, key, value );
|
||||
}
|
||||
void
|
||||
pref_string_set_default( const char * key, const char * value )
|
||||
{
|
||||
pref_string_set_default( const char * key, const char * value ) {
|
||||
if( !g_key_file_has_key( getPrefsKeyFile( ), GROUP, key, NULL ) )
|
||||
pref_string_set( key, value );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user