Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
6ea3bc56
Commit
6ea3bc56
authored
Mar 19, 2024
by
Brendan Shanks
Committed by
Alexandre Julliard
Mar 28, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: Clarify that registry files are always in the current directory, and…
server: Clarify that registry files are always in the current directory, and simplify save_branch().
parent
9b4e3718
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
20 deletions
+16
-20
registry.c
server/registry.c
+16
-20
No files found.
server/registry.c
View file @
6ea3bc56
...
...
@@ -137,7 +137,7 @@ static struct key_value *find_value( const struct key *key, const struct unicode
struct
save_branch_info
{
struct
key
*
key
;
const
char
*
path
;
const
char
*
filename
;
};
#define MAX_SAVE_BRANCH_INFO 3
...
...
@@ -1823,7 +1823,7 @@ static int load_init_registry_from_file( const char *filename, struct key *key )
assert
(
save_branch_count
<
MAX_SAVE_BRANCH_INFO
);
save_branch_info
[
save_branch_count
].
path
=
filename
;
save_branch_info
[
save_branch_count
].
filename
=
filename
;
save_branch_info
[
save_branch_count
++
].
key
=
(
struct
key
*
)
grab_object
(
key
);
make_object_permanent
(
&
key
->
obj
);
return
(
f
!=
NULL
);
...
...
@@ -2038,10 +2038,10 @@ static void save_registry( struct key *key, obj_handle_t handle )
}
/* save a registry branch to a file */
static
int
save_branch
(
struct
key
*
key
,
const
char
*
path
)
static
int
save_branch
(
struct
key
*
key
,
const
char
*
filename
)
{
struct
stat
st
;
char
*
p
,
*
tmp
=
NULL
;
char
tmp
[
32
]
;
int
fd
,
count
=
0
,
ret
=
0
;
FILE
*
f
;
...
...
@@ -2050,14 +2050,15 @@ static int save_branch( struct key *key, const char *path )
if
(
debug_level
>
1
)
dump_operation
(
key
,
NULL
,
"Not saving clean"
);
return
1
;
}
tmp
[
0
]
=
0
;
/* test the file type */
if
((
fd
=
open
(
path
,
O_WRONLY
))
!=
-
1
)
if
((
fd
=
open
(
filename
,
O_WRONLY
))
!=
-
1
)
{
/* if file is not a regular file or has multiple links or is accessed
* via symbolic links, write directly into it; otherwise use a temp file */
if
(
!
lstat
(
path
,
&
st
)
&&
(
!
S_ISREG
(
st
.
st_mode
)
||
st
.
st_nlink
>
1
))
if
(
!
lstat
(
filename
,
&
st
)
&&
(
!
S_ISREG
(
st
.
st_mode
)
||
st
.
st_nlink
>
1
))
{
ftruncate
(
fd
,
0
);
goto
save
;
...
...
@@ -2065,15 +2066,11 @@ static int save_branch( struct key *key, const char *path )
close
(
fd
);
}
/* create a temp file
in the same directory
*/
/* create a temp file */
if
(
!
(
tmp
=
malloc
(
strlen
(
path
)
+
20
)))
goto
done
;
strcpy
(
tmp
,
path
);
if
((
p
=
strrchr
(
tmp
,
'/'
)))
p
++
;
else
p
=
tmp
;
for
(;;)
{
s
printf
(
p
,
"reg%lx%04x.tmp"
,
(
long
)
getpid
(),
count
++
);
s
nprintf
(
tmp
,
sizeof
(
tmp
)
,
"reg%lx%04x.tmp"
,
(
long
)
getpid
(),
count
++
);
if
((
fd
=
open
(
tmp
,
O_CREAT
|
O_EXCL
|
O_WRONLY
,
0666
))
!=
-
1
)
break
;
if
(
errno
!=
EEXIST
)
goto
done
;
close
(
fd
);
...
...
@@ -2084,29 +2081,28 @@ static int save_branch( struct key *key, const char *path )
save:
if
(
!
(
f
=
fdopen
(
fd
,
"w"
)))
{
if
(
tmp
)
unlink
(
tmp
);
if
(
tmp
[
0
]
)
unlink
(
tmp
);
close
(
fd
);
goto
done
;
}
if
(
debug_level
>
1
)
{
fprintf
(
stderr
,
"%s: "
,
path
);
fprintf
(
stderr
,
"%s: "
,
filename
);
dump_operation
(
key
,
NULL
,
"saving"
);
}
save_all_subkeys
(
key
,
f
);
ret
=
!
fclose
(
f
);
if
(
tmp
)
if
(
tmp
[
0
]
)
{
/* if successfully written, rename to final name */
if
(
ret
)
ret
=
!
rename
(
tmp
,
path
);
if
(
ret
)
ret
=
!
rename
(
tmp
,
filename
);
if
(
!
ret
)
unlink
(
tmp
);
}
done:
free
(
tmp
);
if
(
ret
)
make_clean
(
key
);
return
ret
;
}
...
...
@@ -2119,7 +2115,7 @@ static void periodic_save( void *arg )
if
(
fchdir
(
config_dir_fd
)
==
-
1
)
return
;
save_timeout_user
=
NULL
;
for
(
i
=
0
;
i
<
save_branch_count
;
i
++
)
save_branch
(
save_branch_info
[
i
].
key
,
save_branch_info
[
i
].
path
);
save_branch
(
save_branch_info
[
i
].
key
,
save_branch_info
[
i
].
filename
);
if
(
fchdir
(
server_dir_fd
)
==
-
1
)
fatal_error
(
"chdir to server dir: %s
\n
"
,
strerror
(
errno
));
set_periodic_save_timer
();
}
...
...
@@ -2139,10 +2135,10 @@ void flush_registry(void)
if
(
fchdir
(
config_dir_fd
)
==
-
1
)
return
;
for
(
i
=
0
;
i
<
save_branch_count
;
i
++
)
{
if
(
!
save_branch
(
save_branch_info
[
i
].
key
,
save_branch_info
[
i
].
path
))
if
(
!
save_branch
(
save_branch_info
[
i
].
key
,
save_branch_info
[
i
].
filename
))
{
fprintf
(
stderr
,
"wineserver: could not save registry branch to %s"
,
save_branch_info
[
i
].
path
);
save_branch_info
[
i
].
filename
);
perror
(
" "
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment