#include #include #include #include #define PATH "/usr/share/mga/backgrounds/" #define DSTLINK PATH"default.jpg" #define SRCLINK_PREFIX PATH"Mageia-Default-" #define SRCLINK_SUFFIX ".jpg" #define SRCLINK SRCLINK_PREFIX"%s"SRCLINK_SUFFIX #define RESSIZE 20 #define SRCSIZE (RESSIZE+strlen(SRCLINK_PREFIX)+strlen(SRCLINK_SUFFIX) + 1) #define ALLOWCHARS "0123456789x" int main(int argc, char* argv[]) { char src[SRCSIZE]; char res[RESSIZE]; int l; // check argument if (argc != 2) { fprintf(stderr, "Need a resolution argument, eg: '1920x1080'.\n"); return 1; } // get the res (max RESSIZE) l = snprintf(res, RESSIZE, argv[1]); if (l < 5) { fprintf(stderr, "Malformed resolution argument, eg: '1920x1080'.\n"); return 2; } // to be sure, set the last char as 0 if (l < RESSIZE) res[l] = 0; else res[RESSIZE-1] = 0; // check if the resolution contains acceptable chars l = strspn(res, ALLOWCHARS); if (l < 5) { fprintf(stderr, "Malformed resolution argument, eg: '1920x1080'.\n"); return 2; } // to be sure, set the last char as 0 if (l < RESSIZE) res[l] = 0; else res[RESSIZE-1] = 0; // create target string if (snprintf(src, SRCSIZE, SRCLINK, res) < 0) { fprintf(stderr, "Unknown error determining symlink target.\n"); return 3; } // check if symlink target exists if (access(src, F_OK) < 0) { fprintf(stderr, "No image for this resolution.\n"); return 0; } // set symlink if (symlink(src, DSTLINK) < 0) { if (errno != EEXIST) { fprintf(stderr, "Symlink could not be set: %s.\n", strerror(errno)); return 4; } // since the destination exists, remove and try again if (unlink(DSTLINK) < 0) { fprintf(stderr, "Symlink could not be forced: %s.\n", strerror(errno)); return 5; } if (symlink(src, DSTLINK) < 0) { fprintf(stderr, "Unknown error during forced symlink: %s.\n", strerror(errno)); return 6; } } return 0; }