--- rpl/src/instructions_w1.c 2021/03/13 12:50:50 1.122 +++ rpl/src/instructions_w1.c 2025/04/15 10:17:56 1.132 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.33 - Copyright (C) 1989-2021 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.36 + Copyright (C) 1989-2025 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,6 +20,7 @@ */ +#define DEBUG_ERREURS #include "rpl-conv.h" @@ -1410,6 +1411,54 @@ instruction_write(struct_processus *s_et return; } + + if ((chaine_utf8 = transliteration(s_etat_processus, + chaine, d_locale, "UTF-8")) == NULL) + { + free(chaine); + + liberation(s_etat_processus, s_objet_argument_2); + liberation(s_etat_processus, s_objet_argument_1); + + return; + } + + free(chaine); + + if (alsprintf(s_etat_processus, &commande, + "insert or replace into data " + "(id, data) values (%lld, '%s')", (*((integer8 *) + (*s_objet_argument_2).objet)), chaine_utf8) < 0) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return; + } + + free(chaine_utf8); + + if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, + commande, (int) strlen(commande), &ppStmt, &queue) + != SQLITE_OK) + { + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } + + if (sqlite3_step(ppStmt) != SQLITE_DONE) + { + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } + + if (sqlite3_finalize(ppStmt) != SQLITE_OK) + { + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } + + liberation(s_etat_processus, s_objet_argument_3); + free(commande); } else // Fichiers indexés { @@ -3102,12 +3151,10 @@ instruction_wfdata(struct_processus *s_e static inline logical1 options_sockets(struct_processus *s_etat_processus, struct_socket *s_socket) { - int drapeau; - if (((*s_socket).options & (1 << d_BROADCAST)) != 0) { - if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_BROADCAST, &drapeau, - sizeof(drapeau)) != 0) + if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_BROADCAST, NULL, 0) + != 0) { return(d_erreur); } @@ -3115,8 +3162,8 @@ options_sockets(struct_processus *s_etat if (((*s_socket).options & (1 << d_DONT_ROUTE)) != 0) { - if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_DONTROUTE, &drapeau, - sizeof(drapeau)) != 0) + if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_DONTROUTE, NULL, 0) + != 0) { return(d_erreur); } @@ -3124,8 +3171,8 @@ options_sockets(struct_processus *s_etat if (((*s_socket).options & (1 << d_KEEP_ALIVE)) != 0) { - if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_KEEPALIVE, &drapeau, - sizeof(drapeau)) != 0) + if (setsockopt((*s_socket).socket, SOL_SOCKET, SO_KEEPALIVE, NULL, 0) + != 0) { return(d_erreur); } @@ -3282,7 +3329,7 @@ instruction_wfsock(struct_processus *s_e (*s_objet_argument).objet)).type, "SEQUENTIAL DATAGRAM") != 0)) { // Mode non connecté : l'attente se fait sur un poll() - +#define DEBUG_RETURN if ((s_objet_resultat = copie_objet(s_etat_processus, s_objet_argument, 'P')) == NULL) {