Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
lektor
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté GitLab
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Kubat
lektor
Validations
b41c6a5c
Valider
b41c6a5c
rédigé
Il y a 5 ans
par
🗿
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
update_directory
parent
ffd5b1e2
Branches
Branches contenant la validation
Étiquettes
Étiquettes contenant la validation
2 requêtes de fusion
!6
Resolve "Liste des commandes"
,
!2
update db
Modifications
2
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
player/db/update.c
+134
-0
134 ajouts, 0 suppression
player/db/update.c
player/db/update.h
+6
-0
6 ajouts, 0 suppression
player/db/update.h
avec
140 ajouts
et
0 suppression
player/db/update.c
0 → 100644
+
134
−
0
Voir le fichier @
b41c6a5c
#include
"update.h"
#include
<dirent.h>
#include
<errno.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define SQL_LAST_UPDATE "SELECT last_update FROM misc;"
static
void
serror
(
sqlite3
*
db
,
const
char
*
msg
)
{
fprintf
(
stderr
,
"%s: %s
\n
"
,
msg
,
sqlite3_errmsg
(
db
));
}
static
inline
void
*
mallocf
(
size_t
n
)
{
void
*
res
=
malloc
(
n
);
if
(
!
res
)
fprintf
(
stderr
,
"Failed to allocate %ld bytes.
\n
"
,
n
);
return
res
;
}
static
int
directories_and_files
(
const
struct
dirent
*
entry
)
{
return
entry
->
d_type
==
DT_REG
||
entry
->
d_type
==
DT_DIR
;
}
static
int
update_file
(
sqlite3
*
db
,
const
char
*
filename
,
int
last_update
)
{
// TODO
return
0
;
}
static
int
update_directory
(
sqlite3
*
db
,
const
char
*
directory
,
int
last_update
)
{
int
status_code
=
-
1
;
char
**
queue
;
size_t
queue_max
=
128
;
size_t
queue_len
=
0
;
queue
=
mallocf
(
queue_max
*
sizeof
(
char
*
));
if
(
!
queue
)
goto
error
;
queue
[
0
]
=
strdup
(
directory
);
queue_len
++
;
while
(
queue_len
)
{
struct
dirent
**
children
;
int
n
;
char
*
dir
=
queue
[
--
queue_len
];
n
=
scandir
(
dir
,
&
children
,
directories_and_files
,
alphasort
);
if
(
n
<
0
)
fprintf
(
stderr
,
"Failed to open '%s': %s.
\n
"
,
dir
,
strerror
(
errno
));
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
size_t
dirlen
=
strlen
(
dir
);
char
*
child
=
mallocf
(
dirlen
+
258
);
// child length (256) + null byte + slash
if
(
!
child
)
goto
error
;
strcpy
(
child
,
dir
);
child
[
dirlen
]
=
'/'
;
strcpy
(
child
+
dirlen
+
1
,
children
[
i
]
->
d_name
);
if
(
children
[
i
]
->
d_type
==
DT_REG
)
{
update_file
(
db
,
child
,
last_update
);
free
(
child
);
}
else
{
queue
[
queue_len
++
]
=
child
;
}
}
}
status_code
=
0
;
error:
for
(
size_t
i
=
0
;
i
<
queue_len
;
i
++
)
free
(
queue
[
i
]);
free
(
queue
);
return
status_code
;
}
int
lektor_db_update
(
sqlite3
*
db
,
const
char
*
directory
)
{
if
(
sqlite3_exec
(
db
,
"BEGIN TRANSACTION;"
,
0
,
0
,
0
)
!=
SQLITE_OK
)
{
serror
(
db
,
"Failed to start transaction"
);
return
-
1
;
}
sqlite3_stmt
*
stmt
=
0
;
int
last_update
=
0
;
if
(
sqlite3_prepare_v2
(
db
,
SQL_LAST_UPDATE
,
-
1
,
&
stmt
,
0
)
!=
SQLITE_OK
)
{
serror
(
db
,
"Failed to get last update time"
);
goto
error
;
}
switch
(
sqlite3_step
(
stmt
))
{
case
SQLITE_ROW
:
last_update
=
sqlite3_column_int
(
stmt
,
0
);
break
;
case
SQLITE_DONE
:
fprintf
(
stderr
,
"Failed to get last update time: table misc is empty"
);
goto
error
;
default:
serror
(
db
,
"Failed to get last update time"
);
goto
error
;
}
if
(
update_directory
(
db
,
directory
,
last_update
)
<
0
)
goto
error
;
if
(
sqlite3_exec
(
db
,
"COMMIT;"
,
0
,
0
,
0
)
!=
SQLITE_OK
)
{
serror
(
db
,
"Failed to commit transaction"
);
goto
error
;
}
sqlite3_finalize
(
stmt
);
return
0
;
error:
sqlite3_finalize
(
stmt
);
if
(
sqlite3_exec
(
db
,
"ROLLBACK;"
,
0
,
0
,
0
)
!=
SQLITE_OK
)
serror
(
db
,
"Failed to rollback transaction, database is corrupted"
);
return
-
1
;
}
Ce diff est replié.
Cliquez pour l'agrandir.
player/db/update.h
0 → 100644
+
6
−
0
Voir le fichier @
b41c6a5c
#pragma once
#include
<sqlite3.h>
int
lektor_db_update
(
struct
sqlite3
*
db
,
const
char
*
directory
);
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter